Algoritma

Dalam matematika dan ilmu komputer, algoritme (/ˈælɡərɪðəm/ ⓘ) adalah setiap himpunan instruksi yang terdefinisi dengan baik yang, ketika diikuti, berhenti setelah sejumlah langkah yang berhingga yang membentuk penyelesaian suatu masalah komputasi. Algoritme tingkat lanjut dapat menggunakan perulangan dan melibatkan banyak kondisi yang menentukan langkah berikutnya berdasarkan masukan yang diberikan, sehingga menghasilkan urutan langkah yang panjang sebelum berhenti, tetapi semua algoritme berhenti berdasarkan definisinya.[1]
Berbeda dengan algoritme, heuristik dapat diterapkan pada masalah yang tidak mungkin memiliki penyelesaian algoritmik, misalnya karena masalah tersebut merupakan masalah tak terputuskan atau karena tidak ada cara untuk mendefinisikan hasil yang benar atau optimal.[2] Sebagai contoh, meskipun sistem rekomendasi media sosial secara keliru disebut "algoritme" dalam media populer, sistem tersebut lebih tepat diklasifikasikan sebagai heuristik karena tidak ada kriteria objektif yang dapat digunakan untuk menilai apakah suatu rekomendasi yang dihasilkan sistem tersebut "benar".
Sebagai suatu metode efektif, algoritme dapat dinyatakan dalam ruang dan waktu yang berhingga[3] dan dalam suatu bahasa formal yang terdefinisi dengan baik[4] untuk menghitung suatu fungsi.[5] Dimulai dari keadaan awal dan masukan, suatu komputasi terjadi pada setiap langkah, yang pada akhirnya menghasilkan keluaran[6] dan berhenti. Algoritme teracak memasukkan masukan acak yang dapat digunakan untuk menyimulasikan keluaran nondeterministik meskipun perpindahan antar-keadaan bersifat deterministik.[7]
Etimologi
[sunting | sunting sumber]Sekitar tahun 825 M, ilmuwan dan polimatik Persia al-Khwarizmi menulis kitāb al-ḥisāb al-hindī ("Kitab perhitungan India") dan kitab al-jam' wa'l-tafriq al-ḥisāb al-hindī ("Penjumlahan dan pengurangan dalam aritmetika India"). Pada awal abad ke-12, terjemahan Latin dari teks-teks tersebut yang melibatkan sistem bilangan Hindu–Arab dan aritmetika mulai muncul, misalnya Liber Alghoarismi de practica arismetrice, yang dikaitkan dengan John of Seville, dan Liber Algoritmi de numero Indorum, yang dikaitkan dengan Adelard of Bath.[8] Di sini, alghoarismi atau algoritmi merupakan latinisasi nama Al-Khwarizmi;[9] teks tersebut dimulai dengan frasa Dixit Algoritmi, atau "Demikianlah Al-Khwarizmi berkata".[2]

