Algoritma: Perbedaan antara revisi
Konten dihapus Konten ditambahkan
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:
[[
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>
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>
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>
==
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>
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>
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:
{{blockquote|''Haec algorismus ars praesens dicitur, in qua / Talibus Indorum fruimur bis quinque figuris.''}}
yang bermakna:
{{blockquote|Algorisme adalah ilmu yang saat ini kita gunakan untuk menghitung dengan angka-angka India, yang jumlahnya ada dua kali lima (sepuluh).}}
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>
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.
== 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")
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
== 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
<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
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,
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>
; '''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 [[
== Algoritma komputer ==
[[
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"
:Chaitin: "... sebuah program adalah 'elegan'', maksud saya adalah ia merupakan program terkecil untuk menghasilkan keluaran."
Chaitin membuka definisinya dengan: "Saya akan perlihatkan bahwa anda tidak dapat membuktikan sebuah program adalah 'elegan'"
''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>
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
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
<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>
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 [[
</ref>
Baris 281 ⟶ 218:
<ref>
{{cite book
|
|
|
|
|
|
|
|
</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
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>
Tausworthe menambahkan tiga [[Teorema program terstruktur|struktur kanon Bohm-Jacopini]]:
<ref>
SEQUENCE, IF-THEN-ELSE, dan WHILE-DO, dengan dua lagi: DO-WHILE dan CASE.
<ref>
Keuntungan dari program terstruktur adalah ia cocok dengan [[pembuktian kebenaran]] menggunakan [[induksi matematika]].
<ref>
Baris 308 ⟶ 244:
</ref>
''Simbol diagram alur
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 ===
[[
Salah satu dari algoritma sederhana adalah menemukan bilangan terbesar dalam sebuah deretan angka (tak berurut).
Solusinya membutuhkan pemeriksaan setiap angka dalam deret,
Dari hal ini munculah algoritma sederhana, yang bisa dinyatakan dalam kalimat bahasa deskripsi tingkat-tinggi, sebagai:
Baris 349 ⟶ 285:
{{Further2|[[Algoritma Euklid]]}}
[[
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)
<ref>
"'Biarkan CD, mengukur BF, meninggalkan FA kurang darinya.'
Baris 383 ⟶ 319:
==== Contoh ====
[[File:Euclids-algorithm-example-1599-650.gif | 350px |
<
650 = 299*2 + 52
299 = 52*5 + 39
52 = 39*1 + 13
39 = 13*3 + 0
</
==== Bahasa komputer untuk algoritma Euclid ====
Hanya beberapa ''tipe'' instruksi yang dibutuhkan untuk mengeksekusi
* 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|
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,
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,
{{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)|
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
</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"
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
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)
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 }}
, Kyoto, January 2012.
Lihat juga [http://groups.csail.mit.edu/netmit/sFFT/ sFFT Web Page].</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]].
; Logical
: Sebuah algoritma bisa dilihat sebagai [[Penalaran deduktif|logika deduksi]] terkontrol. Pernyataan ini diekspresikan sebagai: '''Algoritma = logika + kontrol'''.
; Serial, paralel atau terdistribusi
: Algoritma biasanya dibicarakan dengan asumsi bahwa komputer menjalankan satu instruksi algoritma setiap waktu.
; 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.
; [[Algoritma quantum]]
: Berjalan di model realistik dari [[komputasi quantum]].
== Paradigma secara rancangan ==
Baris 620 ⟶ 554:
; [[Pencarian paksa]] atau pencarian mendalam
: Ini merupakan
|
|
|
|
|
|
|
|
|
|
; 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.
; 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>
# [[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,
; [[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|
=== 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.
[[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.
;
: Sebuah [[algoritma rakus]] mirip dengan [[pemrograman dinamis|algoritma pemrograman dinamis]],
; Metode heuristik
Baris 674 ⟶ 596:
=== Berdasarkan bidang kajian ===
{{
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,
=== Berdasarkan kompleksitas ===
{{
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.
=== Berdasarkan tipe 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
* Sebuah algoritma dalam bentuk dari [[persamaan diferensial]] yang beroperasi secara berkelanjutan terhadap data, berjalan dalam sebuah [[komputer analog]].
<ref>{{cite book
|
|
|
|
|
|
|
== Isu legalitas ==
:''
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
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="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>
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",
<ref>{{cite book
|
|
|
|
|
|
|
}}</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
Pada abad ke-17 Prancis kata tersebut berubah,
Inggris mengadopsi Prancis setelahnya,
<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 "
Karya algoritma Al-Kharizmi bukan berbentuk seperti pada masa modern sekarang
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}}
=== 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.
Penanda penghitung muncul dalam [[sistem bilangan operan]]
=== 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
<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
''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."
=== 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
<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
''Penghitungan Efektif'': Dalam usaha untuk menyelesaikan [[permasalahan keputusan]] yang didefinisikan oleh Hilbert tahun 1928, matematikawan pertama mendefinisikan apa arti dari "
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 "
<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
[[Emil Post]] (1936) mendeskripsikan aksi dari sebuah "komputer" (manusia) sebagai berikut:
:"... dua konsep ikut serta: yaitu sebuah ''simbol ruang'' dimana pekerjaan
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]".
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
:"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."
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."
Beberapa tahun kemudian, Turing mengembangkan
:"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".
=== J. B. Rosser (1939) dan S. C. Kleene (1943) ===
''[[J. Barkley Rosser]]'' mendefinisikan '
:"'
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
=== 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
* [[Numerical Mathematics Consortium]]
* [[Teori komputasi]]
Baris 949 ⟶ 845:
{{colend}}
==
{{Reflist|30em}}
==
{{refbegin|30em}}
* Axt, P. (1959) On a Subrecursive Hierarchy and Primitive Recursive Degrees, ''Transactions of the American Mathematical Society'' 92, pp. 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|
* {{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|
* {{cite book|
* 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. 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. 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.
{{refend}}
==
{{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]
[[Kategori:Algoritma| ]]
[[Kategori:Logika matematika]]
[[Kategori:Ilmu komputer
|