Algoritma: Perbedaan antara revisi

Konten dihapus Konten ditambahkan
Sulhan (bicara | kontrib)
Pengembangan artikel dari bahasa Inggris (2014-08-21T14:32:34).
Tidak ada ringkasan suntingan
Tag: halaman dengan galat kutipan VisualEditor Suntingan perangkat seluler Suntingan peramban seluler
 
(118 revisi perantara oleh 71 pengguna tidak ditampilkan)
Baris 1:
[[ImageBerkas:Euclid flowchart 1.png |thumb |lright jmpl| [[Diagram alur]] dari sebuah algoritma ([[Algoritma EuclidEuklides]]) untuk menghitung faktor persekutuan terbesar (f.p.kb.) dari dua angka ''a'' dan ''b'' dalam lokasi bernama A dan B. Algoritma dijalankan dengan pengurangan berturut-turut dalam dua pengulangan: JIKA pengujian B >= A menghasilkan "ya" (atau benar) (lebih akuratnya ''angka'' ''b'' dalam lokasi B lebih besar atau sama dengan ''angka'' ''a'' dalam lokasi A) MAKA, algoritma menentukan B ← B - A (artinya angka ''b'' - ''a'' menggantikan ''b'' sebelumnya). Hal yang sama, JIKA A > B, MAKA A ← A - B. Proses tersebut berhenti saat (isi dari) B adalah 0, menghasilkan f.p.k. dalam A. (Algoritma tersebut diambil dari Scott 2009:13; simbol dan gaya penggambaran dari Tausworthe 1977).]]
 
Dalam [[matematika]] dan [[ilmu komputer]], '''algoritma''' adalah rangkaian terbatas dari instruksi-instruksi yang rumit, biasanya digunakan untuk menyelesaikan atau menjalankan suatu kelompok masalah [[komputasi]] tertentu. Algoritma digunakan sebagai spesifikasi untuk melakukan perhitungan dan pemrosesan [[data]]. Algoritma yang lebih mutakhir dapat melakukan deduksi otomatis (disebut sebagai penalaran otomatis) dan menggunakan tes matematis dan logis untuk mengarahkan eksekusi kode melalui berbagai rute (disebut sebagai pengambilan keputusan otomatis). Penggunaan karakteristik manusia sebagai deskriptor mesin secara metaforis telah dipraktekkan oleh [[Alan Turing]] dengan terminologi seperti "memory", "search" dan "stimulus".<ref>Blair, Ann, Duguid, Paul, Goeing, Anja-Silvia and Grafton, Anthony. Information: A Historical Companion, Princeton: Princeton University Press, 2021. p. 247</ref>
Dalam [[matematika]] dan [[ilmu komputer]], '''algoritma''' adalah prosedur langkah-demi-langkah untuk penghitungan.
Algoritma digunakan untuk [[penghitungan]], [[pemrosesan data]], dan [[penalaran otomatis]].
 
Sebaliknya, [[heuristika]] adalah pendekatan untuk pemecahan masalah komputasi yang mungkin tidak sepenuhnya terspesifikasi atau tidak menjamin hasil yang benar atau optimal, terutama dalam ranah masalah komputasi yang mana tidak ada hasil yang benar atau optimal yang terdefinisi dengan baik.<ref>David A. Grossman, Ophir Frieder, ''Information Retrieval: Algorithms and Heuristics'', 2nd edition, 2004, {{isbn|1402030045}}</ref>
Algoritma adalah [[metode efektif]] diekspresikan sebagai rangkaian [[terbatas]] <ref>
"Setiap algoritma klasik, misalnya, bisa dijelaskan dengan sejumlah kata bahasa Inggris yang terbatas"
(Rogers 1987:2).
</ref>
dari instruksi-instruksi yang telah didefinisikan dengan baik <ref>
Telah didefinisikan terhadap agen yang menjalankan algoritma tersebut: "Ada agen komputasi, biasanya manusia, yang bisa beraksi terhadap instruksi dan melakukan komputasi"
(Rogers 1987:2).
</ref>
untuk menghitung sebuah [[Fungsi (matematika)|fungsi]]. <ref>
"Sebuah algoritma adalah sebuah prosedur untuk menghitung sebuah ''fungsi'' (terhadap beberapa notasi terpilih integer) ... batasan ini (terhadap fungsi bilangan) tanpa kehilangan generalisasi",
(Rogers 1987:1).
</ref>
Dimulai dari sebuah kondisi awal dan input awal (mungkin [[deretan null|kosong]]), <ref>
Sebuah algoritma memiliki input [[nol]] atau lebih, yaitu, [[kuantitas]] yang diberikan padanya sejak awal sebelum algoritma dijalankan"
(Knuth 1973:5).
</ref>
instruksi-instruksi tersebut menjelaskan sebuah [[komputasi]] yang, bila [[Eksekusi (komputasi)|dieksekusi]], diproses lewat sejumlah urutan kondisi terbatas <ref>
"Sebuah prosedur yang memiliki semua karakteristik dari sebuah algoritma kecuali prosedur yang tidak memiliki keterbatasan bisa disebut sebagai sebuah 'metode komputasi'"
(Knuth 1973:5).
</ref>
yang terdefinisi dengan baik, yang pada akhirnya menghasilkan "keluaran" <ref>
"Sebuah algoritma memiliki satu atau lebih keluaran, yaitu kuantitas yang memiliki relasi tertentu terhadap masukan"
(Knuth 1973:5).
</ref>
dan berhenti di kondisi akhir.
Transisi dari satu kondisi ke kondisi selanjutnya tidak harus [[deterministik]];
beberapa algoritma, dikenal dengan [[algoritma pengacakan]], menggunakan masukan acak. <ref>
Apakah sebuah proses dengan proses-proses bagian dalam yang acak (tidak termasuk masukan) adalah sebuah algoritma atau bukan masih diperdebatkan.
Rogers beropini bahwa: "sebuah komputasi dilakukan dengan sebuah gaya diskrit bertahap, tanpa menggunakan metode-metode berkelanjutan atau perangkat analog ... dijalakan terus secara deterministik, tanpa menggunakan metode-metode atau perangkat acak, misalnya, dadu"
Rogers 1987:2
</ref>
 
Sebagai metode yang efektif, algoritma dapat diekspresikan dalam jumlah ruang dan waktu yang terbatas,<ref>"Any classical mathematical algorithm, for example, can be described in a finite number of English words" (Rogers 1987:2).</ref> dan dalam bahasa formal yang terdefinisi dengan baik<ref>Well defined with respect to the agent that executes the algorithm: "There is a computing agent, usually human, which can react to the instructions and carry out the computations" (Rogers 1987:2).</ref> untuk menghitung suatu [[Fungsi (matematika)|fungsi]].<ref>"an algorithm is a procedure for computing a ''function'' (with respect to some chosen notation for integers) ... this limitation (to numerical functions) results in no loss of generality", (Rogers 1987:1).</ref> Dimulai dari tataran awal dan input awal (bisa jadi kosong),<ref>"An algorithm has [[zero]] or more inputs, i.e., [[Quantity|quantities]] which are given to it initially before the algorithm begins" (Knuth 1973:5).</ref> instruksi-instruksi yang ada menggambarkan sebuah komputasi yang, ketika dieksekusi, berjalan melalui sejumlah tataran dengan jumlah terhingga yang terdefinisi dengan baik,<ref>"A procedure which has all the characteristics of an algorithm except that it possibly lacks finiteness may be called a 'computational method{{'"}} (Knuth 1973:5).</ref> yang pada akhirnya menghasilkan "output"<ref>"An algorithm has one or more outputs, i.e. quantities which have a specified relation to the inputs" (Knuth 1973:5).</ref> dan berakhir pada tataran final akhir. Transisi dari satu tataran ke tataran berikutnya tidak selalu bersifat menentukan; beberapa algoritma, yang dikenal sebagai algoritma acak, menggabungkan input acak.<ref>Whether or not a process with random interior processes (not including the input) is an algorithm is debatable. Rogers opines that: "a computation is carried out in a discrete stepwise fashion, without the use of continuous methods or analogue devices ... carried forward deterministically, without resort to random methods or devices, e.g., dice" (Rogers 1987:2).</ref>
Walaupun ''[[algorism]]''-nya [[al-Khawarizmi]] dirujuk sebagai aturan-aturan melakukan aritmatika menggunakan [[bilangan Hindu-Arab]] dan solusi sistematis dan [[persamaan kuadrat]], sebagian formalisasi yang nantinya menjadi ''algoritma'' modern dimulai dengan usaha untuk memecahkan [[permasalahan keputusan]] (''Entscheidungsproblem'') yang diajukan oleh [[David Hilbert]] di tahun 1928.
Formalisasi selanjutnya dilihat sebagai usaha untuk menentukan "[[penghitungan efektif]]"
<ref>
Kleene 1943 dalam Davis 1965:274
</ref>
atau "metode efektif";
<ref>
Rosser 1939 dalam Davis 1965:225
</ref>
formalisasi tersebut mengikutkan [[Kurt Godel|Godel]]-[[Jacques Herbrand|Herbrand]]-[[Stephen Cole Kleene|Kleene]] [[Rekursi (ilmu komputer)|fungsi rekursif]]-nya [[Kurt Godel]] - [[Jacques Herbrand]] - [[Stephen Cole Kleene]] di tahun 1930, 1934, dan 1935, [[kalkulus lambda]]-nya [[Alonzo Church]] di tahun 1936, "[[Formulasi 1]]"-nya [[Emil Post]] di tahun 1936, dan [[Mesin Turing]]-nya [[Alan Turing]] di tahun 1936-7 dan 1939.
Dari definisi formal dari algoritma di atas, berkaitan dengan konsep intuituf, masih tetap ada masalah yang menantang.
<ref>{{cite book
| last1 = Moschovakis
| first1 = Yiannis N.
| editor1-last = Engquist
| editor1-first = B.
| editor2-last = Schmid
| editor2-first = W.
| title = Mathematics Unlimited — 2001 and beyond
| url = http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.32.8093
| year = 2001
| publisher = Springer
| isbn = 9783540669135
| pages = 919–936 (Part II)
| chapter = What is an algorithm?
}}</ref>
 