Kata algorism dalam bahasa Inggris kemudian berarti penggunaan notasi nilai tempat dalam perhitungan; kata tersebut muncul dalam Ancrene Wisse sekitar tahun 1225.[10] Ketika Geoffrey Chaucer menulis The Canterbury Tales pada akhir abad ke-14, ia menggunakan varian kata yang sama ketika menjelaskan augrym stones, yaitu batu yang digunakan untuk perhitungan nilai tempat.[11][12] Pada abad ke-15, di bawah pengaruh kata Yunani ἀριθμός (arithmos, 'bilangan'; bdk. "aritmetika"), kata Latin tersebut diubah menjadi algorithmus.[13] Pada tahun 1596, bentuk kata ini digunakan dalam bahasa Inggris sebagai algorithm oleh Thomas Hood.[14]
Definisi
[sunting | sunting sumber]Salah satu definisi informal adalah "seperangkat aturan yang secara tepat mendefinisikan suatu urutan operasi",[15] yang mencakup semua program komputer dan setiap prosedur birokrasi[16] atau resep masakan.[17] Secara umum, suatu program merupakan algoritme hanya jika pada akhirnya berhenti.[18] Secara formal, algoritme adalah seperangkat instruksi eksplisit untuk menghasilkan keluaran, yang dapat diikuti oleh komputer atau manusia ketika melakukan operasi tertentu pada simbol.[19]
Sejarah
[sunting | sunting sumber]section ini kekurangan informasi Perkembangan algoritme komputer pada abad ke-20 dan ke-21. (October 2023) |
Algoritme kuno
[sunting | sunting sumber]Prosedur langkah demi langkah untuk memecahkan masalah matematika telah dicatat sejak zaman kuno. Hal ini mencakup matematika Babilonia (sekitar 2500 SM),[20] matematika Mesir (sekitar 1550 SM),[20] matematika India (sekitar 800 SM dan sesudahnya),[21][22] Orakel Ifa (sekitar 500 SM),[23] matematika Yunani (sekitar 240 SM),[24] matematika Tiongkok (sekitar 200 SM dan sesudahnya),[25] dan matematika Arab (sekitar 800 M).[26]
Bukti paling awal mengenai algoritme ditemukan dalam matematika Mesopotamia kuno. Sebuah tablet tanah liat Sumeria yang ditemukan di Shuruppak dekat Baghdad dan bertanggal sekitar ca 2500 BC mendeskripsikan algoritme pembagian paling awal.[20] Selama dinasti Babilonia Pertama, pada masa ca 1800–ca 1600 BC, tablet tanah liat Babylonia mendeskripsikan algoritme untuk menghitung rumus.[27] Algoritme juga digunakan dalam astronomi Babilonia. Tablet tanah liat Babilonia mendeskripsikan dan menggunakan prosedur algoritmik untuk menghitung waktu dan tempat terjadinya peristiwa astronomis penting.[28]
Algoritme untuk aritmetika juga ditemukan dalam matematika Mesir kuno, yang berasal dari Rhind Mathematical Papyrus sekitar ca 1550 BC.[20] Algoritme kemudian digunakan dalam matematika Helenistik kuno. Dua contohnya adalah Sieve of Eratosthenes, yang dideskripsikan dalam Introduction to Arithmetic karya Nicomachus,[29][24]: Ch 9.2 dan algoritme Euclides, yang pertama kali dideskripsikan dalam Euclid's Elements (sekitar ca 300 BC).[24]: Ch 9.1 Contoh matematika India kuno mencakup Shulba Sutras, Sekolah Kerala, dan Brāhmasphuṭasiddhānta.[21]
Pada abad ke-9, Muḥammad ibn Mūsā al-Khwārizmī merevolusi bidang ini dengan menetapkan algoritme sebagai urutan langkah logis yang sistematis dan berhingga untuk menyelesaikan masalah matematika. Dalam karyanya yang berpengaruh, The Compendious Book on Calculation by Completion and Balancing, ia melampaui penyelesaian numerik tertentu dengan memperkenalkan prosedur umum untuk reduksi dan penyeimbangan aljabar. Hal ini mengubah matematika menjadi proses "mekanis" yang terdiri atas aturan-aturan yang terdefinisi dengan baik—suatu perubahan mendasar yang menjadi dasar teori algoritme modern. Terjemahan Latin dari risalah aritmetikanya, berjudul Algoritmi de numero Indorum, menyebabkan istilah algoritme berasal dari latinisasi namanya, Algoritmi, yang secara khusus digunakan untuk menggambarkan pendekatan baru berbasis aturan terhadap matematika.[30]
Algoritme kriptografi pertama untuk memecahkan kode terenkripsi dikembangkan oleh Al-Kindi, seorang matematikawan Arab abad ke-9, dalam A Manuscript On Deciphering Cryptographic Messages. Ia memberikan deskripsi pertama mengenai kriptanalisis menggunakan analisis frekuensi, yang merupakan algoritme pemecahan kode paling awal.[26]
Komputer
[sunting | sunting sumber]Jam berbobot
[sunting | sunting sumber]Jam berbobot merupakan salah satu penemuan penting Eropa pada Abad Pertengahan, khususnya mekanisme verge escapement[31] yang menghasilkan bunyi detak pada jam mekanis. Mesin otomatis yang akurat[32] menghasilkan automata mekanis pada abad ke-13 dan mesin komputasi—mesin diferensial dan mesin analitik karya Charles Babbage dan Ada Lovelace pada pertengahan abad ke-19.[33] Lovelace merancang algoritme pertama yang ditujukan untuk sebuah komputer, yaitu mesin analitik Babbage, komputer Turing-complete nyata pertama, yang melampaui kalkulator mekanis pada zamannya. Meskipun implementasi lengkap perangkat kedua Babbage baru dibuat beberapa dekade setelah masa hidupnya, Lovelace disebut sebagai "programmer pertama dalam sejarah".
Relai elektromekanis
[sunting | sunting sumber]Mesin tenun Jacquard, pendahulu kartu berlubang, dan mesin penyambungan telepon menyebabkan perkembangan komputer pertama.[34] Pada pertengahan abad ke-19, telegraf telah digunakan di seluruh dunia. Pada akhir abad ke-19, ticker tape (sekitar ca 1870s) dan kartu berlubang (sekitar 1890) dikembangkan. Kemudian muncul teleprinter (sekitar ca 1910) dengan penggunaan kertas berlubang yang menggunakan kode Baudot pada pita.
Jaringan penyambungan telepon yang menggunakan relai elektromekanis ditemukan pada tahun 1835. Hal ini mengarah pada penemuan perangkat penjumlah digital oleh George Stibitz pada tahun 1937. Ketika bekerja di Bell Laboratories, ia mengamati penggunaan kalkulator mekanis bergigi yang "membebani", sehingga mendorongnya menciptakan penjumlah digital eksperimental di rumah.[35][36]
Formalisasi
[sunting | sunting sumber]
Pada tahun 1928, formalisasi parsial terhadap konsep modern algoritme dimulai melalui upaya untuk memecahkan Entscheidungsproblem (masalah keputusan) David Hilbert. Formalisasi selanjutnya dirumuskan sebagai upaya untuk mendefinisikan "keterhitungan efektif"[37] atau "metode efektif".[38] Formalisasi tersebut mencakup fungsi rekursif Gödel–Herbrand–Kleene pada tahun 1930, 1934, dan 1935, Alonzo Church's kalkulus lambda pada tahun 1936, Emil Post's Formulation 1 pada tahun 1936, serta Alan Turing's mesin Turing pada tahun 1936–37 dan 1939.
Teori formal algoritme
[sunting | sunting sumber]Formalisasi matematis mengenai gagasan algoritme berbeda dari formalisasi fungsi yang dapat dihitung. Secara khusus, kesetaraan model komputabilitas klasik tidak dengan sendirinya memberikan definisi formal algoritme, karena algoritme yang berbeda dapat menghitung fungsi yang sama. Oleh karena itu, beberapa pendekatan telah berupaya mengkarakterisasi algoritme sebagai objek matematika.
Yuri Gurevich mengembangkan teori mesin keadaan abstrak (ASM) sebagai karakterisasi formal algoritme sekuensial. Tesis ASM sekuensialnya menyatakan bahwa setiap algoritme sekuensial secara perilaku setara dengan suatu ASM sekuensial, dengan kesetaraan tersebut ditetapkan langkah demi langkah. Gurevich merumuskan aksioma untuk algoritme sekuensial dan membuktikan teorema karakterisasi yang bersesuaian.[39]
Pendekatan berbeda dikembangkan oleh Yiannis N. Moschovakis, yang mengusulkan teori matematika algoritme berdasarkan objek teori himpunan dan membedakan algoritme dari implementasinya. Teorinya dikembangkan berkaitan dengan pertanyaan tentang kompleksitas komputasi dan analisis matematis terhadap algoritme tertentu.[40]
Algoritme modern
[sunting | sunting sumber]Bab atau bagian ini mungkin mengandung riset asli. |
Selama beberapa dekade, diasumsikan bahwa evolusi algoritme bergerak dari heuristik menuju algoritme formal.[butuh rujukan] Integrasi simbolik memberikan ilustrasi klasik. Pada tahun 1961, program SAINT karya James Slagle menggunakan heuristik untuk menyelesaikan 52 dari 54 soal kalkulus tingkat mahasiswa tahun pertama dari buku teks MIT (≈96%). Pada tahun 1967, SIN karya Larry Moses menyempurnakan heuristik tersebut dan mencapai keberhasilan 100%, meskipun tetap bersifat heuristik. Akhirnya, pada tahun 1969, Robert Risch memperkenalkan Algoritme Risch dengan jaminan formal. Lintasan ini mendefinisikan jalur tradisional: heuristik berkembang hingga muncul algoritme definitif dengan jaminan.
Namun, munculnya AI berbasis transformer telah membalik urutan ini—algoritme klasik kini kembali digantikan oleh heuristik.[butuh rujukan]
Algoritme telah berevolusi dan berkembang dalam berbagai cara seiring berjalannya waktu. Penggunaan umum algoritme saat ini mencakup aplikasi media sosial seperti Instagram dan YouTube. Algoritme digunakan untuk menganalisis apa yang disukai orang dan menyajikan lebih banyak hal tersebut kepada orang yang berinteraksi dengannya. Komputasi kuantum menggunakan prosedur algoritme kuantum untuk menyelesaikan masalah dengan lebih cepat. Baru-baru ini, pada tahun 2024, NIST memperbarui standar enkripsi pascakuantumnya, yang mencakup algoritme enkripsi baru untuk meningkatkan pertahanan terhadap serangan menggunakan komputasi kuantum.
Representasi
[sunting | sunting sumber]Algoritme dapat dinyatakan dalam berbagai jenis notasi, termasuk bahasa alami, pseudokode, diagram alir, diagram DRAKON, bahasa pemrograman, atau tabel kendali. Ekspresi algoritme dalam bahasa alami cenderung panjang dan ambigu sehingga jarang digunakan untuk algoritme yang kompleks atau teknis. Pseudokode, diagram alir, diagram DRAKON, dan tabel kendali merupakan ekspresi algoritme terstruktur yang menghindari ambiguitas umum dalam bahasa alami. Bahasa pemrograman terutama digunakan untuk mengekspresikan algoritme dalam bentuk yang dapat dieksekusi komputer, tetapi juga digunakan untuk mendefinisikan atau mendokumentasikan algoritme.
Mesin Turing
[sunting | sunting sumber]Ada banyak kemungkinan representasi dan program mesin Turing dapat dinyatakan sebagai urutan tabel mesin (lihat finite-state machine, state-transition table, dan control table untuk informasi lebih lanjut), sebagai diagram alir dan diagram DRAKON (lihat state diagram untuk informasi lebih lanjut), sebagai bentuk dasar kode mesin atau kode rakitan yang disebut "kumpulan quadruple", dan sebagainya. Representasi algoritme juga dapat diklasifikasikan ke dalam tiga tingkat deskripsi mesin Turing yang diterima: deskripsi tingkat tinggi, deskripsi implementasi, dan deskripsi formal.[41] Deskripsi tingkat tinggi menjelaskan karakteristik algoritme itu sendiri dan mengabaikan bagaimana algoritme tersebut diimplementasikan pada mesin Turing.[41] Deskripsi implementasi menjelaskan cara umum mesin menggerakkan kepalanya dan menyimpan data untuk menjalankan algoritme, tetapi tidak memberikan keadaan yang tepat.[41] Dalam tingkat perincian paling tinggi, deskripsi formal memberikan tabel keadaan dan daftar transisi mesin Turing secara tepat.[41]
Representasi diagram alir
[sunting | sunting sumber]Diagram alir adalah alat bantu grafis yang mendeskripsikan dan mendokumentasikan suatu algoritme. Diagram ini memiliki empat simbol utama: panah yang menunjukkan aliran program, persegi panjang (SEQUENCE, GOTO), belah ketupat yang merepresentasikan keputusan, dan titik (OR-tie). Substruktur dapat "bersarang" di dalam persegi panjang, tetapi hanya jika terdapat satu jalan keluar dari superstruktur.
Analisis algoritmik
[sunting | sunting sumber]Sering kali penting untuk mengetahui waktu, penyimpanan, atau biaya lain yang mungkin diperlukan suatu algoritme. Metode telah dikembangkan untuk menganalisis algoritme guna memperkirakan kebutuhan tersebut. Sebagai contoh, algoritme yang menjumlahkan elemen-elemen dalam daftar berisi n bilangan memiliki kebutuhan waktu sebesar , dengan menggunakan notasi O besar. Algoritme tersebut hanya perlu mengingat dua nilai: jumlah seluruh elemen sejauh ini dan posisi saat ini dalam daftar masukan. Jika ruang yang diperlukan untuk menyimpan bilangan masukan tidak dihitung, algoritme tersebut memiliki kebutuhan ruang , jika tidak maka diperlukan .
Algoritme yang berbeda dapat menyelesaikan tugas yang sama dengan seperangkat instruksi yang membutuhkan waktu, ruang, atau "usaha" yang lebih sedikit atau lebih banyak dibandingkan algoritme lainnya. Sebagai contoh, algoritme pencarian biner (dengan biaya ) mengungguli pencarian sekuensial (biaya ) ketika digunakan untuk pencarian pada tabel pencarian dalam daftar yang telah diurutkan.
Formal versus empiris
[sunting | sunting sumber]Analisis dan studi algoritme merupakan disiplin ilmu komputer. Algoritme sering dipelajari secara abstrak, tanpa mengacu pada bahasa pemrograman atau implementasi tertentu. Seperti disiplin matematika lainnya, bidang ini berfokus pada sifat-sifat algoritme, bukan implementasinya. Pseudocode merupakan bentuk yang lazim digunakan dalam analisis karena merupakan representasi yang sederhana dan umum. Sebagian besar algoritme diimplementasikan pada platform perangkat keras/perangkat lunak tertentu dan efisiensi algoritmiknya diuji menggunakan kode nyata. Efisiensi suatu algoritme tertentu mungkin tidak penting untuk banyak masalah "sekali jalan", tetapi dapat menjadi sangat penting bagi algoritme yang dirancang untuk penggunaan ilmiah yang cepat, interaktif, komersial, atau berumur panjang. Peningkatan ukuran masukan sering kali mengungkap algoritme yang tidak efisien yang sebelumnya tampak tidak bermasalah.
Pengujian empiris berguna untuk menemukan interaksi tak terduga yang memengaruhi kinerja. Benchmark dapat digunakan untuk membandingkan peningkatan potensial sebelum dan sesudah terhadap suatu algoritme setelah optimisasi program. Pengujian empiris tidak dapat sepenuhnya menggantikan analisis formal dan sulit dilakukan secara adil.[42]
Efisiensi eksekusi
[sunting | sunting sumber]Untuk menggambarkan potensi peningkatan yang bahkan mungkin terjadi pada algoritme yang telah mapan, suatu inovasi penting baru-baru ini yang berkaitan dengan algoritme FFT yang digunakan untuk pemrosesan citra dapat mengurangi waktu pemrosesan hingga 1.000 kali lipat untuk pencitraan medis.[43] Secara umum, peningkatan kecepatan bergantung pada sifat khusus masalah, yang sangat umum ditemukan dalam penerapan praktis.[44]
Kasus terbaik dan kasus terburuk
[sunting | sunting sumber]Kasus terbaik suatu algoritme mengacu pada skenario atau masukan yang menyebabkan algoritme atau struktur data membutuhkan waktu dan sumber daya paling sedikit untuk menyelesaikan tugasnya.[45] Kasus terburuk suatu algoritme adalah kasus yang menyebabkan algoritme atau struktur data mengonsumsi waktu dan sumber daya komputasi maksimum.[46]
Perancangan
[sunting | sunting sumber]Perancangan algoritme dapat memanfaatkan banyak pendekatan berbeda, seperti bagi-dan-taklukkan atau pemrograman dinamis. Teknik untuk merancang dan mengimplementasikan algoritme juga disebut pola perancangan algoritme.[47] Contohnya mencakup pola metode templat dan pola dekorator. Aspek penting dalam perancangan algoritme adalah penggunaan sumber daya seperti memori atau waktu secara efisien; notasi O besar digunakan untuk menggambarkan bagaimana penggunaan sumber daya berubah seiring meningkatnya ukuran masukan.[48]
Pemrograman terstruktur
[sunting | sunting sumber]Setiap algoritme dapat dihitung oleh model Turing lengkap. Kelengkapan Turing hanya memerlukan empat jenis instruksi—GOTO bersyarat, GOTO tak bersyarat, penugasan, dan HALT. Tausworthe melengkapi tiga struktur kanonis Böhm-Jacopini:[49] SEQUENCE, IF-THEN-ELSE, dan WHILE-DO, dengan dua struktur tambahan: DO-WHILE dan CASE.[50] Manfaat tambahan dari program terstruktur adalah program tersebut memungkinkan pembuktian kebenaran menggunakan induksi matematika.[51]
Status hukum
[sunting | sunting sumber]Pada dirinya sendiri, algoritme biasanya tidak dapat dipatenkan. Di Amerika Serikat, suatu klaim yang hanya terdiri atas manipulasi sederhana terhadap konsep abstrak, bilangan, atau sinyal tidak dianggap sebagai "proses", sehingga algoritme tidak dapat dipatenkan (seperti dalam Gottschalk v. Benson). Namun, penerapan praktis algoritme dapat dipatenkan. Sebagai contoh, dalam Diamond v. Diehr, penerapan algoritme umpan balik sederhana untuk membantu proses pematangan karet sintetis dianggap dapat dipatenkan. Paten perangkat lunak merupakan hal yang kontroversial,[52] dan terdapat paten yang dikritik terkait algoritme, khususnya algoritme kompresi data, seperti paten LZW milik Unisys. Selain itu, beberapa algoritme kriptografi memiliki pembatasan ekspor (lihat export of cryptography).
Klasifikasi
[sunting | sunting sumber]Berdasarkan implementasi
[sunting | sunting sumber]- Rekursi
- Algoritme rekursif memanggil dirinya sendiri berulang kali hingga memenuhi kondisi terminasi dan merupakan teknik umum dalam pemrograman fungsional. Algoritme iteratif menggunakan pengulangan seperti perulangan atau struktur data seperti tumpukan untuk menyelesaikan masalah. Suatu masalah dapat lebih sesuai untuk salah satu implementasi tersebut. Tower of Hanoi merupakan teka-teki yang umumnya diselesaikan menggunakan implementasi rekursif. Setiap versi rekursif memiliki versi iteratif yang ekuivalen (meskipun mungkin lebih atau kurang kompleks), dan sebaliknya.
- Serial, paralel, atau terdistribusi
- Algoritme biasanya dibahas dengan asumsi bahwa komputer mengeksekusi satu instruksi algoritme pada satu waktu pada komputer serial. Algoritme serial dirancang untuk lingkungan ini, berbeda dengan algoritme paralel atau algoritme terdistribusi. Algoritme paralel memanfaatkan arsitektur komputer yang memungkinkan beberapa prosesor bekerja pada suatu masalah secara bersamaan. Algoritme terdistribusi menggunakan beberapa mesin yang terhubung melalui jaringan komputer. Algoritme paralel dan terdistribusi membagi masalah menjadi submasalah dan mengumpulkan kembali hasilnya. Konsumsi sumber daya pada algoritme tersebut bukan hanya siklus prosesor pada setiap prosesor, tetapi juga overhead komunikasi antarprosesor. Beberapa algoritme pengurutan dapat diparalelkan secara efisien, tetapi overhead komunikasinya mahal. Algoritme iteratif umumnya dapat diparalelkan, tetapi beberapa masalah tidak memiliki algoritme paralel dan disebut masalah yang secara inheren serial.
- Deterministik atau nondeterministik
- Algoritme deterministik menyelesaikan masalah dengan keputusan yang tepat pada setiap langkah; sedangkan algoritme nondeterministik menyelesaikan masalah melalui tebakan. Tebakan biasanya dibuat lebih akurat melalui penggunaan heuristik.
- Eksak atau aproksimasi
- Meskipun banyak algoritme menghasilkan solusi eksak, algoritme aproksimasi mencari pendekatan yang dekat dengan solusi sebenarnya. Algoritme tersebut memiliki nilai praktis untuk banyak masalah sulit. Sebagai contoh, masalah ransel, yaitu terdapat sekumpulan barang dan tujuannya adalah memasukkan barang ke dalam ransel untuk memperoleh nilai total maksimum. Setiap barang memiliki berat dan nilai tertentu. Berat total yang dapat dibawa tidak boleh melebihi suatu bilangan tetap X. Oleh karena itu, solusi harus mempertimbangkan berat barang sekaligus nilainya.[53]
- Algoritme kuantum
- Algoritme kuantum berjalan pada model realistis komputasi kuantum. Istilah tersebut biasanya digunakan untuk algoritme yang tampak secara inheren kuantum atau menggunakan fitur penting komputasi kuantum, seperti superposisi kuantum atau keterikatan kuantum.
Berdasarkan paradigma perancangan
[sunting | sunting sumber]Cara lain untuk mengklasifikasikan algoritme adalah berdasarkan metodologi perancangan atau paradigma algoritmiknya. Beberapa paradigma umum adalah:
- Brute force atau pencarian menyeluruh
- Brute force adalah metode penyelesaian masalah dengan mencoba setiap pilihan yang mungkin secara sistematis hingga solusi optimal ditemukan. Pendekatan ini dapat sangat memakan waktu karena menguji setiap kemungkinan kombinasi variabel. Pendekatan ini sering digunakan ketika metode lain tidak tersedia atau terlalu kompleks. Brute force dapat menyelesaikan berbagai masalah, termasuk menemukan jalur terpendek antara dua titik dan memecahkan kata sandi.
- Bagi dan taklukkan
- Algoritme bagi-dan-taklukkan berulang kali mengurangi masalah menjadi satu atau lebih instans yang lebih kecil dari masalah itu sendiri (biasanya secara rekursif) hingga instans tersebut cukup kecil untuk diselesaikan dengan mudah. Pengurutan gabung merupakan contoh bagi-dan-taklukkan, ketika daftar yang tidak terurut berulang kali dibagi menjadi daftar yang lebih kecil, yang diurutkan dengan cara yang sama dan kemudian digabungkan.[54] Dalam varian yang lebih sederhana dari bagi-dan-taklukkan yang disebut prune and search atau algoritme kurangi-dan-taklukkan, hanya satu instans yang lebih kecil dari dirinya sendiri yang diselesaikan dan tidak memerlukan langkah penggabungan.[55] Contoh algoritme prune-and-search adalah algoritme pencarian biner.
- Pencarian dan enumerasi
- Banyak masalah (seperti permainan catur) dapat dimodelkan sebagai masalah pada graf. Algoritme eksplorasi graf menentukan aturan untuk bergerak mengelilingi graf dan berguna untuk masalah semacam itu. Kategori ini juga mencakup algoritme pencarian, enumerasi cabang dan batas, dan pencarian mundur.
- Algoritme teracak
- Algoritme semacam itu membuat beberapa pilihan secara acak (atau semu-acak). Algoritme ini menemukan solusi aproksimasi ketika menemukan solusi eksak tidak praktis (lihat metode heuristik di bawah). Untuk beberapa masalah, aproksimasi tercepat harus melibatkan sejumlah keacakan.[56] Apakah algoritme teracak dengan kompleksitas waktu polinomial dapat menjadi algoritme tercepat untuk beberapa masalah merupakan pertanyaan terbuka yang dikenal sebagai masalah P versus NP. Terdapat dua kelas besar algoritme semacam ini:
- Algoritme Monte Carlo mengembalikan jawaban yang benar dengan probabilitas tinggi. Misalnya, RP adalah subkelas dari algoritme tersebut yang berjalan dalam waktu polinomial.
- Algoritme Las Vegas selalu mengembalikan jawaban yang benar, tetapi waktu eksekusinya hanya dibatasi secara probabilistik, misalnya ZPP.
- Reduksi kompleksitas
- Teknik ini mengubah masalah sulit menjadi masalah yang lebih dikenal dan dapat diselesaikan dengan algoritme yang (diharapkan) optimal secara asimtotik. Tujuannya adalah menemukan algoritme reduksi yang kompleksitasnya tidak didominasi oleh algoritme hasil reduksi. Sebagai contoh, salah satu algoritme seleksi menemukan median dari daftar tak terurut dengan terlebih dahulu mengurutkan daftar (bagian yang mahal), kemudian mengambil elemen tengah dari daftar yang telah diurutkan (bagian yang murah). Teknik ini juga dikenal sebagai transformasi dan taklukkan.
- Pencarian mundur
- Dalam pendekatan ini, beberapa solusi dibangun secara bertahap dan ditinggalkan ketika diketahui bahwa solusi tersebut tidak dapat menghasilkan solusi lengkap yang valid.
Masalah optimisasi
[sunting | sunting sumber]Untuk masalah optimisasi, terdapat klasifikasi algoritme yang lebih khusus; algoritme untuk masalah tersebut dapat termasuk dalam satu atau lebih kategori umum yang dijelaskan di atas sekaligus dalam salah satu kategori berikut:
- Pemrograman linear
- Ketika mencari solusi optimal untuk fungsi linear yang dibatasi oleh kendala persamaan dan pertidaksamaan linear, kendala tersebut dapat digunakan secara langsung untuk menghasilkan solusi optimal. Terdapat algoritme yang dapat menyelesaikan setiap masalah dalam kategori ini, seperti algoritme simpleks yang populer.[57] Masalah yang dapat diselesaikan dengan pemrograman linear mencakup masalah aliran maksimum untuk graf berarah. Jika suatu masalah juga mensyaratkan bahwa variabel yang tidak diketahui harus berupa bilangan bulat, masalah tersebut diklasifikasikan sebagai pemrograman bilangan bulat. Algoritme pemrograman linear dapat menyelesaikan masalah tersebut jika dapat dibuktikan bahwa semua pembatasan untuk nilai bilangan bulat bersifat dangkal, yaitu solusi tetap memenuhi pembatasan tersebut. Dalam kasus umum, digunakan algoritme khusus atau algoritme yang menemukan solusi aproksimasi, bergantung pada tingkat kesulitan masalah.
- Pemrograman dinamis
- Ketika suatu masalah memiliki struktur optimal—artinya solusi optimal dapat dibangun dari solusi optimal submasalah—dan submasalah yang tumpang tindih, yang berarti submasalah yang sama digunakan untuk menyelesaikan banyak instans masalah yang berbeda, pendekatan yang lebih cepat yang disebut pemrograman dinamis menghindari penghitungan ulang solusi. Sebagai contoh, algoritme Floyd–Warshall, jalur terpendek antara simpul awal dan tujuan pada graf berbobot dapat ditemukan dengan menggunakan jalur terpendek menuju tujuan dari semua simpul yang berdekatan. Pemrograman dinamis dan memoisasi saling berkaitan. Berbeda dengan bagi-dan-taklukkan, submasalah dalam pemrograman dinamis sering kali saling tumpang tindih. Perbedaan antara pemrograman dinamis dan rekursi sederhana adalah adanya penyimpanan atau memoisasi pemanggilan rekursif. Ketika submasalah bersifat independen dan tidak berulang, memoisation tidak membantu; karena itu pemrograman dinamis tidak berlaku untuk semua masalah kompleks. Dengan menggunakan memoisation, pemrograman dinamis mengurangi kompleksitas banyak masalah dari eksponensial menjadi polinomial.
- Metode rakus
- Algoritme rakus, serupa dengan pemrograman dinamis, bekerja dengan memeriksa struktur bagian, dalam hal ini bukan struktur masalah melainkan struktur solusi yang diberikan. Algoritme semacam itu dimulai dengan suatu solusi dan memperbaikinya melalui modifikasi kecil. Untuk beberapa masalah, algoritme tersebut selalu menemukan solusi optimal, tetapi untuk masalah lain dapat berhenti pada optimum lokal. Penggunaan algoritme rakus yang paling populer adalah menemukan pohon rentang minimum pada graf tanpa siklus negatif. Pohon Huffman, Kruskal, Prim, dan Sollin merupakan algoritme rakus yang dapat menyelesaikan masalah optimisasi ini.
- Metode heuristik
- Dalam masalah optimisasi, algoritme heuristik menemukan solusi yang mendekati solusi optimal ketika menemukan solusi optimal tidak praktis. Algoritme tersebut semakin mendekati solusi optimal seiring kemajuan prosesnya. Secara prinsip, jika dijalankan selama waktu tak berhingga, algoritme tersebut akan menemukan solusi optimal. Secara ideal, algoritme tersebut dapat menemukan solusi yang sangat dekat dengan solusi optimal dalam waktu yang relatif singkat. Algoritme ini mencakup pencarian lokal, pencarian tabu, simulated annealing, dan algoritme genetika. Beberapa, seperti simulated annealing, merupakan algoritme nondeterministik, sementara yang lain, seperti pencarian tabu, bersifat deterministik. Jika batas kesalahan dari solusi nonoptimal diketahui, algoritme tersebut selanjutnya dikategorikan sebagai algoritme aproksimasi.
Contoh
[sunting | sunting sumber]Salah satu algoritme paling sederhana mencari bilangan terbesar dalam suatu daftar bilangan dengan urutan acak. Untuk menemukan solusi, setiap bilangan dalam daftar harus diperiksa. Dari sini diperoleh algoritme sederhana yang dapat dideskripsikan dalam bahasa Inggris biasa sebagai berikut:
Deskripsi tingkat tinggi:
- Jika suatu himpunan bilangan kosong, maka tidak ada bilangan terbesar.
- Anggap bilangan pertama dalam himpunan sebagai bilangan terbesar.
- Untuk setiap bilangan yang tersisa dalam himpunan: jika bilangan tersebut lebih besar daripada bilangan terbesar saat ini, bilangan tersebut menjadi bilangan terbesar yang baru.
- Ketika tidak ada lagi bilangan yang belum diperiksa dalam himpunan, anggap bilangan terbesar saat ini sebagai bilangan terbesar dalam himpunan.
Deskripsi (kuasi-)formal: Ditulis dalam bentuk prosa tetapi jauh lebih dekat dengan bahasa tingkat tinggi suatu program komputer, berikut merupakan pengkodean algoritme yang lebih formal dalam pseudokode atau kode pidgin:
Algoritma LargestNumber Input: Daftar bilangan L. Output: Bilangan terbesar dalam daftar L.
if L.size = 0 return null
largest ← L[0]
for each item in L, do
if item > largest, then
largest ← item
return largest
- "←" adalah singkatan untuk "diubah menjadi". Misalnya, "terbesar ← item" artinya nilai dari terbesar diubah menjadi nilai dari item.
- "kembalikan" mengakhiri algoritma dan mengeluarkan nilai kembalian.
Penemuan algoritme dengan bantuan AI
[sunting | sunting sumber]Sistem kecerdasan buatan telah digunakan untuk menemukan dan mengoptimalkan algoritme. Pada tahun 2023, Google DeepMind memperkenalkan AlphaDev, sistem pembelajaran penguatan yang didasarkan pada AlphaZero yang menemukan algoritme pengurutan dan hashing yang lebih baik.[58] Dalam makalah yang diterbitkan di Nature, AlphaDev dilaporkan menemukan algoritme pengurutan kecil yang mengungguli tolok ukur manusia yang sebelumnya dikenal dan diintegrasikan ke dalam pustaka pengurutan C++ standar LLVM.[59]
Pada tahun 2025, Google DeepMind memperkenalkan AlphaEvolve, agen pengodean evolusioner yang didukung model bahasa besar untuk penemuan dan pengoptimalan algoritme secara umum.[60] AlphaEvolve menggunakan model bahasa untuk mengusulkan perubahan kode, evaluator otomatis untuk menguji solusi kandidat, dan proses komputasi evolusioner untuk meningkatkan algoritme yang menjanjikan melalui beberapa iterasi.[61]
Lihat juga
[sunting | sunting sumber]- Abstract machine
- ALGOL
- Algoritme = Logika + Kendali
- Algorithm aversion
- Algorithm engineering
- Algorithm characterizations
- Algorithmic bias
- Algorithmic composition
- Algorithmic entities
- Algorithmic synthesis
- Algorithmic technique
- Algorithmic topology
- Computational mathematics
- Garbage in, garbage out
- Introduction to Algorithms (buku teks)
- Government by algorithm
- List of algorithms
- Daftar buku algoritme
- List of algorithm general topics
- Medium is the message
- Outline of algorithms
- Regulation of algorithms
- Theory of computation
Catatan
[sunting | sunting sumber]- ↑ "Suatu prosedur yang memiliki semua karakteristik algoritme kecuali kemungkinan tidak memiliki sifat keterhinggaan dapat disebut 'metode komputasi'" (Knuth 1971:5).
- 1 2 David A. Grossman, Ophir Frieder, Information Retrieval: Algorithms and Heuristics, edisi ke-2, 2004, ISBN 1402030045
- ↑ "Setiap algoritme matematika klasik, misalnya, dapat dideskripsikan dalam sejumlah kata bahasa Inggris yang berhingga" (Rogers 1987:2).
- ↑ Terdefinisi dengan baik berkenaan dengan agen yang menjalankan algoritme: "Terdapat agen komputasi, biasanya manusia, yang dapat bereaksi terhadap instruksi dan melakukan perhitungan" (Rogers 1987:2).
- ↑ "algoritme adalah suatu prosedur untuk menghitung suatu fungsi (berkenaan dengan notasi tertentu yang dipilih untuk bilangan bulat) ... pembatasan ini (pada fungsi numerik) tidak menyebabkan hilangnya sifat umum", (Rogers 1977:1).
- ↑ "Suatu algoritme memiliki satu atau lebih keluaran, yaitu besaran-besaran yang memiliki hubungan tertentu dengan masukan" (Knuth 1973:5).
- ↑ Apakah suatu proses dengan proses internal acak (tidak termasuk masukan) merupakan algoritme atau tidak masih dapat diperdebatkan. Rogers berpendapat bahwa: "suatu komputasi dilakukan secara diskret dan bertahap, tanpa menggunakan metode kontinu atau perangkat analog ... dilakukan secara deterministik, tanpa menggunakan metode atau perangkat acak, misalnya dadu" (Rogers 1987:2).
- ↑ Blair, Ann, Duguid, Paul, Goeing, Anja-Silvia dan Grafton, Anthony. Information: A Historical Companion, Princeton: Princeton University Press, 2021. hlm. 247
- ↑ "Definition of ALGORITHM". Merriam-Webster Online Dictionary (dalam bahasa Inggris). Diarsipkan dari versi aslinya tanggal Februari 14, 2020. Diakses tanggal November 14, 2019.
{{cite web}}: Pemeliharaan CS1: Tanggal diterjemahkan otomatis (link) - ↑ "algorism". Oxford English Dictionary. Diakses tanggal Mei 18, 2025.
- ↑ Chaucer, Geoffrey. "The Miller's Tale". Line 3210.
- ↑ Skeat, Walter William (1914). "agrim, agrum". Dalam Mayhew, Anthony Lawson (ed.). A Glossary of Tudor and Stuart Words: Especially from the Dramatists. Clarendon Press. hlm. 5–6.
- ↑ Grabiner, Judith V. (Desember 2013). "The role of mathematics in liberal arts education". Dalam Matthews, Michael R. (ed.). International Handbook of Research in History, Philosophy and Science Teaching. Springer. hlm. 793–836. doi:10.1007/978-94-007-7654-8_25. ISBN 978-94-007-7654-8.
- ↑ "algorithm". Oxford English Dictionary. Diakses tanggal Mei 18, 2025.
- ↑ Stone (1971), hlm. 8.
- ↑
Simanowski, Roberto (2018). The Death Algorithm and Other Digital Dilemmas. Untimely Meditations. Vol. 14. Diterjemahkan oleh Chase, Jefferson. Cambridge, Massachusetts: MIT Press. hlm. 147. ISBN 978-0-262-53637-0. Diarsipkan dari versi aslinya tanggal Desember 22, 2019. Diakses tanggal Mei 27, 2019.
[...] the next level of abstraction of central bureaucracy: globally operating algorithms.
- ↑
Dietrich, Eric (1999). "Algorithm". Dalam Wilson, Robert Andrew; Keil, Frank C. (ed.). The MIT Encyclopedia of the Cognitive Sciences. MIT Cognet library. Cambridge, Massachusetts: MIT Press (dipublikasikan 2001). hlm. 11. ISBN 978-0-262-73144-7. Diakses tanggal Juli 22, 2020.
An algorithm is a recipe, method, or technique for doing something.
- ↑ Stone mensyaratkan bahwa "program tersebut harus berhenti dalam sejumlah langkah yang berhingga" (Stone 1973:7–8).
- ↑ Boolos dan Jeffrey 1974, 1999:19
- 1 2 3 4 Chabert, Jean-Luc (2012). A History of Algorithms: From the Pebble to the Microchip. Springer Science & Business Media. hlm. 7–8. ISBN 978-3-642-18192-4.
- 1 2 Sriram, M. S. (2005). "Algorithms in Indian Mathematics". Dalam Emch, Gerard G.; Sridharan, R.; Srinivas, M. D. (ed.). Contributions to the History of Indian Mathematics (dalam bahasa Inggris). Springer. hlm. 153. ISBN 978-93-86279-25-5.
- ↑ Hayashi, T. (2023, January 1). Brahmagupta. Encyclopedia Britannica.
- ↑ Zaslavsky, Claudia (1970). "Mathematics of the Yoruba People and of Their Neighbors in Southern Nigeria". The Two-Year College Mathematics Journal. 1 (2): 76–99. doi:10.2307/3027363. ISSN 0049-4925. JSTOR 3027363.
- 1 2 3 Cooke, Roger L. (2005). The History of Mathematics: A Brief Course. John Wiley & Sons. ISBN 978-1-118-46029-0.
- ↑ Chabert, Jean-Luc, ed. (1999). A History of Algorithms (dalam bahasa Inggris). doi:10.1007/978-3-642-18192-4. ISBN 978-3-540-63369-3.
- 1 2 Dooley, John F. (2013). A Brief History of Cryptology and Cryptographic Algorithms. Springer Science & Business Media. hlm. 12–3. ISBN 978-3-319-01628-3.
- ↑ Knuth, Donald E. (1972). "Ancient Babylonian Algorithms" (PDF). Commun. ACM. 15 (7): 671–677. doi:10.1145/361454.361514. ISSN 0001-0782. S2CID 7829945. Diarsipkan dari asli (PDF) tanggal Desember 24, 2012.
- ↑ Aaboe, Asger (2001). Episodes from the Early History of Astronomy. New York: Springer. hlm. 40–62. ISBN 978-0-387-95136-2.
- ↑ Ast, Courtney. "Eratosthenes". Wichita State University: Department of Mathematics and Statistics. Diarsipkan dari versi aslinya tanggal Februari 27, 2015. Diakses tanggal Februari 27, 2015.
- ↑ Knuth, Donald E. (1996). Selected Papers on Computer Science. CSLI Publications. hlm. 1–2.
Al-Khwarizmi's work was the first to provide a systematic, rule-based approach to solving equations, which is why the word 'algorithm' was coined from his name to describe this methodical process.
- ↑ Bolter 1984:24
- ↑ Bolter 1984:26
- ↑ Bolter 1984:33–34, 204–206.
- ↑ Bell and Newell diagram 1971:39, cf. Davis 2000
- ↑ Melina Hill, Valley News Correspondent, A Tinkerer Gets a Place in History, Valley News West Lebanon NH, Thursday, March 31, 1983, p. 13.
- ↑ Davis 2000:14
- ↑ Kleene 1943 dalam Davis 1965:274
- ↑ Rosser 1939 dalam Davis 1965:225
- ↑ Gurevich, Yuri (2000). "Sequential abstract-state machines capture sequential algorithms". ACM Transactions on Computational Logic. 1 (1): 77–111. doi:10.1145/343369.343384.
- ↑ Moschovakis, Yiannis N.; Paschalis, Vasilis (2008). "Elementary Algorithms and Their Implementations". New Computational Paradigms. Springer. hlm. 87–118. doi:10.1007/978-0-387-68546-5_5.
- 1 2 3 4 Sipser 2006:157
- ↑ Kriegel, Hans-Peter; Schubert, Erich; Zimek, Arthur (2016). "The (black) art of run-time evaluation: Are we comparing algorithms or implementations?". Knowledge and Information Systems. 52 (2): 341–378. doi:10.1007/s10115-016-1004-2. ISSN 0219-1377. S2CID 40772241.
- ↑ Gillian Conahan (Januari 2013). "Better Math Makes Faster Data Networks". discovermagazine.com. Diarsipkan dari versi aslinya tanggal Mei 13, 2014. Diakses tanggal Mei 13, 2014.
- ↑ Haitham Hassanieh, Piotr Indyk, Dina Katabi, and Eric Price, "ACM-SIAM Symposium On Discrete Algorithms (SODA) Diarsipkan Juli 4, 2013, di Wayback Machine, Kyoto, January 2012. See also the sFFT Web Page Diarsipkan Februari 21, 2012, di Wayback Machine.
- ↑ "Best Case". Dictionary of Algorithms and Data Structures. National Institute of Standards and Technology (NIST). National Institute of Standards and Technology. Diakses tanggal Mei 29, 2025.
- ↑ "worst case". Dictionary of Algorithms and Data Structures. National Institute of Standards and Technology (NIST). National Institute of Standards and Technology (NIST). Diakses tanggal Mei 29, 2025.
- ↑ Goodrich, Michael T.; Tamassia, Roberto (2002). Algorithm Design: Foundations, Analysis, and Internet Examples. John Wiley & Sons, Inc. ISBN 978-0-471-38365-9. Diarsipkan dari versi aslinya tanggal April 28, 2015. Diakses tanggal Juni 14, 2018.
{{cite book}}: Pemeliharaan CS1: Tanggal diterjemahkan otomatis (link) - ↑ "Big-O notation (article) | Algorithms". Khan Academy (dalam bahasa Inggris). Diakses tanggal Juni 3, 2024.
- ↑ Tausworthe 1977:101
- ↑ Tausworthe 1977:142
- ↑ Knuth 1973 section 1.2.1, expanded by Tausworthe 1977 at pages 100ff and Chapter 9.1
- ↑ "The Experts: Does the Patent System Encourage Innovation?". The Wall Street Journal. Mei 16, 2013. ISSN 0099-9660. Diakses tanggal Maret 29, 2017.
- ↑ Kellerer, Hans; Pferschy, Ulrich; Pisinger, David (2004). Knapsack Problems | Hans Kellerer | Springer (dalam bahasa Inggris). Springer. doi:10.1007/978-3-540-24777-7. ISBN 978-3-540-40286-2. S2CID 28836720. Diarsipkan dari versi aslinya tanggal Oktober 18, 2017. Diakses tanggal September 19, 2017.
{{cite book}}: Pemeliharaan CS1: Tanggal diterjemahkan otomatis (link) - ↑ Goodrich, Michael T.; Tamassia, Roberto (2001). "5.2 Divide and Conquer". Algorithm Design: Foundations, Analysis, and Internet Examples. John Wiley & Sons. hlm. 263. ISBN 978-0-471-38365-9.
- ↑ Goodrich & Tamassia (2001), hlm. 245, 4.7.1 Prune-and-search.
- ↑ Misalnya, volume suatu politop konveks (yang dideskripsikan menggunakan oracle keanggotaan) dapat didekati dengan akurasi tinggi menggunakan algoritme waktu polinomial teracak, tetapi tidak menggunakan algoritme deterministik: lihat Dyer, Martin; Frieze, Alan; Kannan, Ravi (Januari 1991). "A Random Polynomial-time Algorithm for Approximating the Volume of Convex Bodies". J. ACM. 38 (1): 1–17. doi:10.1145/102782.102783. S2CID 13268711.
- ↑ George B. Dantzig and Mukund N. Thapa. 2003. Linear Programming 2: Theory and Extensions. Springer-Verlag.
- ↑ "AlphaDev discovers faster sorting algorithms". Google DeepMind. Juni 7, 2023. Diakses tanggal April 29, 2026.
{{cite web}}: Pemeliharaan CS1: Tanggal diterjemahkan otomatis (link) - ↑ Mankowitz, Daniel J.; Michalski, Andrea; Zhernov, Anton; Gelmi, Marco; Selvi, Marco; et al. (Juni 2023). "Faster sorting algorithms discovered using deep reinforcement learning". Nature. 618 (7964): 257–263. doi:10.1038/s41586-023-06004-9. PMID 37286649.
- ↑ "AlphaEvolve: A Gemini-powered coding agent for designing advanced algorithms". Google DeepMind. Mei 14, 2025. Diakses tanggal April 29, 2026.
{{cite web}}: Pemeliharaan CS1: Tanggal diterjemahkan otomatis (link) - ↑ Novikov, Alexander; Vu, Ngân; Eisenberger, Marvin; Dupont, Emilien; Huang, Po-Sen; et al. (2025). "AlphaEvolve: A coding agent for scientific and algorithmic discovery". arXiv:2506.13131 [cs.AI].
Daftar pustaka
[sunting | sunting sumber]- Axt, P (1959). "On a Subrecursive Hierarchy and Primitive Recursive Degrees". Transactions of the American Mathematical Society. 92 (1): 85–105. doi:10.2307/1993169. JSTOR 1993169.
- Bell, C. Gordon and Newell, Allen (1971), Computer Structures: Readings and Examples, McGraw–Hill Book Company, New York. ISBN 0-07-004357-4.
- Blass, Andreas; Gurevich, Yuri (2003). "Algorithms: A Quest for Absolute Definitions" (PDF). Bulletin of European Association for Theoretical Computer Science. 81. Diarsipkan (PDF) dari versi aslinya tanggal Oktober 9, 2022. Mencakup bibliografi 56 referensi.
- Bolter, David J. (1984). Turing's Man: Western Culture in the Computer Age (Edisi 1984). Chapel Hill, NC: The University of North Carolina Press. ISBN 978-0-8078-1564-9., ISBN 0-8078-4108-0
- Boolos, George; Jeffrey, Richard (1999) [1974]. Computability and Logic (Edisi 4th). Cambridge University Press, London. ISBN 978-0-521-20402-6.: lihat Bab 3 Turing machines yang membahas "certain enumerable sets not effectively (mechanically) enumerable".
- Burgin, Mark (2004). Super-Recursive Algorithms. Springer. ISBN 978-0-387-95569-8.
- Campagnolo, M.L., Moore, C., and Costa, J.F. (2000) An analog characterization of the subrecursive functions. In Proc. of the 4th Conference on Real Numbers and Computers, Odense University, pp. 91–109
- Church, Alonzo (1936). "An Unsolvable Problem of Elementary Number Theory". American Journal of Mathematics. 58 (2): 345–363. doi:10.2307/2371045. JSTOR 2371045. Dicetak ulang dalam The Undecidable, hlm. 89ff. Ekspresi pertama dari "Church's Thesis". Lihat khususnya halaman 100 (The Undecidable) tempat ia mendefinisikan gagasan "effective calculability" dalam istilah "an algorithm", dan menggunakan kata "terminates", dan sebagainya.
- Church, Alonzo (1936). "A Note on the Entscheidungsproblem". The Journal of Symbolic Logic. 1 (1): 40–41. doi:10.2307/2269326. JSTOR 2269326. S2CID 42323521. Church, Alonzo (1936). "Correction to a Note on the Entscheidungsproblem". The Journal of Symbolic Logic. 1 (3): 101–102. doi:10.2307/2269030. JSTOR 2269030. S2CID 5557237. Dicetak ulang dalam The Undecidable, hlm. 110ff. Church menunjukkan bahwa Entscheidungsproblem tidak dapat diselesaikan dalam sekitar 3 halaman teks dan 3 halaman catatan kaki.
- Daffa', Ali Abdullah al- (1977). The Muslim contribution to mathematics. London: Croom Helm. ISBN 978-0-85664-464-1.
- Davis, Martin (1965). The Undecidable: Basic Papers On Undecidable Propositions, Unsolvable Problems and Computable Functions. New York: Raven Press. ISBN 978-0-486-43228-1. Davis memberikan komentar sebelum setiap artikel. Makalah karya Gödel, Alonzo Church, Turing, Rosser, Kleene, dan Emil Post disertakan; makalah yang dikutip dalam artikel dicantumkan berdasarkan nama penulis.
- Davis, Martin (2000). Engines of Logic: Mathematicians and the Origin of the Computer. New York: W.W. Nortion. ISBN 978-0-393-32229-3. Davis menawarkan biografi singkat Leibniz, Boole, Frege, Cantor, Hilbert, Gödel dan Turing dengan von Neumann sebagai tokoh antagonis utama. Biografi sangat singkat Joseph-Marie Jacquard, Babbage, Ada Lovelace, Claude Shannon, Howard Aiken, dan lain-lain.
- Templat:DADS
- Dean, Tim (2012). "Evolution and moral diversity". Baltic International Yearbook of Cognition, Logic and Communication. 7. doi:10.4148/biyclc.v7i0.1775.
- Dennett, Daniel (1995). Darwin's Dangerous Idea. New York: Touchstone/Simon & Schuster. hlm. 32–36. ISBN 978-0-684-80290-9.
- Dilson, Jesse (2007). The Abacus (Edisi (1968, 1994)). St. Martin's Press, NY. ISBN 978-0-312-10409-2., ISBN 0-312-10409-X
- Yuri Gurevich, Sequential Abstract State Machines Capture Sequential Algorithms, ACM Transactions on Computational Logic, Vol 1, no 1 (July 2000), pp. 77–111. Mencakup bibliografi 33 sumber.
- van Heijenoort, Jean (2001). From Frege to Gödel, A Source Book in Mathematical Logic, 1879–1931 (Edisi (1967)). Harvard University Press, Cambridge. ISBN 978-0-674-32449-7., edisi ke-3 1976[?], ISBN 0-674-32449-8 (pbk.)
- Hodges, Andrew (1983). Alan Turing: The Enigma. New York: Simon and Schuster. ISBN 978-0-671-49207-6., ISBN 0-671-49207-1. Lihat bab "The Spirit of Truth" untuk sejarah yang mengarah pada pembuktiannya dan pembahasannya.
- Kleene, Stephen C. (1936). "General Recursive Functions of Natural Numbers". Mathematische Annalen. 112 (5): 727–742. doi:10.1007/BF01565439. S2CID 120517999. Diarsipkan dari asli tanggal September 3, 2014. Diakses tanggal September 30, 2013.
{{cite journal}}: Pemeliharaan CS1: Tanggal diterjemahkan otomatis (link) Dipresentasikan kepada American Mathematical Society, September 1935. Dicetak ulang dalam The Undecidable, hlm. 237ff. Definisi Kleene tentang "general recursion" (sekarang dikenal sebagai mu-recursion) digunakan oleh Church dalam makalahnya tahun 1935 An Unsolvable Problem of Elementary Number Theory yang membuktikan bahwa "decision problem" bersifat "undecidable". - Kleene, Stephen C. (1943). "Recursive Predicates and Quantifiers". Transactions of the American Mathematical Society. 53 (1): 41–73. doi:10.2307/1990131. JSTOR 1990131. Dicetak ulang dalam The Undecidable, hlm. 255ff. Kleene menyempurnakan definisinya mengenai "general recursion" dan dalam bab "12. Algorithmic theories" mengemukakan "Thesis I" (hlm. 274); kemudian ia mengulangi tesis ini (dalam Kleene 1952:300) dan menamainya "Church's Thesis" (Kleene 1952:317) (yaitu tesis Church).
- Kleene, Stephen C. (1991) [1952]. Introduction to Metamathematics (Edisi Tenth). North-Holland Publishing Company. ISBN 978-0-7204-2103-3.
- Knuth, Donald (1997). Fundamental Algorithms, Third Edition. Reading, Massachusetts: Addison–Wesley. ISBN 978-0-201-89683-1.
- Knuth, Donald (1969). Volume 2/Seminumerical Algorithms, The Art of Computer Programming First Edition. Reading, Massachusetts: Addison–Wesley.
- Kosovsky, N.K. Elements of Mathematical Logic and its Application to the theory of Subrecursive Algorithms, LSU Publ., Leningrad, 1981
- Kowalski, Robert (1979). "Algorithm=Logic+Control". Communications of the ACM. 22 (7): 424–436. doi:10.1145/359131.359136. S2CID 2509896.
- A.A. Markov (1954) Theory of algorithms. [Translated by Jacques J. Schorr-Kon and PST staff] Imprint Moscow, Academy of Sciences of the USSR, 1954 [i.e., Jerusalem, Israel Program for Scientific Translations, 1961; available from the Office of Technical Services, U.S. Dept. of Commerce, Washington] Description 444 p. 28 cm. Added t.p. in Russian Translation of Works of the Mathematical Institute, Academy of Sciences of the USSR, v. 42. Original title: Teoriya algerifmov. [QA248.M2943 Dartmouth College library. U.S. Dept. of Commerce, Office of Technical Services, number OTS 60-51085.]
- Minsky, Marvin (1967). Computation: Finite and Infinite Machines (Edisi First). Prentice-Hall, Englewood Cliffs, NJ. ISBN 978-0-13-165449-5. Minsky memperluas "...gagasan tentang algoritme – prosedur efektif..." dalam bab 5.1 Computability, Effective Procedures and Algorithms. Infinite machines.
- Post, Emil (1936). "Finite Combinatory Processes, Formulation I". The Journal of Symbolic Logic. 1 (3): 103–105. doi:10.2307/2269031. JSTOR 2269031. S2CID 40284503. Dicetak ulang dalam The Undecidable, hlm. 289ff. Post mendefinisikan proses sederhana menyerupai algoritme berupa manusia yang menulis atau menghapus tanda, berpindah dari satu kotak ke kotak lain, dan pada akhirnya berhenti ketika mengikuti daftar instruksi sederhana. Ini dikutip oleh Kleene sebagai salah satu sumber "Thesis I", yang disebut tesis Church–Turing.
- Rogers, Hartley Jr. (1987). Theory of Recursive Functions and Effective Computability. The MIT Press. ISBN 978-0-262-68052-3.
- Rosser, J.B. (1939). "An Informal Exposition of Proofs of Godel's Theorem and Church's Theorem". Journal of Symbolic Logic. 4 (2): 53–60. doi:10.2307/2269059. JSTOR 2269059. S2CID 39499392. Dicetak ulang dalam The Undecidable, hlm. 223ff. Di sini terdapat definisi terkenal Rosser mengenai "effective method": "...suatu metode yang setiap langkahnya telah ditentukan secara tepat dan yang pasti menghasilkan jawaban dalam sejumlah langkah berhingga... sebuah mesin yang kemudian akan menyelesaikan masalah apa pun dari himpunan tersebut tanpa campur tangan manusia selain memasukkan pertanyaan dan (kemudian) membaca jawaban" (hlm. 225–226, The Undecidable)
- Santos-Lang, Christopher (2015). "Moral Ecology Approaches to Machine Ethics" (PDF). Dalam van Rysewyk, Simon; Pontier, Matthijs (ed.). Machine Medical Ethics. Intelligent Systems, Control and Automation: Science and Engineering. Vol. 74. Switzerland: Springer. hlm. 111–127. doi:10.1007/978-3-319-08108-3_8. ISBN 978-3-319-08107-6. Diarsipkan (PDF) dari versi aslinya tanggal Oktober 9, 2022.
- Scott, Michael L. (2009). Programming Language Pragmatics (Edisi 3rd). Morgan Kaufmann Publishers/Elsevier. ISBN 978-0-12-374514-9.
- Sipser, Michael (2006). Introduction to the Theory of Computation. PWS Publishing Company. ISBN 978-0-534-94728-6.
- Sober, Elliott; Wilson, David Sloan (1998). Unto Others: The Evolution and Psychology of Unselfish Behavior. Cambridge: Harvard University Press. ISBN 978-0-674-93046-9.
- Stone, Harold S. (1971). Introduction to Computer Organization and Data Structures. McGraw-Hill, New York. ISBN 978-0-07-061726-1. Lihat khususnya bab pertama berjudul: Algorithms, Turing Machines, and Programs. Definisi informalnya yang ringkas: "...setiap urutan instruksi yang dapat dipatuhi oleh robot disebut algoritme" (hlm. 4).
- Tausworthe, Robert C (1977). Standardized Development of Computer Software Part 1 Methods. Englewood Cliffs NJ: Prentice–Hall, Inc. ISBN 978-0-13-842195-3.
- Turing, Alan M. (1936–37). "On Computable Numbers, With An Application to the Entscheidungsproblem". Proceedings of the London Mathematical Society. Series 2. 42: 230–265. doi:10.1112/plms/s2-42.1.230. S2CID 73712. Koreksi, ibid, vol. 43(1937) hlm. 544–546. Dicetak ulang dalam The Undecidable, hlm. 116ff. Makalah terkenal Turing yang diselesaikan sebagai disertasi magister ketika berada di King's College Cambridge, Britania Raya.
- Turing, Alan M. (1939). "Systems of Logic Based on Ordinals". Proceedings of the London Mathematical Society. 45: 161–228. doi:10.1112/plms/s2-45.1.161. hdl:21.11116/0000-0001-91CE-3. Dicetak ulang dalam The Undecidable, hlm. 155ff. Makalah Turing yang mendefinisikan "oracle" merupakan disertasi PhD-nya ketika berada di Princeton.
- United States Patent and Trademark Office (2006), 2106.02 **>Mathematical Algorithms: 2100 Patentability, Manual of Patent Examining Procedure (MPEP). Revisi terakhir Agustus 2006
- Zaslavsky, C. (1970). Mathematics of the Yoruba People and of Their Neighbors in Southern Nigeria. The Two-Year College Mathematics Journal, 1(2), 76–99. https://doi.org/10.2307/3027363
- NIST Releases First 3 Finalized Post-Quantum Encryption Standards. https://www.nist.gov/news-events/news/2024/08/nist-releases-first-3-finalized-post-quantum-encryption-standards
Bacaan lebih lanjut
[sunting | sunting sumber]- Bellah, Robert Neelly (1985). Habits of the Heart: Individualism and Commitment in American Life. Berkeley: University of California Press. ISBN 978-0-520-25419-0.
- Berlinski, David (2001). The Advent of the Algorithm: The 300-Year Journey from an Idea to the Computer. Harvest Books. ISBN 978-0-15-601391-8.
- Chabert, Jean-Luc (1999). A History of Algorithms: From the Pebble to the Microchip. Springer Verlag. ISBN 978-3-540-63369-3.
- Thomas H. Cormen; Charles E. Leiserson; Ronald L. Rivest; Clifford Stein (2009). Introduction To Algorithms (Edisi 3rd). MIT Press. ISBN 978-0-262-03384-8.
- Harel, David; Feldman, Yishai (2004). Algorithmics: The Spirit of Computing. Addison-Wesley. ISBN 978-0-321-11784-7.
- Hertzke, Allen D.; McRorie, Chris (1998). "The Concept of Moral Ecology". Dalam Lawler, Peter Augustine; McConkey, Dale (ed.). Community and Political Thought Today. Westport, CT: Praeger.
- Jon Kleinberg, Éva Tardos(2006): Algorithm Design, Pearson/Addison-Wesley, ISBN 978-0-32129535-4
- Knuth, Donald E. (2000). Selected Papers on Analysis of Algorithms Diarsipkan Juli 1, 2017, di Wayback Machine. Stanford, California: Center for the Study of Language and Information.
- Knuth, Donald E. (2010). Selected Papers on Design of Algorithms Diarsipkan Juli 16, 2017, di Wayback Machine. Stanford, California: Center for the Study of Language and Information.
- Wallach, Wendell; Allen, Colin (November 2008). Moral Machines: Teaching Robots Right from Wrong. US: Oxford University Press. ISBN 978-0-19-537404-9.
{{cite book}}: Pemeliharaan CS1: Tanggal diterjemahkan otomatis (link) - Bleakley, Chris (2020). Poems that Solve Puzzles: The History and Science of Algorithms. Oxford University Press. ISBN 978-0-19-885373-2.
Pranala luar
[sunting | sunting sumber]Templat:Wikiversity department
- Hazewinkel, Michiel, ed. (2001) [1994], "Algorithm", Encyclopedia of Mathematics, Springer Science+Business Media B.V. / Kluwer Academic Publishers, ISBN 978-1-55608-010-4
- (Inggris) Weisstein, Eric W. "Algorithm". MathWorld.
- Dictionary of Algorithms and Data Structures – National Institute of Standards and Technology
- Repositori algoritme
- The Stony Brook Algorithm Repository – State University of New York at Stony Brook
- Collected Algorithms of the ACM – Association for Computing Machinery
- The Stanford GraphBase Diarsipkan Desember 6, 2015, di Wayback Machine – Stanford University
Templat:Industrial and applied mathematics Templat:Algorithmic paradigms