== Asal kataSejarah ==
Konsep algoritma telah ada sejak zaman prasejarah. Algoritma [[Aritmetika|aritmatika]], seperti algoritma divisi, digunakan oleh matematikawan [[Babilonia (kota kuno)|Babilonia]] kuno sekitar tahun 2500 [[SM]] dan matematikawan [[Mesir Kuno|Mesir]] sekitar tahun 1550 SM. Matematikawan [[Yunani Kuno|Yunani]] kemudian juga menggunakan algoritma pada 240 SM sebagaimana yang terdapat pada [[Tapis Eratosthenes]] untuk menemukan bilangan prima, dan [[Algoritma Euklides|Algoritma Euklides]] untuk menemukan pembagi persekutuan terbesar dari dua bilangan.<ref name="Cooke2005">{{cite book|last=Cooke|first=Roger L.|date=2005|title=The History of Mathematics: A Brief Course|url=https://archive.org/details/historyofmathema0000cook_o3g3|publisher=John Wiley & Sons|isbn=978-1-118-46029-0}}</ref> Matematikawan Arab seperti [[al-Kindi]] pada abad ke-9 menggunakan algoritma kriptografi untuk pemecahan kode, berdasarkan analisis frekuensi.
 
Kata algoritma berasal dari nama matematikawan [[Persia]] abad ke-9, [[Muḥammad bin Mūsā al-Khawārizmī|Muḥammad bin Mūsā al-Khwārizmī]], yang [[nisbah]]-nya (yang mengidentifikasikannya sebagai seseorang yang berasal dari [[Khwarezmia]]) dilatinkan sebagai Algoritmi (bahasa Persia yang diarabkan: الخوارزمی sekitar: 780-850).<ref>{{cite web|title=Al-Khwarizmi biography|url=http://www-history.mcs.st-andrews.ac.uk/Biographies/Al-Khwarizmi.html|website=www-history.mcs.st-andrews.ac.uk|archive-url=https://web.archive.org/web/20190802091553/http://www-history.mcs.st-andrews.ac.uk/Biographies/Al-Khwarizmi.html|archive-date=August 2, 2019|access-date=May 3, 2017|url-status=live}}</ref><ref>{{cite web|title=Etymology of algorithm|url=http://chambers.co.uk/search/?query=algorithm&title=21st|website=Chambers Dictionary|archive-url=https://web.archive.org/web/20190331204600/https://chambers.co.uk/search/?query=algorithm&title=21st|archive-date=March 31, 2019|access-date=December 13, 2016|url-status=live}}</ref> Namanya bermakna 'yang berasal dari (daerah) [[Khwarezmia]]', sebuah daerah yang dulunya merupakan bagian dari [[Iran Raya]] dan sekarang sebagai bagian dari [[Uzbekistan]].<ref name="Hogendijk2">{{cite journal|last=Hogendijk|first=Jan P.|year=1998|title=al-Khwarzimi|url=http://www.kennislink.nl/web/show?id=116543|journal=Pythagoras|volume=38|issue=2|pages=4–5|archive-url=https://web.archive.org/web/20090412193516/http://www.kennislink.nl/web/show?id=116543|archive-date=April 12, 2009|url-status=dead}}</ref><ref name="Oaks2">{{cite web|last=Oaks|first=Jeffrey A.|title=Was al-Khwarizmi an applied algebraist?|url=http://facstaff.uindy.edu/~oaks/MHMC.htm|publisher=[[University of Indianapolis]]|archive-url=https://web.archive.org/web/20110718094835/http://facstaff.uindy.edu/~oaks/MHMC.htm|archive-date=July 18, 2011|access-date=May 30, 2008|url-status=dead|df=mdy-all}}</ref> Sekitar tahun 825, Al-Khwarizmi menulis sebuah risalah [[Bahasa Arab|berbahasa Arab]] tentang [[sistem angka Hindu-Arab]], yang diterjemahkan ke dalam [[bahasa Latin]] selama abad ke-12. Naskah ini dimulai dengan frasa Dixit Algorizmi ('Maka berkatalah Al-Khwarizmi'), di mana "Algorizmi" di sini adalah [[Latinisasi]] penerjemah akan nama Al-Khwarizmi.<ref>{{cite book|last=Brezina|first=Corona|year=2006|url=https://books.google.com/books?id=955jPgAACAAJ|title=Al-Khwarizmi: The Inventor Of Algebra|publisher=The Rosen Publishing Group|isbn=978-1-4042-0513-0}}</ref> Bukunya yang bernama Aljabar menjadi salah satu buku matematikawan yang paling banyak dibaca di Eropa pada abad pertengahan.<ref>[http://www-history.mcs.st-and.ac.uk/Extras/Boyer_Foremost_Text.html Foremost mathematical texts in history] {{Webarchive|url=https://web.archive.org/web/20110609224820/http://www-history.mcs.st-and.ac.uk/Extras/Boyer_Foremost_Text.html|date=June 9, 2011}}, according to [[Carl B. Boyer]].</ref> Dalam bahasa Latin abad pertengahan, kata ''algorismus,'' yang merupakan pengadaptasian dari namanya, menjadi kata yang bermakna "sistem bilangan desimal".<ref>{{Citation|title=algorismic|url=https://www.thefreedictionary.com/algorismic|work=The Free Dictionary|access-date=2019-11-14|archive-url=https://web.archive.org/web/20191221200124/https://www.thefreedictionary.com/algorismic|archive-date=December 21, 2019|url-status=live}}</ref> Pada abad ke-15, di bawah pengaruh kata Yunani ἀριθμός (arithmos), 'angka' (lih. 'aritmatika'), kata Latin-nya diubah menjadi algorithmus.<ref>''[[Oxford English Dictionary]]'', Third Edition, 2012 [http://www.oed.com/view/Entry/4959 ''s.v.'']</ref> Dalam bahasa Inggris, kata algorithm pertama kali digunakan pada sekitar tahun 1230 dan kemudian oleh [[Geoffrey Chaucer|Chaucer]] pada 1391. Bahasa Inggris mengadopsi istilah tersebut dari bahasa Prancis, akan tetapi baru pada abad ke-19 lah kata "algorithm" mulai memiliki makna seperti sekarang yang ada dalam bahasa Inggris modern.<ref>{{Cite journal|last=Mehri|first=Bahman|date=2017|title=From Al-Khwarizmi to Algorithm|journal=Olympiads in Informatics|volume=11|issue=2|pages=71–74|doi=10.15388/ioi.2017.special.11}}</ref>
'Algoritma' muncul dari 'Algoritmi', bentuk Latin dari [[Muhammad ibnu Musa al-Khwarizmi|al-Khwarizmi]], [[Matematikawan islam|matematikawan]], [[Astronomi islam|ahli astronomi]], dan [[Ahli geografi islam|ahli geografi]] dari [[orang Persia|Persia]]. <ref name="Hogendijk">{{cite journal
 
|first=Jan P.
Matematika [[India]] pada awalnya sebagian besar berbentuk algoritmik. Algoritma yang mewakili tradisi matematika India berkisar dari Śhulba Sūtrā dari beberapa abad sebelum masehi hingga teks-teks abad pertengahan dari Sekolah Kerala akan Astronomi dan Matematika.<ref>{{cite book|last1=Sriram|first1=M. S.|date=2005|title=Contributions to the History of Indian Mathematics|publisher=Springer|isbn=978-93-86279-25-5|editor1-last=Emch|editor1-first=Gerard G.|page=153|language=en|chapter=Algorithms in Indian Mathematics|editor2-last=Sridharan|editor2-first=R.|editor3-last=Srinivas|editor3-first=M. D.|chapter-url=https://books.google.com/books?id=qfJdDwAAQBAJ&pg=PA153}}</ref>
|last=Hogendijk
 
|title=al-Khwarzimi
Pemakaian awal lainnya dari kata ini berasal dari tahun 1240, dalam sebuah manual berjudul Carmen de Algorismo yang disusun oleh Alexandre de Villedieu. Yang kalimatnya diawali dengan:
|journal=Pythagoras
 
|volume=38
{{blockquote|''Haec algorismus ars praesens dicitur, in qua / Talibus Indorum fruimur bis quinque figuris.''}}
|issue=2
 
|year=1998
yang bermakna:
|pages=4–5
 
|url=http://www.kennislink.nl/web/show?id=116543
{{blockquote|Algorisme adalah ilmu yang saat ini kita gunakan untuk menghitung dengan angka-angka India, yang jumlahnya ada dua kali lima (sepuluh).}}
|format=
 
|ref=harv
Puisi ini panjangnya beberapa ratus baris dan merangkum ilmu menghitung dengan angka-angka yang diadopsi dari [[India]].<ref>{{Cite web|title=Abu Jafar Muhammad ibn Musa al-Khwarizmi|url=http://members.peak.org/~jeremy/calculators/alKwarizmi.html|website=members.peak.org|archive-url=https://web.archive.org/web/20190821232118/http://members.peak.org/~jeremy/calculators/alKwarizmi.html|archive-date=August 21, 2019|access-date=2019-11-14|url-status=live}}</ref>
|issn=0033–4766}} {{Dead link
 
|date=March 2010
Formalisasi parsial dari konsep algoritma modern dimulai dengan upaya untuk memecahkan ''Entscheidungsproblem'' (masalah pengambilan keputusan) yang diajukan oleh [[David Hilbert]] pada tahun 1928. Formalisasi selanjutnya dibingkai sebagai upaya untuk mendefinisikan "kalkulabilitas efektif"<ref>Kleene 1943 in Davis 1965:274</ref> atau "metode efektif".<ref>Rosser 1939 in Davis 1965:225</ref> Formalisasi tersebut termasuk fungsi rekursif [[Kurt Gödel|Gödel]]-Herbrand-Kleene pada tahun 1930, 1934 dan 1935, kalkulus lambda Alonzo Church pada tahun 1936, Formulasi 1 Emil Post pada tahun 1936, dan [[mesin Turing]]-nya [[Alan Turing]] pada tahun 1936-37 dan 1939.
}}</ref><ref name="Oaks">{{cite web
|first=Jeffrey A.
|last= Oaks
|url=http://facstaff.uindy.edu/~oaks/MHMC.htm
|title=Was al-Khwarizmi an applied algebraist?
|publisher=[[University of Indianapolis]]
|accessdate=2008-05-30
}}</ref>
 
== Definisi informal ==
Baris 116 ⟶ 54:
Maka sebuah algoritma dapat berupa persamaan aljabar seperti '''y = m + n''' -- dua variabel masukan '''m''' dan '''n''' yang menghasikan keluaran '''y'''.
Tapi berbagai penulis yang mencoba mendefinisikan persamaan tersebut mengatakan bahwa kata algoritma mengandung lebih dari itu, sesuatu yang kurang lebih (untuk contoh penjumlahan):
:Instruksi rinci dan tepat (dalam bahasa yang dipahami oleh "komputer") <ref>cf Stone 1972:5 </ref> untuk proses yang cepat, efisien, "baik" <ref> Knuth 1973:7 menyatakan: "Pada praktiknya kita tidak hanya menginginkan algoritma, kita menginginkan algoritam yang ''baik'' ... salah satu kriteria dari kebaikannya adalah lama waktu yang digunakan untuk menjalankan algoritma ... kriteria lainnya adalah kemampuan adaptasi dari algoritma ke komputer, kesederhanaan dan elegan, dll." </ref> yang menentukan "pergerakan" dari "komputer" (mesin atau manusia, dibekali dengan informasi dan kemampuan internal yang dibutuhkan) <ref> cf Stone 1973:6 </ref> untuk menemukan, dekode, dan kemudian mengolah masukan integer/simbol '''m''' dan '''n''', simbol '''+''' dan '''=''' ... dan "secara efektif" <ref> Stone 1973:7-8 menyatakan bahwa harus ada, "... sebuah prosedur yang robot [yaitu komputer] bisa ikuti supaya dapat menentukan secara tepat bagaimana mengikuti instruksi tersebut." Stone menambahkan keterbatasan dari proses, dan kepastian (tidak memiliki kerancuan pada instruksi) pada definisi tersebut. </ref> menghasilkan, dalam waktu yang "masuk akal", <ref> Knuth, loc. cit </ref> keluaran integer '''y''' pada tempat dan format tertentu.
 
Konsep dari ''algoritma'' juga digunakan untuk mendefinisikan notasi dari [[desidabilitas (logika)|desidabilitas]].
Notasi tersebut adalah pusat untuk menjelaskan bagaimana [[sistem formal]] berasal dari sejumlah kecil [[aksioma]] dan aturan.
Dalam [[logika]], waktu dari sebuah algoritma untuk selesai tidak dapat dihitung, karena tidak berelasi dengan dimensi fisik kita.
Dari ketidakpastian tersebut, yang mengkarakteristikan pekerjaan yang sedang berjalan, timbulah ketidak-tersediannya definisi ''algoritma'' yang sesuai dengan konkritkonkret (pada tingkat tertentu) dan penggunaan secara abstrak dari istilah tersebut.
 
== Formalisasi ==
Baris 131 ⟶ 69:
<blockquote>
Minsky: "Tapi kita juga menjaga, dengan Turing ... bahwa setiap prosedur yang "secara alami" disebut efektif, bisa dinyatakan oleh mesin (sederhana).
Walaupun tampaknya ekstrimekstrem, alasan tersebut ... sukar disanggah".
<ref name="Minsky 1967:105">
'''Minsky''' 1967:105</ref>
Baris 145 ⟶ 83:
Biasanya, bila sebuah algoritma dihubungkan dengan pengolahan informasi, data dibaca dari sumber masukan, ditulis ke perangkat keluaran, dan/atau disimpan untuk pengolahan selanjutnya.
Data simpanan dianggap sebagai bagian dari keadaan internal dari entitas yang melakukan algoritma.
Pada prakteknyapraktiknya, keadaan tersebut disimpan pada satu atau lebih [[struktur data]].
 
Untuk beberapa proses komputasi, algoritma harus ditentukan secara teliti: dijabarkan dengan cara ia bakal berlaku untuk semua kemungkinan yang dapat timbul.
Baris 167 ⟶ 105:
Ekspresi bahasa alamiah terhadap algoritma condong lebih banyak dan rancu, dan jarang digunakan untuk algoritma yang kompleks dan teknis.
Pseudokode, diagram alur, bagan drakon, dan tabel kontrol adalah cara yang terstruktur untuk menggambarkan algoritma yang mencegah banyaknya kerancuan pada pernyataan-pernyataan bahasa alamiah.
Bahasa pemrograman ditujukan untuk mengekspresikan algoritma dalam sebuah bentuk yang dapat dieksekusi oleh komputer, tapitetapi sering kali digunakan sebagai suatu cara untuk menentukan atau mendokumentasikan algoritma.
 
Ada banyak macam kemungkinan representasi dan seseorang dapat mengekspresikan sebuah program [[mesin Turing]] sebagai urutan dari tabel-tabel mesin (lihat lebih lanjut di [[mesin kondisi-terbatas]], [[tabel transisi kondisi]] dan [[tabel kontrol]]), sebagai diagram alur dan bagan drakon (lihat lebih lanjut di [[diagram kondisi]]), atau sebagai bentuk [[kode mesin]] atau [[kode assembly]] dasar yang dikenal "kumpulan lipat empat" (lihat lebih lanjut di [[mesin Turing]]).
 
Representasi dari algoritma dapat dikelompokan ke dalam tiga tingkatan dari deskripsi mesin Turing:
<ref> Sipser 2006:157 </ref>
; '''1 Deskripsi tingkat-tinggi'''
: "... ditujukan untuk menjelaskan algoritma, menghiraukan rincian implementasi. Pada tingkat ini kita tidak perlu menyebutkan bagaimana mesin mengatur perangkat pita atau kepala pita rekam."
Baris 185 ⟶ 123:
 
Kebanyakan algoritma ditujukan untuk diimplementasikan sebagai [[program komputer]].
Namun, algoritma juga diimplementasikan dengan tujuan lain, seperti dalam [[jaringan saraf]] biologis (sebagai contohnya, [[otak manusia]] yang mengimplementasikan [[aritmatikaaritmetika]] atau sebuah serangga yang melihat makanan), dalam [[sirkuit elektris]], atau dalam sebuah perangkat mekanis.
 
== Algoritma komputer ==
 
[[FileBerkas:Euclid's algorithm structured blocks 1.png |thumb jmpl|right ka|176px 493x493px|Contoh diagram alur dari [[Teorema program terstruktur|struktur Bohm-Jacopini]]: URUTAN (segi empat), WHILE-DO dan IF-THEN-ELSE. Ketiga struktur dibentuk dari kondisi primitif GOTO (<ttcode> IF ''test''=true THEN GOTO step xxx </ttcode>) (wajik), GOTO tak bersyarat (segi empat), berbagai operator penetapan (segi empat), dan HALT (bujursangkar). Memasukan struktur tersebut ke dalam blok-penetapan menghasilkan diagram yang kompleks (cf Tausworthe 1977:100,114).]]
 
Dalam [[sistem komputer]], sebuah algoritma pada dasarnya adalah instansi dari [[logika]] ditulis dalam [[perangkat lunak]] oleh pengembang perangkat lunak supaya efektif untuk komputer yang "ditargetkan" untuk mesin tertentu untuk menghasilkan ''keluaran'' dari ''masukan'' yang diberikan (kemungkinan nul).
 
''Program yang "elegan" (padat), program yang "baik" (cepat)'': Pernyataan dari "sederhana dan elegan" muncul secara informal dalam buku Knuth dan dalam Chaitin:
:Knuth: "... kita menginginkan algoritma yang ''baik'' dalam definisi estetika sederhana. Salah satu kriterianya ... adalah waktu yang dibutuhkan untuk berjalannya algoritma ... Kriteria yang lain adalah adaptasi dari algoritma ke komputer, kesederhanaan dan elegan, dll" <ref> Knuth 1973:7 </ref>
 
:Chaitin: "... sebuah program adalah 'elegan'', maksud saya adalah ia merupakan program terkecil untuk menghasilkan keluaran." <ref> Chaitin 2005:32 </ref>
 
Chaitin membuka definisinya dengan: "Saya akan perlihatkan bahwa anda tidak dapat membuktikan sebuah program adalah 'elegan'" -- bukti—bukti tersebut akan menyelesaikan [[permasalahan perhentian]] (ibid).
 
''Algoritma terhadap fungsi yang dapat dihitung oleh algoritma'': Untuk sebuah fungsi bisa ada beberapa algoritma.
Baris 220 ⟶ 158:
cf gandy 1980:126, robin gandy ''church's thesis and principles for mechanisms'' appearing on pp. 123–148 in j. barwise et al. 1980 ''the kleene symposium'', north-holland publishing company.
</ref>
yang secara buta mengikuti instruksinya.<ref>
<ref>
Sebuah "robot": "Sebuah komputer adalah sebuah robot yang melakukan setiap tugas yang dapat dijelaskan sebagai urutan dari instruksi." cf Stone 1972:3
</ref>.
Model primitif dari Melzak dan Lambek
<ref>
Baris 229 ⟶ 166:
Lokasinya bisa dibedakan, penghitungnya tidak".
Lubangnya memiliki kapasitas tak terbatas, dan digerakan oleh agen yang memahami dan mampu menjalankan sejumlah instruksi" (Lambek 1961:295).
Lambek mengacu Melzak yang mendefinisikan mesin-Q nya sebagai "sejumlah lokasi yang besar tanpa batas ... persediaan penghitung yang tanpa batas yang terdistribusi diantaradi antara lokasi-lokasi tersebut, sebuah program, dan sebuah operator yang tujuan satu-satunya yaitu menjalankan program." (Melzak 1961:283).
B-B-J (loc. cit.) menambahkan syarat bahwa lubang tersebut "mampu menyimpan sejumlah batu" (p. 46).
Melzak dan Lambek muncul di ''The Canadian Mathematical Bulletin'', vol. 4, no. 3, September 1961.
Baris 256 ⟶ 193:
</ref>
Jarang seorang programer harus menulis "kode" dengan kumpulan instruksi terbatas.
Tapi Minsky memperlihatkan (sebagaimana Melzak dan Lambek) bahwa mesinnya adalah [[Turing komplitkomplet]] dengan hanya empat ''tipe'' instruksi utama: GOTO kondisional, GOTO tak bersyarat, penetapan/penggantian/substitusi, dan HALT.
<ref>
Namun, beberapa instruksi penetapan berbeda (misalnya, DECREMENT, INCREMENT, dan ZERO/CLEAR/EMPTY untuk mesin Minsky) juga dibutuhkan untuk kekomplitan-Turing;
Baris 265 ⟶ 202:
 
''Simulasi dari sebuah algoritma: bahasa komputer (komputor)'': Knuth menganjurkan pembaca bahwa "cara terbaik untuk belajar algoritma dalah mencobanya ... langsung ambil pulpen dan kertas dan bekerja lewat contoh".
<ref> Knuth 1973:4 </ref>
Lalu bagaimana dengan simulasi atau eksekusi yang sebenarnya?
Programmer harus menerjemahkan algoritma ke dalam bahasa yang mana simulator/komputer/komputor dapat mengeksekusi ''secara efektif''.
Baris 271 ⟶ 208:
Jika tidak maka supaya algoritma dapat efektif ia harus menyediakan sejumlah aturan untuk mengekstrak akar kuadrat.
<ref>
Strone 1972:5. Metode untuk mendapatkan akar tidaklah biasa: lihat [[MetodaMetode untuk menghitung akar kuadrat]].
</ref>
 
Baris 281 ⟶ 218:
<ref>
{{cite book
| last = Leeuwen
| first = Jan
| title = Handbook of Theoretical Computer Science: Algorithms and complexity. Volume A
| url = http://books.google.com/?id=-X39_rA3VSQC
| year = 1990
| publisher = Elsevier
| isbn = 978-0-444-88071-0
| page = 85}}
</ref>
Bila kecepatan yang dihitung, jumlah instruksi berpengaruh.
Sebagai contohnya, subprogram dalam algoritma Euclid untuk menghitung sisa akan berjalan lebih cepat jika programmer memiliki instruksi "modulus" (sisa pembagian) bukannya dengan pengurangan (atau lebih parah: hanya "penurunan").
 
''Pemrograman terstukturterstruktur, struktur kanonikal'': Menurut [[Tesis Church-Turing]] setiap algoritma bisa dihitung dengan sebuah model yang dikenal [[Turing komplitkomplet]], dan menurut demonstrasi Minsky kekomplitan Turing membutuhkan hanya empat tipe instruksi -- GOTOinstruksi—GOTO bersyarat, GOTO tak bersyarat, penetapan, HALT.
Kemeny dan Kurtz mengamati bahwa saat penggunaan GOTO tak bersyarat yang "tak disiplin" dan IF-THEN GOTO bersyarat bisa menghasilkan "[[kode spageti]]" seorang programer bisa menulis program terstruktur menggunakan instruksi tersebut;
di lain sisi "juga memungkinkan, dan tidak begitu sulit, untuk menulis sebuah program terstruktur yang buruk dalam sebuah bahasa terstruktur".
<ref>[[John G. Kemeny]] and [[Thomas E. Kurtz]] 1985 ''Back to Basic: The History, Corruption, and Future of the Language'', Addison-Wesley Publishing Company, Inc. Reading, MA, ISBN 0-201-13433-0.
<ref>
[[John G. Kemeny]] and [[Thomas E. Kurtz]] 1985 ''Back to Basic: The History, Corruption, and Future of the Language'', Addison-Wesley Publishing Company, Inc. Reading, MA, ISBN 0-201-13433-0.
</ref>
Tausworthe menambahkan tiga [[Teorema program terstruktur|struktur kanon Bohm-Jacopini]]:
<ref> Tausworthe 1977:101 </ref>
SEQUENCE, IF-THEN-ELSE, dan WHILE-DO, dengan dua lagi: DO-WHILE dan CASE.
<ref> Tausworthe 1977:142 </ref>
Keuntungan dari program terstruktur adalah ia cocok dengan [[pembuktian kebenaran]] menggunakan [[induksi matematika]].
<ref>
Baris 308 ⟶ 244:
</ref>
 
''Simbol diagram alur <ref> cf Tausworthe 1977</ref>'': Pembantu grafik yang disebut [[diagram alur]] memberikan suatu cara untuk menjelaskan dan mendokumentasikan sebuah algoritma (dan program komputer).
Seperti alur program dari mesin Minsky, sebuah diagram alur selalu mulai dari atas dan terus ke bawah.
Simbol utamanya hanya 4: arah panah memperlihatkan alur program, segi empat (SEQUENCE, GOTO), wajik (IF-THEN-ELSE), dan titik (OR).
Baris 319 ⟶ 255:
 
=== Contoh Algoritma ===
[[FileBerkas:Sorting quicksort anim.gif | thumb jmpl| Animasi dari [[algoritma quicksort]] mengurutkan larik dari nilai acak. Batang merah menandakan elemen pivot; pada awal animasi, elemen paling kanan dipilih sebagai pivot.]]
 
Salah satu dari algoritma sederhana adalah menemukan bilangan terbesar dalam sebuah deretan angka (tak berurut).
Solusinya membutuhkan pemeriksaan setiap angka dalam deret, tapitetapi hanya sekali.
Dari hal ini munculah algoritma sederhana, yang bisa dinyatakan dalam kalimat bahasa deskripsi tingkat-tinggi, sebagai:
 
Baris 349 ⟶ 285:
{{Further2|[[Algoritma Euklid]]}}
 
[[FileBerkas:Euclid's algorithm Book VII Proposition 2 2.png | 250px | thumb jmpl| left kiri| Contoh diagram dari algoritma Euclid dari T.L. Health 1908 dengan rincian tambahan. Euclid tidak sampai pada penghitungan ketiga dan tidak memberikan contoh numeris. Nocomachus memberikan contoh dari 49 dan 21: "Saya mengurangi yang kecil dari yang besar; 28 adalah yang kiri; kemudian saya kurangi lagi 21 (hal ini memungkinkan); tersisa 7, tapitetapi 7 tidak bisa dikurangi dari 7." Heath berkomentar bahwa, "Kalimat terakhir terdengar aneh, tapitetapi maknanya sangat jelas, begitu juga makna dari kalimat tentang mengakhiri 'dengan satu dan angka yang sama'."(Heath 1908:300).]]
 
Algoritma [[Euclid]] muncul sebagai Proposisi II dalam Book VII ("Elementary Number Theory") dari ''[[Euclid's Elements|Elements]]''.
Baris 357 ⟶ 293:
Euclid mengajukan permasalahan: "Ambil dua angka bukan prima, untuk mencari bilangan pembagi terbesar".
Dia menentukan "Sebuah angka [merupakan] besaran yang terdiri dari unit-unit": angka penghitung, integer positif kecuali 0.
Dan "mengukur" adalah menempatkan ukuran panjang terkecil ''s'' dengan tepat (''q'' kali) diantaradi antara ukuran terpanjang ''l'' sampai sisa ''r'' lebih kecil dari panjang terkecil ''s''.
<ref>
"'Biarkan CD, mengukur BF, meninggalkan FA kurang darinya.'
Baris 383 ⟶ 319:
==== Contoh ====
 
[[File:Euclids-algorithm-example-1599-650.gif | 350px | thumb jmpl| right ka| Ekspresi grafik dari algoritma Euclid menggunakan contoh dengan 1599 dan 650.
<sourcesyntaxhighlight lang="text" highlight="1,5">
 
15999778 = 650*2 + 299
650 = 299*2 + 52
299 = 52*5 + 39
52 = 39*1 + 13
39 = 13*3 + 0
</sourcesyntaxhighlight>]]
 
==== Bahasa komputer untuk algoritma Euclid ====
 
Hanya beberapa ''tipe'' instruksi yang dibutuhkan untuk mengeksekusi algoritma -- beberapaalgoritma—beberapa tes logika (GOTO bersyarat), GOTO tak bersyarat, penetapan (penggantian), dan pengurangan.
* Sebuah ''lokasi'' disimbolkan dengan huruf besar, misalnya, S, A, dll.
* Kuantitas beragam (angka) dalam sebuah lokasi ditulis dengan huruf kecil dan (biasanya) dihubungkan dengan nama lokasi. Sebagai contohnya, lokasi L pada awal bisa mengandung angka ''l'' = 3009.
Baris 401 ⟶ 337:
==== Program yang kurang elegan (inelegan) untuk algoritma Euclid ====
 
[[File:Euclid's algorithm Inelegant program 1.png|thumbjmpl|163px|rightka|"Inelegan" adalah terjemahan dari versi Knuth terhadap algoritma berdasarkan pengulangan-sisa mengganti pembagian (atau instruksi "modulus").
Diambil dari Knuth 1973:2-4.
Bergantung pada kedua angka "Inelegan" bisa menghitung f.p.k dengan sedikit langkah daripada "elegan".]]
 
Algoritma berikut disebut sebagai versi Euclid dan Nichomachus 4-langkah-nya Knuth, tapitetapi bukannya menggunakan pembagi untuk menentukan sisa ia menggunakan pengurangan berturut-turut dari panjang terkecil ''s'' dari sisa panjang ''r'' sampai ''r'' kurang dari ''s''.
Deskripsi tingkat-tinggi, diperlihatkan dengan tulisan tebal, diadaptasi dari Knuth 1973:2-4:
 
Baris 421 ⟶ 357:
ELSE
tukar isi R dan S.
{{vanchor|4|el4}} L ← R (langkah pertama ini berlebih, tapitetapi berguna untuk diskusi nanti).
{{vanchor|5|el5}} R ← S
{{vanchor|6|el6}} S ← L
Baris 485 ⟶ 421:
Sumber pertama
<ref>{{cite web
|url=http://aleph0.clarku.edu/~djoyce/java/elements/bookVII/propVII2.html
|title=Euclid's Elements, Book VII, Proposition 2
|publisher=Aleph0.clarku.edu
|date=
|accessdate=May 20, 2012
}}</ref>
Baris 503 ⟶ 439:
Apa yang terjadi bila angka ''negatif'' dimasukan?
Angka desimal?
Bila angka masukan, misalnya [[domain (matematika)|domain]] dari fungsi yang dihitung oleh algoritma/program, mengikutkan hanya integer positif termasuk 0, maka kegagalan pada nol mengindikasikan bahwa algoritma (dan program [[instansi (ilmu komputer)|instansiasiinstansiasinya]]nya) adalah sebuah [[fungsi parsial]] bukannya [[fungsi total]].
Kesalahan yang terkenal karena eksepsi adalah kegagalan roket [[Ariane V]].
 
''Bukti dari kebenaran program menggunakan induksi matematika'': Knuth mendemonstrasikan penggunaan [[induksi matematika]] untuk versi "pengembangan" dari algoritma Euclid, dan dia mengajukan "metode umum yang digunakan untuk membuktikan validitas dari setiap algoritma."
<ref>
Knuth 1973:13-18. Dia memuji "formulasi pembuktian-algoritma dalam makan asersi dan induksi" kepada R. W. Floyd, Peter Naur, C. A. R. Hoare, H. H. Goldstine dan J. von Neumann. Tausworth 1977 meminjam contoh Euclid Knuth dan mengembangkan metodametode Knuth di bab 9.1 dari ''Formal Proofs'' (pages 288–298).
</ref>
Tausworthe mengajukan bahwa sebuah pengukuran dari kompleksitas dari sebuah program adalah panjang dari pembuktian kebenarannya.
Baris 526 ⟶ 462:
Bila algoritma (biasanya) membutuhkan banyak pengulangan, ''secara rata-rata'' lebih banyak waktu yang terbuang saat melakukan tes "B = 0?" yang hanya diperlukan saat sisa sudah dihitung.
 
''Bisakah algoritma ditingkatkan?'': Bila programmer sudah menilai sebuah program "cocok" dan "efektif" -- yaitu—yaitu, ia menghitung fungsi yang ditujukan oleh penulisnya -- makapenulisnya—maka pertanyaannya menjadi, bisakah ditingkatkan?
 
Kepadatan dari "inelegan" bisa ditingkatkan dengan menghilangkan 5 langkah.
Baris 548 ⟶ 484:
{{Main|Analisis algoritma}}
 
Sangat penting untuk mengetahui berapa banyak sumber tertentu (seperti waktu dan tempat penyimpanan) secara teoritisteoretis diperlukan untuk sebuah algoritma.
Metode-metode telah dikembangkan untuk [[analisis algoritma]] untuk mendapatkan jawaban kuantitatif (estimasi);
sebagai contohnya, algoritma pengurutan di atas memerlukan waktu O(''n''), menggunakan [[notasi O besar]] dengan ''n'' sebagai panjang deret (yang akan diurut).
Baris 565 ⟶ 501:
Biasanya [[pseudokode]] digunakan pada analisis karena merupakan representasi paling umum dan sederhana.
Namun, pada akhirnya, kebanyakan algoritma diimplementasikan di perangkat keras / lunak tertentu dan [[efisiensi algoritmik]] mereka akhirnya diuji menggunakan kode yang sebenarnya.
Untuk solusi dari sebuah masalah, efisiensi dari algoritma tertentu mungkin tidak terlalu berpengaruh (kecuali n sangat besar) tapitetapi bagi algoritma yang dirancang untuk kecepatan interaktif, komersial, atau penggunaan ilmiah jangka panjang ia bisa saja kritikal.
Meningkatkan n dari kecil ke n yang besar biasanya menunjukan ketak efisienan algoritma yang tidak berbahaya.
 
Baris 582 ⟶ 518:
| publisher=discovermagazine.com}}</ref>
Secara umum, peningkatan kecepatan bergantung pada properti khusus dari permasalahan, yang mana sangat umum pada aplikasi praktis.
<ref name="Hassanieh12">Haitham Hassanieh, Piotr Indyk, Dina Katabi, and Eric Price
, "[http://siam.omnibooksonline.com/2012SODA/data/papers/500.pdf ACM-SIAM Symposium On Discrete Algorithms (SODA)] {{Webarchive|url=https://web.archive.org/web/20130704180806/http://siam.omnibooksonline.com/2012SODA/data/papers/500.pdf |date=2013-07-04 }}
Haitham Hassanieh, Piotr Indyk, Dina Katabi, and Eric Price
, "[http://siam.omnibooksonline.com/2012SODA/data/papers/500.pdf ACM-SIAM Symposium On Discrete Algorithms (SODA)]
, Kyoto, January 2012.
Lihat juga [http://groups.csail.mit.edu/netmit/sFFT/ sFFT Web Page].</ref>
</ref>
Percepatan dengan tingkat seperti itu membolehkan perangkat komputasi yang sering menggunakan pemrosesan gambar (seperti kamera digital dan peralatan medis) menghabiskan daya yang lebih sedikit.
 
Baris 595 ⟶ 529:
 
; Rekursi atau iterasi
: Sebuah [[algoritma rekursi]] yaitu algoritma yang memanggil dirinya sendiri berulang kali sampai kondisi tertentu tercapai, ini merupakan metode umum bagi [[pemrograman fungsional]]. Algoritma [[Iterasi|iteratif]] menggunakan konstruksi berulang seperti [[Pengulangan program|pengulangan]] dan terkadang struktur data tambahan seperti [[Tumpukan (struktur data)|tumpukan]] untuk menyelesaikan permasalahan. Beberapa permasalahan secara alami cocok dengan satu implementasi atau lainnya. Sebagai contoh, [[Menara Hanoi]] dikenal dengan implementasi rekursif. Setiap versi rekursif memiliki kesamaan (tapi bisa lebih atau kurang kompleks) dengan versi iteratif, dan sebaliknya.
 
; Logical
: Sebuah algoritma bisa dilihat sebagai [[Penalaran deduktif|logika deduksi]] terkontrol. Pernyataan ini diekspresikan sebagai: '''Algoritma = logika + kontrol'''. <ref>Kowalski 1979</ref> Komponen logika mengekspresikan aksioma yang bisa digunakan dalam komputasi dan komponen kontrol menentukan cara deduksi digunakan pada aksioma. Ini merupakan dasar dari paradigma [[pemrograman logika]]. Dalam bahasa pemrograman logika murni komponen kontrol adalah tetap dan algoritma ditentukan dengan memberikan hanya komponen logikanya. Daya tarik dari pendekatan ini adalah [[Semantik formal dari bahasa pemrograman|semantik]] elegan: sebuah perubahan dalam aksioma memiliki perubahan dalam algoritma.
 
; Serial, paralel atau terdistribusi
: Algoritma biasanya dibicarakan dengan asumsi bahwa komputer menjalankan satu instruksi algoritma setiap waktu. Komputer tersebut terkadang disebut dengan komputer serial. [[Rancang algoritma|Rancangan algoritma]] untuk lingkungan tersebut disebut dengan algoritma serial, terbalik dengan [[algoritma paralel]] atau [[algoritma terdistribusi]]. Algoritma paralel memanfaatkan arsitektur komputer yang mana beberapa prosesor bisa mengerjakan masalah dipada waktu yang sama, selain itu algoritma terdistribusi memanfaatkan banyak mesin yang terhubung dengan [[Jaringan komputer|jaringan]]. Algoritma paralel atau terdistribusi membagi permasalahan menjadi banyak sub-masalah simetris atau asimetris dan mengumpulkan hasilnya kembali. Konsumsi sumber pada algoritma tersebut tidak hanya perputaran prosesor disetiap prosesor tapitetapi juga daya komunikasi antara prosesor. Algoritma pengurutan bisa diparalelkan secara efisien, tapitetapi biaya komunikasinya sangat mahal. Algoritma iteratif secara umum bisa diparalelkan. Beberapa permasalahan tidak ada algoritma paralelnya, dan disebut dengan permasalahan serial lahiriah.
 
; Deterministik atau non-deterministik
Baris 607 ⟶ 541:
 
; Tepat atau perkiraan
: Bila banyak algoritma sampai pada solusi yang tepat, [[algoritma perkiraan]] mencari sebuah perkiraan yang terdekat dengan solusi benarnya. Perkiraan bisa menggunakan baik strategi deterministik atau acak. Algoritma seperti itu memiliki nilai guna untuk banyak permasalahan sulit.
 
; [[Algoritma quantum]]
: Berjalan di model realistik dari [[komputasi quantum]]. Istilah ini biasanya digunakan untuk algoritma yang tampak pada dasarnya quantum, atau menggunakan beberapa fitur penting komputasi quantum seperti [[superposisi quantum]] atau [[belitan quantum]].
 
== Paradigma secara rancangan ==
Baris 620 ⟶ 554:
 
; [[Pencarian paksa]] atau pencarian mendalam
: Ini merupakan metodametode naif mencoba setiap kemungkinan solusi untuk melihat yang terbaik. <ref>{{cite book
| last1 = Carroll
| first1 = Sue
| last2 = Daughtrey
| first2 = Taz
| title = Fundamental Concepts for the Software Quality Engineer
| url = http://books.google.com/?id=bz_cl3B05IcC&pg=PA282
| date = July 4, 2007
| publisher = American Society for Quality
| isbn = 978-0-87389-720-4
| pages = 282 et seq. }}</ref>
 
; Membagi dan menaklukan (''Divide and conqueror'')
: [[Algoritma bagi dan takluk]] secara berulang mereduksi instansi jumlah masalah menjadi satu atau lebih kecil instasi masalah yang sama (biasanya secara [[rekursif]]) sampai instansi cukup kecil diselesaikan dengan mudah. Salah satu contoh bagi dan takluk adalah [[mergesort|pengurutan gabung]]. Pengurutan dapat dilakukan disetiap segmen data setelah membagi data menjadi segmen-segmen dan urutan seluruh data bisa didapat pada fase takluk dengan menggabungkan segmen-segmen. Variasi sederhana dari bagi-dan-takluk disebut '''algoritma kurang dan takluk''', yang menyelesaikan sub-masalah yang sama dan menggunakan solusi dari sub-masalah tersebut untuk menyelesaikan masalah yang lebih besar. Bagi dan takluk membagi permasalahan menjadi banyak sub-masalah dan sehingga tahap takluk lebih kompleks daripada algoritma kurang-dan-taklukan. Sebuah contoh dari algoritma kurang-dan-taklukan adalah [[algoritma pencarian binari]].
 
; Pencarian dan enumerasi
Baris 639 ⟶ 573:
 
; [[Algoritma pengacakan]]
: Algoritma ini membuat pilihan secara acak (atau pseudo-acak). Ia sangat berguna untuk menemukan solusi perkiraan untuk masalah dimana solusi yang pasti tidak praktis (lihat metode heuristik di bawah). Untuk beberapa masalah, diketahui bahwa perkiraan tercepat harus mengikutkan beberapa [[pengacakan]].<ref> Misalnya, [[volume]] dari suatu [[politop kompleks]] (dijelaskan menggunakan sebuah keanggotaan oracle) dapat diperkirakan sampai keakuratan yang tinggi dengan mengacak algoritma waktu polinomial, bukan dengan deterministik; lihat {{citation|last1=Dyer|first1=Martin|last2=Frieze|first2=Alan|last3=Kannan|first3=Ravi|date=January 1991|doi=10.1145/102782.102783|issue=1|journal=J. ACM|location=New York, NY, USA|pages=1–17|publisher=ACM|title=A Random Polynomial-time Algorithm for Approximating the Volume of Convex Bodies|volume=38}}.</ref> Apakah algoritma pengacakan dengan [[P (kompleksitas)|kompleksitas waktu polinomial]] bisa menjadi algoritma tercepat untuk beberapa masalah masih menjadi pertanyaan terbukan yang dikenal sebagai [[Masalah P versus NP]]. Ada dua kelas besar dari algoritma ini:
| last1 = Dyer | first1 = Martin
| last2 = Frieze | first2 = Alan
| last3 = Kannan | first3 = Ravi
| date = January 1991
| doi = 10.1145/102782.102783
| issue = 1
| journal = J. ACM
| location = New York, NY, USA
| pages = 1–17
| publisher = ACM
| title = A Random Polynomial-time Algorithm for Approximating the Volume of Convex Bodies
| volume = 38}}.</ref> Apakah algoritma pengacakan dengan [[P (kompleksitas)|kompleksitas waktu polinomial]] bisa menjadi algoritma tercepat untuk beberapa masalah masih menjadi pertanyaan terbukan yang dikenal sebagai [[Masalah P versus NP]]. Ada dua kelas besar dari algoritma ini:
# [[Algoritma Monte Carlo]] mengembalikan jawaban yang benar dengan probabilitas-tinggi. Misalnya, [[RP (kompleksitas)|RP]] adalah sub-klas dari algoritma ini yang berjalan dalam [[waktu polinomial]])
# [[Algoritma Las Vegas]] selalu mengembalikan jawaban yang benar, tapitetapi waktu prosesnya adalah hanya terikat secara probabilistik, misalnya [[Waktu Probabilistik Polinomial Galat-Nol|ZPP]].
 
; [[Reduksi (kompleksitas)|Reduksi]]
: Teknik ini menyelesaikan masalah sulit dengan mengubahnya menjadi permasalahan yang lebih diketahui yang mana kita (berharap) memiliki algoritma [[asimptotikal optimal]]. Tujuannya yaitu untuk menemukan sebuah algoritma reduksi yang [[teori kompleksitas komputasi|kompleksitaskompleksitasnya]]nya tidak didominasi oleh algoritma hasil reduksi. Sebagai contoh, [[algoritma seleksi]] untuk menemukan rata-rata dalam daftar tak terurut mengikutkan mengurutkan daftar (bagian yang paling mahal) dan menarik elemen paling tengah dalam daftar terurut (bagian yang paling mudah). Teknik ini juga diketahui dengan ''ubah dan taklukan''.
 
=== Permasalahan optimisasi ===
 
; Pemrograman Linear
: Saat mencari solusi optimal terhadap sebuah fungsi linear yang terikat persamaan linear dan ketidaksamaan konstrain, batasan dari permasalahan bisa digunakan secara langsung untuk menghasilkan solusi optimal. Ada algoritma yang dapat memecahkan setiap permasalahan dalam kategori ini, seperti [[algoritma simpleks]] yang terkenal. <ref>
[[George B. Dantzig]] and Mukund N. Thapa. 2003. ''Linear Programming 2: Theory and Extensions''. Springer-Verlag.</ref> Permasalahan yang dapat diselesaikan dengan pemrograman linear termasuk [[permasalahan alur maksimum]] untuk grafik terarah). Jika sebuah masalah sebagai tambahan membutuhkan satu atau lebih jawaban haruslah [[integer]] maka ia diklasifikan dalam [[pemrograman integer]]. Algoritma pemrograman linear dapat menyelesaikan masalah seperti itu jika dapat dibuktikan bahwa semua batasan untuk nilai integer adalah tidak benar, yaitu solusi memenuhi batasan tersebut. Pada kasus umum, algoritma yang dikhususkan atau algoritma yang menemukan solusi perkiraan digunakan, bergantung pada kesulitan dari permasalahan.
 
Baris 667 ⟶ 589:
: Bila sebuah masalah memperlihatkan [[substruktur optimal]], artinya solusi optimal terhadap sebuah masalah bisa direkonstruksi dari solusi optimal ke sub-masalah, dan [[submasalah tumpang-tindih]], artinya sub-masalah yang sama digunakan untuk menyelesaikan banyak instasi masalah berbeda, pendekatan tercepat disebut ''pemrograman dinamis'' menghindari penghitungan solusi yang telah dikomputasi. Sebagai contoh, [[algoritma Floyd-Warshall]], jalan terpendek ke tujuan dari sebuah vertex dalam [[grafik (matematika)|grafik]] berbobot bisa ditemukan dengan menggunakan jalan terpendek ke tujuan dari semua simpul yang berdekatan. Pemrograman dinamis dan [[memoisasi]] berpadanan. Perbedaan utama antara pemrograman dinamis dan bagi-dan-taklukan adalah submasalah kurang lebih independen dalam bagi-dan-taklukan, sementara submasalah tumpang tindik dalam pemrograman dinamis. Perbedaaan antara pemrograman dinamis dan rekursi langsung adalah dalam 'caching' atau memoisasi dari pemanggialan rekursif. Saat submasalah independen dan tidak ada pengulangan, memoisasi tidak membantu sama sekali; makanya pemrograman dinamis bukalanh solusi untuk semua permasalahan kompleks. Dengan menggunakan memoisasi atau [[tabel matematis|tabel]] dari submasalah yang telah diselesaikan, pemrograman dinamis mereduksi eksponensial dari banyak permasalahan menjadi kompleksitas polinomial.
 
; MetodaMetode rakus
: Sebuah [[algoritma rakus]] mirip dengan [[pemrograman dinamis|algoritma pemrograman dinamis]], tapitetapi perbedaannya adalah solusi dari submasalah tidak harus diketahui pada setiap tahap; melainkan pilihan yang "rakus" bisa dibuat dengan melihat apa yang terbaik untuk saat tersebut. MetodaMetode rakus mengembangkan solusi dengan kemungkinan keputusan yang terbaik (bukan dengan keputusan yang ada) pada tahap algoritmis berdasarkan optimasi lokal yang ada sekarang dan keputusan yang terbaik (bukan semua kemungkinan keputusan) yang dibuat pada langkah sebelumnya. Algoritma ini tidak terlalu mendalam, dan tidak memberikan jawaban yang akurat terhadap banyak permasalahan. Tapi bila ia bekerja, ia menjadi metodametode yang paling cepat. Algoritma rakus paling terkenal adalah menemukan rentang pohon minimal seperti pada [[pengkodean Huffman|Pohon Huffman]], [[Algoritma Kruskal|Kruskal]], [[Algoritma Prim|Prim]], [[Algoritma Sollin|Sollin]].
 
; Metode heuristik
Baris 674 ⟶ 596:
 
=== Berdasarkan bidang kajian ===
{{SeeLihat alsopula|Daftar algoritma}}
 
Setiap bidang sains memiliki permasalahannya sendiri dan membutuhkan algoritma yang efisien. Masalah yang berkaitan di satu bidang terkadang dipelajari bersama. Beberapa contoh yaitu [[algoritma pencarian]], [[algoritma penggabungan]], [[analisis numerik|algoritma numerik]], [[teori grafik|algoritma grafik]], [[algoritma deret]], [[geometri komputasi|algoritma komputasi geometri]], [[kombinatorial|algoritma kombinatorial]], [[algoritmas medis]], [[mesin belajar]], [[kriptografi]], algoritma [[kompresi data]] dan [[penguraian|teknik penguraian]].
 
Terkadang bidang-bidang tersebut saling tumpang tindih, dan perkembangan algoritma di satu bidang bisa meningkatkan bidang lainnya yang terkadang tidak berkaitan. Sebagai contohnya, pemrograman dinamis ditemukan untuk optimisasi konsumsi sumber daya dalam industri, tapitetapi sekarang digunakan untuk menyelesaikan sejumlah besar permasalahan dalam banyak bidang.
 
=== Berdasarkan kompleksitas ===
 
{{SeeLihat alsopula|kelas kompleksitas|Kompleksitas parameterisasi}}
 
Algoritma bisa diklasifikasikan berdasarkan jumlah waktu yang dibutuhkan untuk selesai dibandingkan dengan ukuran inputnya. Ada berbagai varietas: beberapa algoritma selesai dalam waktu linear relatif terhadap ukuran input, beberapa selesai dalam jumlah waktu yang eksponensial atau lebih buruh, dan beberapa berhenti. Sebagai tambahan, beberapa masalah bisa memiliki berbagai algoritma dengan kompleksitas yang berbeda, sementara permasalahan yang lain bisa saja tidak memiliki algoritma atau tidak diketahui algoritmanya yang efisien. Ada juga pemetaan dari beberapa algoritma terhadap permasalahan lain. Karena itu, lebih cocok untuk mengklasifikasikan permasalahan itu sendiri bukannya algoritma menjadi kelas-kelas yang sama berdasarkan kompleksitas dari kemungkinan algoritma terbaik baginya.
 
Burgin (2005, p. &nbsp;24) menggunakan definisi algoritma secara umum yang melonggarkan kebutuhan bersama yang keluaran dari algoritma yang menjalankan sebuah fungsi harus ditentukan setelah sejumlah langkah. Dia mendefinisikan kelas super-rekursif dari algoritma sebagai "sebuah kelas algoritma yang mana memungkinkan untuk menghitung fungsi yang tidak bisa dihitung oleh mesin Turing manapun" (Burgin 2005, p. &nbsp;107). Hal ini berkaitan dekat dengan kajian dari metodametode [[hiperkomputasi]].
 
=== Berdasarkan tipe evaluatif ===
 
{{SeeLihat alsopula|Keragaman evaluatif}}
 
Untuk menjaga keseimbangan saat mengintegrasikan mesin ke dalam masyarakat, seseorang bisa mengklasifikasikan algoritma berdasarkan tipe dari evaluasi yang mereka lakukan.
Baris 707 ⟶ 629:
 
Kata sifat "berkelanjutan" bila diterapkan pada kata "algoritma" bisa berarti:
* Sebuah algoritma beroperasi pada data yang merepresentasikan kuantitas yang berkelanjutan, walaupun data tersebut direpresentasikan oleh pendekatan diskrit -- sepertidiskrit—seperti algoritma yang dipelajari dalam [[analisis numerik]]; atau
* Sebuah algoritma dalam bentuk dari [[persamaan diferensial]] yang beroperasi secara berkelanjutan terhadap data, berjalan dalam sebuah [[komputer analog]].
<ref>{{cite book
| author = Tsypkin
| title = Adaptation and learning in automatic systems
| url = http://books.google.com/?id=sgDHJlafMskC&pg=PA54
| year = 1971
| publisher = Academic Press
| isbn = 978-0-08-095582-7
| page = 54 }}</ref>
 
== Isu legalitas ==
:''SeeLihat alsopula: [[Paten perangkat lunak]] untuk pendahuluan umum dari paten pada perangkat lunak, termasuk algoritma untuk diimplementasikan pada komputer.''
 
Algoritma biasanya tidak dipatenkan. Di Amerika Serikat, sebuah klaim yang terdiri hanya dari manipulasi sederhana dari konsep abstrak, angka, atau sinyal tidak berarti suatu "process" (SPTO 2006), dan oleh karena itu algoritma tidak bisa dipatenkan (sebagaimana dalam [[Gottschalk v. Benson]]).
Namun, penerapan praktis dari algoritma terkadang dipatenkan.
Sebagai contohnya, dalam [[Diamond v. Diehr]], aplikasi dari algoritma [[umpan-balik]] sederhana untuk membantu dalam menyembuhkan [[karet sintetis]] dianggap dapat dipatenkan.
[[Debat paten perangkat lunak|Mematenkan perangkat lunak]] sangat kontroversial, dan ada paten yang mengikutkan algoritma yang sangat dikritisi, terutama algoritma [[kompresi data]], seperti [[Graphics Interchange Format|Format GrafikGrafiknya]]nya [[Unisys]].
 
Sebagai tambahan, beberapa algoritma kriptografi memiliki batasan ekspor (lihat [[ekspor dari kriptografi]]).
Baris 731 ⟶ 653:
 
Kata ''"Algoritma"'', atau ''"[[Algorisma]]"'' pada versi penulisan lain, datang dari nama [[al-Khwarizmi]]. dieja dalam Arab klasik sebagai Al-Khwarithmi. Al-khwarizmi ({{lang-fa|خوارزمي}}, 780-850) adalah [[matematikawan]], [[ahli astronomi]], [[ahli geografi]] dari [[orang Persia|Persia]] dan sarjana [[House of Wisdom]] di [[Baghdad]], yang arti namanya ''"penduduk asli [[Khwarezm]]"'', sebuah kota yang merupakan bagian dari [[Wilayah Iran]] pada masanya dan sekarang [[Uzbekistan]].
<ref name="Hogendijk">{{cite journal|last=Hogendijk|first=Jan P.|year=1998|title=al-Khwarzimi|url=http://www.kennislink.nl/web/show?id=116543|dead-url=yes|format=|journal=Pythagoras|volume=38|issue=2|pages=4–5|issn=0033–4766|archive-url=https://web.archive.org/web/20080319024147/http://www.kennislink.nl/web/show?id=116543|archive-date=2008-03-19|access-date=2014-08-28|ref=harv}}</ref>
<ref name="Hogendijk">{{cite journal
<ref name="Oaks">{{cite web|last=Oaks|first=Jeffrey A.|title=Was al-Khwarizmi an applied algebraist?|url=http://facstaff.uindy.edu/~oaks/MHMC.htm|publisher=[[University of Indianapolis]]|archive-url=https://www.webcitation.org/5uGLbfttF?url=http://facstaff.uindy.edu/~oaks/MHMC.htm|archive-date=2010-11-15|dead-url=yes|accessdate=2008-05-30}}</ref>
|first=Jan P.
|last=Hogendijk
|title=al-Khwarzimi
|journal=Pythagoras
|volume=38
|issue=2
|year=1998
|pages=4–5
|url=http://www.kennislink.nl/web/show?id=116543
|ref=harv}}
{{Dead link |date=March 2010
}}</ref>
<ref name="Oaks">{{cite web
|first=Jeffrey A.
|last= Oaks
|url=http://facstaff.uindy.edu/~oaks/MHMC.htm
|title=Was al-Khwarizmi an applied algebraist?
|publisher=[[University of Indianapolis]]
|accessdate=May 30, 2008
}}</ref>
Sekitar tahun 825, dia menulis risalah dalam bahasa Arab, yang diterjemahkan dalam [[Latin]] pada abad ke-12 dengan judul ''Algoritmi de numero Indorum''.
Judul ini artinya "Algoritmi pada bilangan India", dimanadi mana "Algoritmi" adalah pelatinan penerjemah dari nama Al-Khwarizmi.
<ref>{{cite book
| last = Brezina
| first = Corona
| title = Al-Khwarizmi: The Inventor Of Algebra
| url = http://books.google.com/?id=955jPgAACAAJ
| year = 2006
| publisher = The Rosen Publishing Group
| isbn = 978-1-4042-0513-0
}}</ref>
Al-Khwarizmi dulunya adalah matematikawan yang paling banyak dibaca di Eropa pada akhir Abad Pertengahan, pada umum lewat bukunya yang lain, [[Al-Jabr|Aljabar]].
<ref>[http://www-history.mcs.st-and.ac.uk/Extras/Boyer_Foremost_Text.html Foremost mathematical texts in history], according to [[Carl B. Boyer]].</ref>
Pada akhir abad pertengahan, ''algorismus'', perubahan dari namanya, berarti "sistem bilangan desimal" yang masih merupakan arti dari kata Inggris moderenmodern [[algorism]].
Pada abad ke-17 Prancis kata tersebut berubah, tapitetapi tidak maknanya, menjadi ''algorithme''.
Inggris mengadopsi Prancis setelahnya, tapitetapi tidak pada akhir abad ke-19 lah "Algorithm" mengambil makna dari kata Inggris masa sekarang.
<ref>Etymology of algorithm at [http://dictionary.reference.com/browse/algorithm Dictionary.Reference.com]</ref>
 
Etimologi alternatif mengklaim asal mulanya dari istilah ''algebra'' (aljabar) dari makna abad pertengahan "aritmatikaaritmetika Arab" dan ''arithmos'' istilah Yunani untuk angka (yang secara harfiah berarti "bilangan Arab" atau "perhitungan Arab").
Karya algoritma Al-Kharizmi bukan berbentuk seperti pada masa modern sekarang tapitetapi sebagai tipe dari pengulangan kalkulus (disini disebutkan bahwa karya fundamentalnya yang dikenal sebagai [[algebra]] pada awalnya berjudul "[[Buku Ringkasan tentang Kalkulasi dengan Penyempurnaan dan Pengimbangan]]" menjelaskan tipe-tipe dari pengulangan perhitungan dan [[persamaan kuadrat]]).
Dalam makna tersebut, algoritima dikenal di Eropa jauh sebelum Al-Kharizmi.
Algoritma paling tua yang dikenal sekarang adalah [[Algoritma Euklid]] (lihat juga [[Pengembangan algoritma Euklid]]).
Sebelum ditemukan istilah ''algorithm'' orang Yunani menyebutnya ''anthyphairesis'' secara harfiah berarti anti-substraksi atau substraksi timbal-balik (untuk bacaan lebih lanjut [[David Fowler (matematikawan)|disini]] dan [http://livetoad.org/Courses/Documents/bb63/Notes/continued_fractions.pdf ini] {{Webarchive|url=https://web.archive.org/web/20131103100608/http://livetoad.org/Courses/Documents/bb63/Notes/continued_fractions.pdf |date=2013-11-03 }}.
Algoritma dikenal oleh orang Yunani berabad sebelum
<ref>Becker O (1933). "Eudoxus-Studien I. Eine voreuklidische Proportionslehre und ihre Spuren bei Aristoteles und Euklid". Quellen und Studien zur Geschichte der Mathematik B 2: 311–333.</ref>
Euclid.
Baris 783 ⟶ 686:
 
=== Asal mula ===
Bukti terawal tentang algoritma ditemukan dalam matematika [[Babilonia (kota kuno)|Babilonia]] di [[Mesopotamia]] kuno (saat ini merupakan bagian dari [[Irak]]). Sebuah tablet tanah liat [[Sumeria]] yang ditemukan di Shuruppak dekat [[Bagdad|Baghdad]] dan berasal dari sekitar tahun 2500 SM menjelaskan algoritma divisi yang paling awal.<ref name="Springer Science & Business Media">{{cite book|last1=Chabert|first1=Jean-Luc|date=2012|title=A History of Algorithms: From the Pebble to the Microchip|publisher=Springer Science & Business Media|isbn=9783642181924|pages=7–8}}</ref> Selama dinasti Hammurabi sekitar 1800-1600 SM, tablet tanah liat Babilonia menjabarkan algoritma untuk rumus-rumus komputasi.<ref>{{cite journal|last1=Knuth|first1=Donald E.|date=1972|title=Ancient Babylonian Algorithms|url=http://steiner.math.nthu.edu.tw/disk5/js/computer/1.pdf|journal=Commun. ACM|volume=15|issue=7|pages=671–677|doi=10.1145/361454.361514|issn=0001-0782|archive-url=https://web.archive.org/web/20121224100137/http://steiner.math.nthu.edu.tw/disk5/js/computer/1.pdf|archive-date=2012-12-24|s2cid=7829945|url-status=dead}}</ref> Algoritma juga digunakan dalam astronomi Babilonia. Tablet tanah liat Babilonia menguraikan dan menggunakan prosedur algoritmik untuk menghitung waktu dan tempat peristiwa astronomi yang signifikan.<ref>{{Citation|last=Aaboe|first=Asger|author-link=Asger Aaboe|date=2001|title=Episodes from the Early History of Astronomy|publisher=Springer|place=New York|pages=40–62|isbn=978-0-387-95136-2}}</ref>
 
Algoritma untuk aritmatika juga ditemukan dalam matematika Mesir kuno, yang terdapat pada Papirus Matematika Rhind yang berasar dari sekitar tahun 1550 SM.<ref name="Springer Science & Business Media2" /> Algoritma kemudian digunakan dalam matematika [[Periode Helenistik|Helenistik]] kuno. Dua contohnya adalah [[Tapis Eratosthenes]], yang dijelaskan dalam Pengenalan Aritmatika oleh [[Nicomachus]],<ref>{{cite web|last=Ast|first=Courtney|title=Eratosthenes|url=http://www.math.wichita.edu/history/men/eratosthenes.html|publisher=Wichita State University: Department of Mathematics and Statistics|archive-url=https://web.archive.org/web/20150227150653/http://www.math.wichita.edu/history/men/eratosthenes.html|archive-date=February 27, 2015|access-date=February 27, 2015|url-status=live}}</ref><ref name="Cooke20052" />{{rp|Ch 9.2}} dan [[Algoritma Euklides|Algoritma Euklides]], yang pertama kali dipaparkan dalam Euclid's Elements (sekitar 300 SM).<ref name="Cooke20052" />{{rp|Ch 9.1}}
Kata algoritma datang dari nama matematikawan Persia abad ke-9 [[al-Khwarizmi|Abu Abdullah Muhammad ibnu Musa Al-Khwarizmi]], yang hasil kerjanya dibangun dari matematikawan India abad ke-7 [[Brahmagupta]].
Kata algorisma awalnya mengacu hanya pada aturan-aturan dalam melakukan aritmatika menggunakan bilangan Hindu-Arab namun berkembang lewat penerjemahan Latin Eropa dari nama Al-Khwarizmi menjadi algoritma pada abad ke-18.
Penggunaan kata tersebut berkembang mengikutkan semua prosedur untuk menyelesaikan masalah atau melakukan unit kegiatan.
<ref>{{cite web
|url=http://www.scriptol.com/programming/algorithm-history.php
|title=History of Algorithms and Algorithmics
|publisher=Scriptol.com
|date=
|accessdate=November 7, 2012
}}</ref>
 
=== Simbol diskrit dan yang dapat dibedakan ===
 
'''Penanda-penghitung''': Untuk mencatat hewan gembalaan, kumpulan biji dan uang mereka orang dahulu menggunakan penghitung: akumulasi batu atau tanda yang ditoreh pada tongkat, atau membuat simbol diskrit di kerang.
Sampai orang Babilonia dan Mesir menggunakan tanda dan simbol, pada akhirnya [[bilangan Roma]] dan [[abakus]] berkembang (Dilson, p. &nbsp;16-41).
Penanda penghitung muncul dalam [[sistem bilangan operan]] aritmatikaaritmetika digunakan dalam [[mesin Turing]] dan komputasi [[mesin Post-Turing]].
 
=== Manipulasi simbol sebagai "penampung" bilangan: aljabar ===
Baris 808 ⟶ 703:
=== Rancangan mekanis dengan tingkat diskrit ===
 
''Jam'': Bolter memuji penemuan [[jam]] gaya-berat sebagai "Kunci penemuan [[dari Eropa dipada Abad Pertengahan]]", khususnya pada [[ambang pelarian]]
<ref>Bolter 1984:24</ref>
yang menyediakan kita dengan tik dan tak dari jam mekanis.
Baris 814 ⟶ 709:
<ref>Bolder 1984:26</ref>
mengarah langsung pada "[[teori otomata|otomata]] mekanis" dimulai pada abad ke-13 dan terakhir pada "mesin komputasi" -- [[motor berbeda]] dan [[motor analitik]] dari [[Charles Babbage]] dan bangsawan [[Ada Lovelace]], pertengahan abad ke-19.
<ref>Bolter 1984:33–34, 204–206.</ref>
Lovelace dikreditkan sebagai yang pertama menciptakan algoritma yang ditujukan untuk diproses di komputer -- motorkomputer—motor analitis Babbage, perangkat pertama yang dianggap [[komputer]] [[Turing-sempurna]] sebenarnya bukan hanya sebuah [[kalkulator]] -- dan—dan terkadang dikenal "programmer pertama dalam sejarah", walaupun implementasi penuh dari perangkat Babbage kedua tidak terealisasi sampai beberapa dekade setelah masanya.
 
''Mesin logika 1870 - [[Stanley Jevons]] "sempoa logika" dan "mesin logika"'': Masalah teknisnya adalah untuk mereduksi [[persamaan boolean]] bila ditampilkan dalam sebuah bentuk yang pada masa sekarang dikenal sebagai [[pemetaan Karnaugh]].
Jevons (1880) pertama menjelaskan "sempoa" sederhana dari "potongan kayu dilengkapi dengan penyemat, dibuat supaya bagian atau kelas kombinasi [[logika]] manapun dapat dipilih secara mekanis ... Baru-baru ini Saya telah mereduksi sistem menjadi bentuk yang secara sempurna mekanis, dan membuatnya mewujudkan keseluruhan proses inferensi tak langsung dalam apa yang disebut sebuah ''Mesin Logika''"
Mesinnya dilengkapi dengan "beberapa tangkai kayu yang bisa dipindahkan" dan "di bawah ada 21 kunci seperti pada piano [dll] ...".
Dengan mesin ini dia dapat menganalis sebuah "[[silogisme]] atau argumen logika sederhana apapun".
Baris 835 ⟶ 730:
 
Davis (2000) mengamati pentingnya penyiaran elektromekanis (dengan "keadaan binari"-nya ''buka'' dan ''tutup''):
: Hanya dengan perkembangan, dimulai sejak 1930-an, dari kalkulator elektromekanis menggunakan penggantian elektris, sehingga mesin yang dibuat memiliki ruang lingkup yang dibayangkan Babbage." <ref> Davis 2000:14</ref>
 
=== Matematika selama abad 19 sampai pertengahan abad 20 ===
 
''Simbol dan aturan'': Dengan cepat berkembangnya matematika dari [[George Boole]] (1847, 1854), [[Gottlob Frege]] (1897), dan [[Giuseppe Peano]] (1888-1889) mereduksi aritmatikaaritmetika menjadi serangkaian simbol dimanipulasi oleh aturan-aturan. ''The Principles of arithmetic, presented by a new method''-nya Peano (1888) adalah "usaha pertama mengaksiomakan matematika dalam sebuah bahasa simbolik".
<ref>van Heijenoort 1967:81ff</ref>
 
Baris 848 ⟶ 743:
''Paradoks'': Pada masa yang sama sejumlah paradoks yang mengganggu muncul dalam literatur, pada khususnya [[paradoks Burali-Forti]] (1987), [[paradoks Russell]] (1902-03), dan [[Paradoks Richard]].
<ref>Dixon 1906, cf. Kleene 1952:36–40</ref>
Hasilnya mengarah ke makalah [[Kurt Godel]] (1931) -- dia secara khusus merujuk paradoks pembohong -- yangpembohong—yang mereduksi aturan dari [[rekursi]] pada angka.
 
''Penghitungan Efektif'': Dalam usaha untuk menyelesaikan [[permasalahan keputusan]] yang didefinisikan oleh Hilbert tahun 1928, matematikawan pertama mendefinisikan apa arti dari "metodametode efektif" atau "kalkulasi efektif" (misalnya, sebuah kalkulasi yang akan sukses).
Dalam waktu yang cepat hal berikut muncul: [[kalkulus-λ]] oleh [[Alonzo Church]], [[Stephen Kleene]], dan [[J.B. Rosser]]
<ref>
Baris 859 ⟶ 754:
Kleene 1935–6 in Davis 1965:237ff, Kleene 1943 in Davis 1965:255ff
</ref>
Church membuktikan
<ref>Church 1936 in Davis 1965:88ff</ref>
bahwa permasalahan keputusan tidak terpecahkan, definisi [[Emil Post]] tentang penghitungan efektif yaitu sebagai pekerja yang tanpa berpikir mengikuti suatu daftar instruksi untuk bergerak ke kiri atau kanan lewat sederetan ruangan dan bersamaan dengan itu bisa menandai atau menghapus kertas atau mengamati kertas dan membuat pilihan ya-tidak tentang instruksi selanjutnya.
Baris 865 ⟶ 760:
Pembuktian Alan Turing bahwa permasalahan keputusan tidak terpecahkan dengan menggunakan "sebuah mesin [otomatis]"-nya
<ref>Turing 1936–7 in Davis 1965:116ff</ref>
dengan efek yang mirip dengan "formulasi"-nya Post, definisi [[J. Barkley Rosser]] tentang "metodametode efektif" dalam makna "sebuah mesin".
<ref>Rosser 1939 in Davis 1965:226</ref>
Proposal [[S. C. Kleene]] dari pelopor "[[Tesis Church]]" yang disebutnya "Thesis I",
<ref>Kleene 1943 in Davis 1965:273–274</ref>
dan beberapa tahun kemudian Kleene menamakan tesisnya "Tesis Church"
Baris 876 ⟶ 771:
=== Emil Post (1936) dan Alan Turing (1936-37, 1939) ===
 
Berikut adalah kebetulan yang luar biasa dari dua orang yang tidak saling mengenal tapitetapi mendeskripsikan sebuah proses orang-sebagai-komputer mengerjakan perhitungan -- danperhitungan—dan mereka menghasilkan definisi yang mirip.
 
[[Emil Post]] (1936) mendeskripsikan aksi dari sebuah "komputer" (manusia) sebagai berikut:
:"... dua konsep ikut serta: yaitu sebuah ''simbol ruang'' dimana pekerjaan yang mengarah dari masalah ke jawaban dilakukan, dan ''sekumpulan arahan'' yang baku dan tidak bisa diubah.
 
Simbol ruangnya yaitu
Baris 886 ⟶ 781:
:"Satu kotak dibiarkan dan disebut sebagai titik awal. ...sebuah masalah tertentu diberikan dalam bentuk simbolik dengan sejumlah kotak terbatas [yaitu, INPUT] ditandai dengan coretan. Begitu juga jawabannya [yaitu, OUTPUT] diberikan dalam bentuk simbolik dari suatu konfigurasi dari kotak-kotak yang ditandai....
 
:"Sekumpulan arahan bisa digunakan untuk permasalahan umum menentukan proses determistik saat diterapkan pada setiap masalah tertentu. Proses ini hanya berhenti bila datang arahan dengan tipe (C ) [yaitu, STOP]". <ref>Turing 1936–7 in Davis 1965:289–290</ref> Lihat lebih lanjut pada [[mesin post-Turing]] [[FileBerkas:Alan Turing.jpg|thumbjmpl|200px|Patung Alan Turing's statue atdi [[Taman Bletchley Park]].]] Karya [[Alan Turing]] <ref>Turing 1936 in Davis 1965, Turing 1939 in Davis 1965:160</ref> mendahului karya dari Stibitz (1937); tidak diketahui apakah Stibitz mengetahui karya Turing. Biografinya Turing percaya bahwa Turing menggunakan model seperti-mesin-ketik diturunkan dari ketertarikannya pada masa muda: "Alan memiliki impian menemukan mesin ketik pada saat muda; Ibu Turing memiliki sebuah mesin ketik; dan dia mungkin memulainya dengan menanyakan pada dirinya sendiri apa maksudnya dengan menyebut sebuah mesin ketik dengan 'mekanikal'". <ref>Hodges, p. 96</ref> Dengan lazimnya kode Morse dan telegraf, mesin pita telegraf, dan mesin-ketik jarak jauh pada waktu itu kita bisa menyimpulkan bahwa semua itu memberikan pengaruh.
 
Turing -- modelTuring—model dari komputasinya sekarang dikenal dengan [[mesin Turing]] -- memulai—memulai, sebagaimana Post, dengan analisaanalisis dari komputer manusia yang ia sederhanakan menjadi sekumpulan gerakan dasar sederhana dan "keadaan pikiran".
Tapi dia terus maju selangkah ke depan dan membuat sebuah mesin sebagai model dari komputasi angka.
<ref>Turing 1936–7:116</ref>
 
:"Menghitung biasanya dilakukan dengan menulis simbol tertentu di atas kertas. Misalkan kertas tersebut dibagi menjadi segi empat seperti buku aritmatikaaritmetika anak-anak.... Saya asumsikan bahwa komputasi dilakukan pada kertas satu dimensi, yaitu, di pita yang dibagi dalam persegi. Juga misalkan bahwa jumlah simbol yang akan dicetak terbatas....
 
:"Perilaku dari komputer disetiap waktu ditentukan oleh simbol yang diobservasinya, dan "keadaan pikiran"-nya pada waktu tersebut. Juga bisa diasumsikan bahwa ada batas B sebagai jumlah simbol atau persegi yang mana komputer dapat amati dalam satu waktu. Jika ia ingin mengamati lebih, ia harus menggunakan pengamatan beriringan. Kita juga memisalkan bahwa jumlah keadaan pikiran yang diperlukan disini adalah terbatas...
 
:"Mari kita bayangkan bahwa operasi yang dilakukan oleh komputer akan dipecah menjadi 'operasi-operasi sederhana' yang sangat mendasar sehingga tidak mudah membayangkannya untuk dibagi lebih jauh." <ref name="Turing 1936-7 in Davis 1965:136">Turing 1936–7 in Davis 1965:136</ref>
 
Reduksi Turing menghasilkan hal berikut:
Baris 906 ⟶ 801:
::"(B) Suatu kemungknian perubahan (b) dari persegi yang diamati, bersama dengan kemungkinan perubahan dari keadaan pikiran"
 
:"Kita sekarang mungkin sudah bisa membentuk sebuah mesin untuk melakukan pekerjaan dari komputer tersebut." <ref name="Turing 1936-7 in Davis 1965:136"/>
 
Beberapa tahun kemudian, Turing mengembangkan analisanyaanalisisnya (tesis, secara definisi) dengan ekspresi kuat berikut:
:"Sebuah fungsi dikatakan "bisa dihitung secara efektif" jika nilainya bisa ditemukan dengan proses yang murni mekanis.
Walau sangat mudah menangkap ide ini, namun ia membutuhkan beberapa definisi matematikan terbatas yang bisa diekspresikan . . . [dia mendiskusikan sejarah dari definisi seperti di atas dengan menghormati Godel, Herbrand, Kleen, Church, Turing dan Post] ... Kita mungkin gunakan pernyataan tersebut secara harfiah, memahami murni dengan proses mekanis yang mana dapat dilakukan oleh sebuah mesin. Memungkinkan untuk memberikan deskripsi matematis, dalam beberapa bentuk normal, dari struktur mesin tersebut. Perkembangan dari ide ini mengarah pada definisi penulis dari sebuah fungsi yang dapat dihitung, dan untuk mengidentifikasi komputibilitas † dengan penghitungan yang efektif . . . .
::"† Kita boleh menggunakan ekspresi "fungsi hitung" untuk mengartikan sebuah fungsi yang dapat dihitung oleh sebuah mesin, dan kita biarkan "secara efektif dapat dihitung" mengacu pada ide intuitif tanpa definisi tertentu dengan salah satu dari definisi tersebut". <ref>Turing 1939 in Davis 1965:160</ref>
 
=== J. B. Rosser (1939) dan S. C. Kleene (1943) ===
 
''[[J. Barkley Rosser]]'' mendefinisikan 'metodametode [matematis] efektif' dengan cara berikut (kemiringan ditambahkan):
:"'MetodaMetode efektif' disebut sebagai metode yang spesial yang mana setiap langkahnya secara tepat ditentukan dan pasti menghasilkan jawaban dalam sejumlah langkah yang terbatas. Dengan pengertian khusus ini, tiga definisi berbeda telah diajukan sampai sekarang. [catatan kakinya #5; lihat diskusinya di bawah]. Yang paling sederhana (karena Post dan Turing) menyatakan intinya bahwa ''sebuah metodametode efektif menyelesaikan sekumpulan permasalahan hanya ada jika seseorang bisa membuat sebuah mesin yang akan menyelesaikan setiap masalah dari sekumpulan masalah tanpa campur tangan manusia kecuali memasukan pertanyaan dan (nantinya) membaca jawabannya''. Ketiga definisi tersebut sama, jadi tidak masalah yang mana yang digunakan. Lebih lanjut, fakta bahwa ketiganya sama adalah argumen yang sangat kuat untuk kebenaran dari salah satunya." (Rosser 1939:225-6)
 
Catatan kaki Rosser #5 merujuk karya dari (1) Church dan Kleene dan definisi dari definabiliti-λ, secara khusus Church menggunakannya dalam ''An Unsolvable Problem of Elementary Number Theory''-nya (1936);
Baris 924 ⟶ 819:
''[[Stephen C. Kleene]]'' didefinisikan sebagai "Thesis I"-nya yang terkenal yang dikenal sebagai [[tesis Church-Turing]].
Tapi dia melakukan hal tersebut dalam konteks berikut (penebalan dari aslinya):
:"12. ''Teori-teori algoritma''... Dalam menyiapkan sebuah teori algoritma yang komplitkomplet, apa yang kita lakukan adalah mendeskripsikan sebuah prosedur, yang dapat dilakukan untuk setiap kumpulan nilai dari variabel-variabel tunggal, yang mana prosedur berhenti dan dengan cara tersebut dari hasilnya kita bisa membaca sebuah jawaban tertentu, "ya" atau tidak", untuk pertanyaan "apakah nilai predikat benar?"" (Kleene 1943:273)
 
=== Sejarah setelah 1950 ===
Baris 934 ⟶ 829:
 
{{colbegin|3}}
* [[Pemerintahan algoritmik]]
* [[Mesin abstrak]]
* [[Rekayasa algoritma]]
Baris 942 ⟶ 838:
* ''[[Pendahuluan untuk Algoritma]]''
* [[Daftar topik algoritma umum]]
* [[Daftar publikasi penting dalam ilmu komputer teoritisteoretis#Algoritma | Daftar publikasi penting dalam ilmu komputer teoritisteoretis - Algoritma]]
* [[Numerical Mathematics Consortium]]
* [[Teori komputasi]]
Baris 949 ⟶ 845:
{{colend}}
 
== CatatanReferensi ==
 
{{Reflist|30em}}
 
== ReferensiBacaan lanjutan ==
 
{{refbegin|30em}}
* Axt, P. (1959) On a Subrecursive Hierarchy and Primitive Recursive Degrees, ''Transactions of the American Mathematical Society'' 92, pp.&nbsp;85–105
* Bell, C. Gordon and Newell, Allen (1971), ''Computer Structures: Readings and Examples'', McGraw-Hill Book Company, New York. ISBN 0-07-004357-4.
* {{cite book|last=Bellah|first=Robert Neelly|year=1985|authorlink=Robert N. Bellah|title=Habits of the Heart: Individualism and Commitment in American Life| location=Berkeley| isbn=978-0-520-25419-0|publisher=University of California Press|url= http://books.google.com/books?id=XsUojihVZQcC |ref=harv}}
* {{Cite journal|author1-link=Andreas Blass|first1=Andreas|last1=Blass|author2-link=Yuri Gurevich|first2=Yuri|last2=Gurevich|year=2003|url=http://research.microsoft.com/~gurevich/Opera/164.pdf|title=Algorithms: A Quest for Absolute Definitions|journal= Bulletin of European Association for Theoretical Computer Science|volume= 81}} Includes an excellent bibliography of 56 references.
* {{cite book| last1 = Boolos| first1 = George| last2 = Jeffrey| first2 = Richard| title = Computability and Logic|url = https://archive.org/details/computabilitylog0000bool_r8y9|edition = 4th| year = 1974, 1999| publisher = Cambridge University Press, London| isbn = 0-521-20402-X| ref = harv| author1-link = George Boolos| author2-link = Richard Jeffrey }}: cf. Chapter 3 ''Turing machines'' where they discuss "certain enumerable sets not effectively (mechanically) enumerable".
* {{cite book| last = Burgin| first = Mark| title = Super-Recursive Algorithms| year = 2004| publisher = Springer| isbn = 978-0-387-95569-8 }}
* Campagnolo, M.L., [[Cris Moore|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.&nbsp;91–109
* {{Cite journal|last=Church|first=Alonzo|authorlink=Alonzo Church|title=An Unsolvable Problem of Elementary Number Theory|journal=The American Journal of Mathematics|volume=58|pages= 345–363|year=1936a|doi=10.2307/2371045|issue=2|jstor=2371045}} Reprinted in ''The Undecidable'', p.&nbsp;89ff. The first expression of "Church's Thesis". See in particular page 100 (''The Undecidable'') where he defines the notion of "effective calculability" in terms of "an algorithm", and he uses the word "terminates", etc.
* {{Cite journal|last=Church|first=Alonzo|authorlink=Alonzo Church|title=A Note on the Entscheidungsproblem|journal=The Journal of Symbolic Logic|volume=1|year=1936b|pages=40–41|doi=10.2307/2269326|issue=1|jstor=2269326}} {{cite journal|last=Church|first=Alonzo|title=Correction to a Note on the Entscheidungsproblem|journal=The Journal of Symbolic Logic|volume=1|year=1936|pages=101–102|doi=10.2307/2269030|issue=3|jstor=2269030}} Reprinted in ''The Undecidable'', p.&nbsp;110ff. Church shows that the Entscheidungsproblem is unsolvable in about 3 pages of text and 3 pages of footnotes.
* {{cite book| last = Daffa'| first = Ali Abdullah al-| title = The Muslim contribution to mathematics| year = 1977| publisher = Croom Helm| location = London| isbn = 0-85664-464-1 }}
* {{cite book| last = Davis| first = Martin| authorlink = Martin Davis| title = The Undecidable: Basic Papers On Undecidable Propositions, Unsolvable Problems and Computable Functions| year = 1965| publisher = Raven Press| location = New York| isbn = 0-486-43228-9 }} Davis gives commentary before each article. Papers of [[Gödel]], [[Alonzo Church]], [[Alan Turing|Turing]], [[J. Barkley Rosser|Rosser]], [[Kleene]], and [[Emil Post]] are included; those cited in the article are listed here by author's name.
* {{cite book| last = Davis| first = Martin| authorlink = Martin Davis| title = Engines of Logic: Mathematicians and the Origin of the Computer| year = 2000| publisher = W. W. Nortion| location = New York| isbn = 0-393-32229-7 }} Davis offers concise biographies of [[Gottfried Leibniz|Leibniz]], [[George Boole|Boole]], [[Gottlob Frege|Frege]], [[Georg Cantor|Cantor]], [[David Hilbert|Hilbert]], Gödel and Turing with [[John von Neumann|von Neumann]] as the show-stealing villain. Very brief bios of [[Joseph-Marie Jacquard]], [[Babbage]], [[Ada Lovelace]], [[Claude Shannon]], [[Howard Aiken]], etc.
* {{DADS|algorithm|algorithm}}
* {{cite journal|title= Evolution and moral diversity |author=Dean, Tim |journal=Baltic International Yearbook of Cognition, Logic and Communication|year=2012|volume=7}}
* {{cite book| last = Dennett| first = Daniel| authorlink = Daniel Dennett| title = Darwin's Dangerous Idea| year = 1995| publisher = Touchstone/Simon & Schuster| location = New York| isbn = 0-684-80290-2 }}
* [[Yuri Gurevich]], [http://research.microsoft.com/~gurevich/Opera/141.pdf ''Sequential Abstract State Machines Capture Sequential Algorithms''], ACM Transactions on Computational Logic, Vol 1, no 1 (July 2000), pages 77–111. Includes bibliography of 33 sources.
* {{cite book| last1=Hertzke| first1=Allen D.|last2=McRorie|first2=Chris| year=1998|editor1-last=Lawler| editor1-first=Peter Augustine| editor2-last=McConkey|editor2-first=Dale|chapter=The Concept of Moral Ecology|title=Community and Political Thought Today|location =Westort, CT|publisher=[[Praeger]]|ref=harv}}
* {{Cite journal|last=Kleene|first=Stephen C.|authorlink=Stephen Kleene |title=General Recursive Functions of Natural Numbers|journal=Mathematische Annalen|volume=112|pages=727–742|url=http://gdz.sub.uni-goettingen.de/index.php?id=11&PPN=GDZPPN002278499&L=1|year=1936
| doi = 10.1007/BF01565439|issue=5}} Presented to the American Mathematical Society, September 1935. Reprinted in ''The Undecidable'', p.&nbsp;237ff. Kleene's definition of "general recursion" (known now as mu-recursion) was used by Church in his 1935 paper ''An Unsolvable Problem of Elementary Number Theory'' that proved the "decision problem" to be "undecidable" (i.e., a negative result).
* {{Cite journal|last=Kleene|first=Stephen C.|authorlink=Stephen Kleene |title= Recursive Predicates and Quantifiers|journal=American Mathematical Society Transactions|volume=54|pages=41–73|year=1943 |doi= 10.2307/1990131|issue=1|jstor=1990131}} Reprinted in ''The Undecidable'', p.&nbsp;255ff. Kleene refined his definition of "general recursion" and proceeded in his chapter "12. Algorithmic theories" to posit "Thesis I" (p.&nbsp;274); he would later repeat this thesis (in Kleene 1952:300) and name it "Church's Thesis"(Kleene 1952:317) (i.e., the [[Church thesis]]).
* {{cite book| last = Kleene| first = Stephen C.| authorlink = Kleene| title = Introduction to Metamathematics| edition = Tenth Edition 1991| year = 1952| edition = First | publisher = North-Holland Publishing Company| isbn = 0-7204-2103-9 }} Excellent—accessible, readable—reference source for mathematical "foundations".
* {{cite book| last = Knuth| first = Donald| authorlink = Donald Knuth| title = Fundamental Algorithms, Third Edition| year = 1997| publisher = Addison–Wesley| location = Reading, Massachusetts| isbn = 0-201-89683-4 }}
* {{Cite book|last=Knuth|first=Donald|authorlink=Donald Knuth|title=Volume 2/Seminumerical Algorithms, The Art of Computer Programming First Edition|publisher=Addison–Wesley|location=Reading, Massachusetts|year=1969|isbn= }}
* Kosovsky, N. K. ''Elements of Mathematical Logic and its Application to the theory of Subrecursive Algorithms'', LSU Publ., Leningrad, 1981
* {{Cite journal|last=Kowalski|first=Robert|authorlink=Robert Kowalski|title=Algorithm=Logic+Control|journal=[[Communications of the ACM]]|volume=22|issue=7|pages=424–436|year=1979|doi=10.1145/359131.359136}}
* [[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.&nbsp;28&nbsp;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.]
* {{cite book| last = Minsky| first = Marvin| authorlink = Marvin Minsky| title = Computation: Finite and Infinite Machines| edition = First| year = 1967| publisher = Prentice-Hall, Englewood Cliffs, NJ| isbn = 0-13-165449-7 }} Minsky expands his "...idea of an algorithm—an effective procedure..." in chapter 5.1 ''Computability, Effective Procedures and Algorithms. Infinite machines.''
* {{Cite journal|last=Post|first=Emil|authorlink=Emil Post|title=Finite Combinatory Processes, Formulation I |journal=The Journal of Symbolic Logic |volume=1 |year=1936 |pages=103–105 |doi=10.2307/2269031 |issue=3 |jstor=2269031}} Reprinted in ''The Undecidable'', p. 289ff. Post defines a simple algorithmic-like process of a man writing marks or erasing marks and going from box to box and eventually halting, as he follows a list of simple instructions. This is cited by Kleene as one source of his "Thesis I", the so-called [[Church–Turing thesis]].
* {{Cite book|last=Rogers, Jr|first=Hartley|title=Theory of Recursive Functions and Effective Computability|publisher=The MIT Press|year=1987|isbn=0-262-68052-1}}
* {{Cite journal|last=Rosser|first=J.B.|authorlink=J.B. Rosser|title=An Informal Exposition of Proofs of Godel's Theorem and Church's Theorem|journal=Journal of Symbolic Logic|volume= 4 |year=1939}} Reprinted in ''The Undecidable'', p.&nbsp;223ff. Herein is Rosser's famous definition of "effective method": "...a method each step of which is precisely predetermined and which is certain to produce the answer in a finite number of steps... a machine which will then solve any problem of the set with no human intervention beyond inserting the question and (later) reading the answer" (p.&nbsp;225–226, ''The Undecidable'')
* {{cite book |last=Santos-Lang |first=Christopher | year=2014 |editor1-first=Simon |editor1-last=van Rysewyk |editor2-first=Matthijs |editor2-last=Pontier |title=Machine Medical Ethics |publisher=Springer | location=New York | pages=74–96 | chapter= Chapter 6: Moral Ecology Approaches | url=http://grinfree.com/MoralEcology.pdf | format=PDF}}
* {{Cite book|last=Scott|first=Michael L.|title=Programming Language Pragmatics |edition=3rd |publisher=Morgan Kaufmann Publishers/Elsevier|year=2009|isbn=978-0-12-374514-9}}
* {{cite book| last = Sipser| first = Michael| title = Introduction to the Theory of Computation| year = 2006| publisher = PWS Publishing Company| isbn = 0-534-94728-X }}
* {{cite book |last=Sober |first=Elliott |last2=Wilson |first2=David Sloan |year=1998 |title=Unto Others: The Evolution and Psychology of Unselfish Behavior |location=Cambridge |publisher=Harvard University Press}}
* {{Cite book|last=Stone|first=Harold S.|title=Introduction to Computer Organization and Data Structures|edition=1972|publisher=McGraw-Hill, New York|isbn=0-07-061726-0|year=1972}} Cf. in particular the first chapter titled: ''Algorithms, Turing Machines, and Programs''. His succinct informal definition: "...any sequence of instructions that can be obeyed by a robot, is called an ''algorithm''" (p.&nbsp;4).
* {{cite book| last = Tausworthe| first = Robert C| title = Standardized Development of Computer Software Part 1 Methods| year = 1977| publisher = Prentice-Hall, Inc.| location = Englewood Cliffs NJ| isbn = 0-13-842195-1 }}
* {{Cite journal|last=Turing|first=Alan M.|authorlink=A. M. Turing|title=On Computable Numbers, With An Application to the Entscheidungsproblem|journal=[[Proceedings of the London Mathematical Society]], Series 2|volume=42|pages= 230–265 |year=1936–7|doi=10.1112/plms/s2-42.1.230 }}. Corrections, ibid, vol. 43(1937) pp.&nbsp;544–546. Reprinted in ''The Undecidable'', p.&nbsp;116ff. Turing's famous paper completed as a Master's dissertation while at King's College Cambridge UK.
* {{Cite journal|last=Turing|first=Alan M.|authorlink=A. M. Turing|title=Systems of Logic Based on Ordinals|journal=Proceedings of the London Mathematical Society|volume=45|pages=161–228|year=1939|doi=10.1112/plms/s2-45.1.161}} Reprinted in ''The Undecidable'', p.&nbsp;155ff. Turing's paper that defined "the oracle" was his PhD thesis while at Princeton USA.
* {{Cite book | first1 = Wendell | last1 = Wallach | first2 = Colin | last2 = Allen |date=November 2008 | title = Moral Machines: Teaching Robots Right from Wrong | isbn = 978-0-19-537404-9 | publisher = Oxford University Press | location = USA | ref = harv}}
* [[United States Patent and Trademark Office]] (2006), [http://www.uspto.gov/web/offices/pac/mpep/documents/2100_2106_02.htm ''2106.02 **>Mathematical Algorithms: 2100 Patentability''], Manual of Patent Examining Procedure (MPEP). Latest revision August 2006
 
=== Referensi tambahan ===
* {{cite book| last = Bolter| first = David J.| title = Turing's Man: Western Culture in the Computer Age| edition = 1984| year = 1984| publisher = The University of North Carolina Press, Chapel Hill NC| isbn = 0-8078-1564-0 }}, ISBN 0-8078-4108-0 pbk.
* {{cite book| last = Dilson| first = Jesse| authorlink = Dilson| title = The Abacus| edition = (1968,1994)| year = 2007| publisher = St. Martin's Press, NY| isbn = 0-312-10409-X }}, ISBN 0-312-10409-X (pbk.)
* {{cite book| last = van Heijenoort| first = Jean| authorlink = van Heijenoort| title = From Frege to Gödel, A Source Book in Mathematical Logic, 1879–1931| edition = (1967)| year = 2001| publisher = Harvard University Press, Cambridge, MA| isbn = 0-674-32449-8 }}, 3rd edition 1976[?], ISBN 0-674-32449-8 (pbk.)
* {{cite book| last = Hodges| first = Andrew| title = Alan Turing: The Enigma| edition = (1983)| year = 1983| publisher = Simon and Schuster, New York| isbn = 0-671-49207-1 }}, ISBN 0-671-49207-1. Cf. Chapter "The Spirit of Truth" for a history leading to, and a discussion of, his proof.
{{refend}}
 
== Bacaan lebih lanjut ==
{{refbegin}}
* {{cite book| author = Jean Luc Chabert| title = A History of Algorithms: From the Pebble to the Microchip| year = 1999| publisher = Springer Verlag| isbn = 978-3-540-63369-3 }}
* {{cite book| title = Algorithmics.: The Spirit of Computing.| year = 2004| publisher = Addison-Wesley| isbn = 978-0-321-11784-7 }}
* [[Donald Knuth|Knuth, Donald E.]] (2000). ''[http://www-cs-faculty.stanford.edu/~uno/aa.html Selected Papers on Analysis of Algorithms]''. Stanford, California: Center for the Study of Language and Information.
* Knuth, Donald E. (2010). ''[http://www-cs-faculty.stanford.edu/~uno/da.html Selected Papers on Design of Algorithms]''. Stanford, California: Center for the Study of Language and Information.
* {{cite book| last = Berlinski| first = David| title = The Advent of the Algorithm: The 300-Year Journey from an Idea to the Computer| year = 2001| publisher = Harvest Books| isbn = 978-0-15-601391-8 }}
* {{cite book|author = Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein| title = Introduction To Algorithms, Third Edition| year = 2009| publisher = MIT Press | isbn =978-0262033848 }}
{{refend}}
 
== TautanPranala luar ==
{{wiktionary}}
{{wikibooks|Algorithma}}
* {{id}} [http://www.abstrak.web.id/pengertian_algoritma/ Pengertian Algoritma]{{Pranala mati|date=Februari 2021 |bot=InternetArchiveBot |fix-attempted=yes }}
* {{en}} {{springer|title=Algorithm|id=p/a011780}}
* {{dmoz|Computers/Algorithms/|Algorithms}}
Baris 1.022 ⟶ 869:
* {{en}} [http://www.nist.gov/dads/ Dictionary of Algorithms and Data Structures]—[[National Institute of Standards and Technology]]
* {{en}} [http://www.softpanorama.org/Algorithms/index.shtml Algorithms and Data Structures by Dr Nikolai Bezroukov]
; Repositori algoritma
* {{en}} [http://www.cs.sunysb.edu/~algorith/ The Stony Brook Algorithm Repository]—[[State University of New York at Stony Brook]]
* {{en}} [http://www.netlib.org/ Netlib Repository]—[[University of Tennessee]] and [[Oak Ridge National Laboratory]]
* {{en}} [http://calgo.acm.org/ Collected Algorithms of the ACM]—[[Association for Computing Machinery]]
* {{en}} [http://www-cs-staff.stanford.edu/~knuth/sgb.html The Stanford GraphBase]—[[Stanford University]]
* {{en}} [http://www.combinatorica.com/ Combinatorica]—[[University of Iowa]] and [[State University of New York at Stony Brook]]
* {{en}} [http://www.algorithmic-solutions.com/ Library of Efficient Datastructures and Algorithms (LEDA)]—previously from [[Max-Planck-Institut für Informatik]]
* {{en}} [http://www.keithschwarz.com/interesting/ Archive of Interesting Code]
* {{en}} [http://allmyalgorithms.org A semantic wiki to collect, categorize and relate all algorithms and data structures]
; Catatan perkuliahan
* {{en}} [http://compgeom.cs.uiuc.edu/~jeffe//teaching/algorithms/ Algorithms Course Materials]. Jeff Erickson. [[University of Illinois]].
; Komunitas
* {{en}} [https://plus.google.com/communities/101392274103811461838 Algorithms] on [[Google+]]
 
[[Kategori:Algoritma| ]]
[[Kategori:Logika matematika]]
[[Kategori:Ilmu komputer teoritisteoretis]]