b'\n_START_ARTICLE_\nAlgoritme\n_START_PARAGRAPH_\nDalam matematika dan ilmu komputer, algoritme adalah prosedur langkah-demi-langkah untuk penghitungan._NEWLINE_Algoritme digunakan untuk penghitungan, pemrosesan data, dan penalaran otomatis_NEWLINE_Algoritme adalah metode efektif diekspresikan sebagai rangkaian terbatas_NEWLINE_dari instruksi-instruksi yang telah didefinisikan dengan baik_NEWLINE_untuk menghitung sebuah fungsi._NEWLINE_Dimulai dari sebuah kondisi awal dan input awal (mungkin kosong),_NEWLINE_instruksi-instruksi tersebut menjelaskan sebuah komputasi yang, bila dieksekusi, diproses lewat sejumlah urutan kondisi terbatas_NEWLINE_yang terdefinisi dengan baik, yang pada akhirnya menghasilkan "keluaran"_NEWLINE_dan berhenti di kondisi akhir._NEWLINE_Transisi dari satu kondisi ke kondisi selanjutnya tidak harus deterministik;_NEWLINE_beberapa algoritme, dikenal dengan algoritme pengacakan, menggunakan masukan acak._NEWLINE_Walaupun algorism-nya al-Khawarizmi dirujuk sebagai aturan-aturan melakukan aritmetika menggunakan bilangan Hindu-Arab dan solusi sistematis dan persamaan kuadrat, sebagian formalisasi yang nantinya menjadi algoritme modern dimulai dengan usaha untuk memecahkan permasalahan keputusan (Entscheidungsproblem) yang diajukan oleh David Hilbert pada tahun 1928._NEWLINE_Formalisasi selanjutnya dilihat sebagai usaha untuk menentukan "penghitungan efektif"_NEWLINE__NEWLINE_atau "metode efektif";_NEWLINE__NEWLINE_formalisasi tersebut mengikutkan Godel-Herbrand-Kleene fungsi rekursif-nya Kurt Godel - Jacques Herbrand - Stephen Cole Kleene pada tahun 1930, 1934, dan 1935, kalkulus lambda-nya Alonzo Church pada tahun 1936, "Formulasi 1"-nya Emil Post pada tahun 1936, dan Mesin Turing-nya Alan Turing pada tahun 1936-7 dan 1939._NEWLINE_Dari definisi formal dari algoritme di atas, berkaitan dengan konsep intuituf, masih tetap ada masalah yang menantang.\n_START_SECTION_\nAsal kata\n_START_PARAGRAPH_\n\'Algoritme\' muncul dari \'Algoritmi\', bentuk Latin dari al-Khwarizmi, matematikawan, ahli astronomi, dan ahli geografi dari Persia.\n_START_SECTION_\nFormalisasi\n_START_PARAGRAPH_\nAlgoritme sangat penting bagi cara komputer mengolah data._NEWLINE_Banyak program komputer mengandung algoritme memberikan rincian pada instruksi khusus yang komputer harus lakukan (dengan urutan tertentu) untuk menjalankan pekerjaan tertentu, seperti menghitung gaji karyawan atau mencetak kartu rapor siswa._NEWLINE_Maka, sebuah algoritme bisa dianggap sebagai urutan operasi yang bisa disimulasikan oleh sebuah sistem Turing-lengkap._NEWLINE_Penulis yang mendukung tesis ini termasuk Minsky (1967), Savage (1987), dan Gurevich (2000):_NEWLINE_Minsky: "Tapi kita juga menjaga, dengan Turing ... bahwa setiap prosedur yang "secara alami" disebut efektif, bisa dinyatakan oleh mesin (sederhana)._NEWLINE_Walaupun tampaknya ekstrem, alasan tersebut ... sukar disanggah"._NEWLINE_Gurevich: "... argumen informal Turing untuk menyokong tesis ini membenarkan tesis yang lebih kuat: setiap algoritme bisa disimulasikan oleh sebuah mesin Turing ... menurut Savage [1987], sebuah algoritme adalah sebuah proses penghitungan yang ditentukan oleh sebuah mesin Turing"._NEWLINE_Biasanya, bila sebuah algoritme dihubungkan dengan pengolahan informasi, data dibaca dari sumber masukan, ditulis ke perangkat keluaran, dan/atau disimpan untuk pengolahan selanjutnya._NEWLINE_Data simpanan dianggap sebagai bagian dari keadaan internal dari entitas yang melakukan algoritme._NEWLINE_Pada praktiknya, keadaan tersebut disimpan pada satu atau lebih struktur data._NEWLINE_Untuk beberapa proses komputasi, algoritme harus ditentukan secara teliti: dijabarkan dengan cara ia bakal berlaku untuk semua kemungkinan yang dapat timbul._NEWLINE_Yaitu, setiap langkah tambahan harus secara sistematis dihadapi, kasus-per-kasus;_NEWLINE_Kriteria bagi setiap kasus harus jelas (dan bisa dihitung)._NEWLINE_Karena sebuah algoritme adalah kumpulan dari langkah-langkah yang tepat, urutan dari komputasi selalu penting bagi berfungsinya algoritme._NEWLINE_Instruksi biasanya diasumsikan terdaftar secara eksplisit, dan dijelaskan dimulai "dari atas" dan terus "ke bawah", sebuah gambaran yang dijelaskan secara formal oleh alur kontrol_NEWLINE_Sejauh ini, diskusi tentang formalisasi algoritme telah mengasumsikan premis dari pemrograman imperatif._NEWLINE_Hal ini merupakan konsepsi umum, yang mencoba menjelaskan sebuah pekerjaan dalam makna diskrit dan "mekanis"._NEWLINE_Keunikan dari konsepsi formalisasi algoritme adalah operasi penetapan, mengatur nilai dari sebuah variabel._NEWLINE_Ia berasal dari intuisi "ingatan" sebagai kertas buram._NEWLINE_Contoh operasi penetapan tersebut ada di bawah._NEWLINE_Untuk konsepsi yang lain dari apa yang membentuk sebuah algoritme lihat pemrograman fungsional dan pemrograman logika.\n_START_SECTION_\nImplementasi\n_START_PARAGRAPH_\nKebanyakan algoritme ditujukan untuk diimplementasikan sebagai program komputer._NEWLINE_Namun, algoritme juga diimplementasikan dengan tujuan lain, seperti dalam jaringan saraf biologis (sebagai contohnya, otak manusia yang mengimplementasikan aritmetika atau sebuah serangga yang melihat makanan), dalam sirkuit elektris, atau dalam sebuah perangkat mekanis.\n_START_SECTION_\nAlgoritme Euclid\n_START_PARAGRAPH_\nAlgoritme Euclid muncul sebagai Proposisi II dalam Book VII ("Elementary Number Theory") dari Elements._NEWLINE__NEWLINE_Euclid mengajukan permasalahan: "Ambil dua angka bukan prima, untuk mencari bilangan pembagi terbesar"._NEWLINE_Dia menentukan "Sebuah angka [merupakan] besaran yang terdiri dari unit-unit": angka penghitung, integer positif kecuali 0._NEWLINE_Dan "mengukur" adalah menempatkan ukuran panjang terkecil s dengan tepat (q kali) di antara ukuran terpanjang l sampai sisa r lebih kecil dari panjang terkecil s._NEWLINE__NEWLINE_Dalam dunia modern, sisa r = l - q*s, q sebagai hasil bagi, atau sisa r adalah "modulus", bagian sisa-integer yang tersisa setelah pembagian._NEWLINE_Supaya metode Euclid berhasil, panjang awalnya harus memenuhi dua kebutuhan:_NEWLINE_(i) panjangnya tidak 0, DAN_NEWLINE_(ii) hasil pengurangan harus "lebih", sebuah pengujian harus menjamin bahwa bilangan terkecil dari dua angka adalah hasil pengurangan dari yang terbesar (cara lain, keduanya bisa sama sehingga pengurangan menghasilkan 0)._NEWLINE_Pembuktian asli Euclid mengikutkan kebutuhan yang ketiga: kedua panjang bukanlah bilangan prima._NEWLINE_Euclid menentukan hal ini supaya dia bisa membentuk sebuah bukti reductio ad absurdum bahwa dua pembagi dua angka adalah yang terbesar._NEWLINE__NEWLINE_Walau algoritme Nicomachus sama dengan Euclid, bila kedua bilangan prima maka menghasilkan angka "1" untuk bilangan pembagi terbesar._NEWLINE_Jadi untuk lebih jelasnya algoritme berikut adalah algoritme Nicomachus.\n_START_SECTION_\nProgram yang kurang elegan (inelegan) untuk algoritme Euclid\n_START_PARAGRAPH_\nAlgoritme berikut disebut sebagai versi Euclid dan Nichomachus 4-langkah-nya Knuth, tetapi bukannya menggunakan pembagi untuk menentukan sisa ia menggunakan pengurangan berturut-turut dari panjang terkecil s dari sisa panjang r sampai r kurang dari s._NEWLINE_Deskripsi tingkat-tinggi, diperlihatkan dengan tulisan tebal, diadaptasi dari Knuth 1973:2-4:_NEWLINE_INPUT:_NEWLINE_1 [Kedalam dua lokasi L dan S taruh angka l dan s yang merepresentasikan kedua panjang]:_NEWLINE_ INPUT L, S_NEWLINE_2 [Inisialisasi R: buat supaya sisa panjang r sama dengan panjang awal l]_NEWLINE_ R \xe2\x86\x90 L_NEWLINE_E0: [Pastikan r \xe2\x89\xa5 s.]_NEWLINE_3 [Pastikan angka terkecil dari kedua angka ada dalam S dan yang terbesar di R]:_NEWLINE_  IF R > S THEN_NEWLINE_    isi dari L adalah angka terbesar jadi lewati langkah 4, 5 dan 6:_NEWLINE_    GOTO step 6_NEWLINE_  ELSE_NEWLINE_    tukar isi R dan S._NEWLINE_4 L \xe2\x86\x90 R (langkah pertama ini berlebih, tetapi berguna untuk diskusi nanti)._NEWLINE_5 R \xe2\x86\x90 S_NEWLINE_6 S \xe2\x86\x90 L_NEWLINE_ E1: [Cari sisa]: Sampai sisa panjang r di R kurang dari panjang terkecil s pada S, kurangi angka s dalam S berulang kali dari sisa panjang r dalam R._NEWLINE_7 IF S > R THEN_NEWLINE_   selesai mengukur jadi_NEWLINE_   GOTO 10_NEWLINE_ ELSE_NEWLINE_   ukur lagi,_NEWLINE_8 R \xe2\x86\x90 R - S_NEWLINE_9 [Pengulangan-sisa]:_NEWLINE_   GOTO 7._NEWLINE_E2: [Apakah sisa 0?]: APAKAH (i) pengukuran terakhir adalah sama dan sisa di R adalah 0 program dapat berhenti, ATAU (ii) algoritme harus terus jalan: hasil pengukuran meninggalkan sisa di R kurang dari angka pengukuran dalam S._NEWLINE_10 IF R = 0 THEN_NEWLINE_   selesai jadi_NEWLINE_   GOTO langkah 15_NEWLINE_ ELSE_NEWLINE_   lanjut ke langkah 11,_NEWLINE_E3: [Interchange s dan r]: Sulitnya algoritme Euclid. Menggunakan sisa r untuk mengukur angka terkecil sebelumnya s:; L sebagai lokasi sementara._NEWLINE_11 L \xe2\x86\x90 S_NEWLINE_12 R \xe2\x86\x90 S_NEWLINE_13 S \xe2\x86\x90 L_NEWLINE_14 [Ulang proses pengukuran]:_NEWLINE_   GOTO 7_NEWLINE_OUTPUT:_NEWLINE_15 [Selesai. S berisi faktor persekutuan terbesar]:_NEWLINE_   PRINT S_NEWLINE_DONE:_NEWLINE_16 HALT, END, STOP.\n_START_SECTION_\nProgram elegan untuk algoritme Euclid\n_START_PARAGRAPH_\nVersi algoritme Euclid berikut hanya membutuhkan 6 instruksi inti untuk melakukan 13 langkah pada solusi "inelegan"; parahnya, "inelegan" membutuhkan tipe instruksi lebih banyak._NEWLINE_Diagram alur dari "elegan" bisa dilihat pada bagian atas artikel ini._NEWLINE_Dalam bahasa Basic (tak terstruktur) langkahnya diberi nomor, dan instruksi LET [] = [] adalah instruksi penetapan disimbolkan dengan \xe2\x86\x90._NEWLINE_  5 REM Algoritme Euclid untuk faktor persekuturan terbesar_NEWLINE_  6 PRINT "Masukan dua integer besar dari 0"_NEWLINE_  10 INPUT A,B_NEWLINE_  20 IF B=0 THEN GOTO 80_NEWLINE_  30 IF A > B THEN GOTO 60_NEWLINE_  40 LET B=B-A_NEWLINE_  50 GOTO 20_NEWLINE_  60 LET A=A-B_NEWLINE_  70 GOTO 20_NEWLINE_  80 PRINT A_NEWLINE_  90 END_NEWLINE_Bagaimana cara kerja "Elegan": Sebagai pengganti "pengulangan Euclid" luar, "Elegan" mengulang antara dua pengulangan, pengulangan A > B yang menghitung A \xe2\x86\x90 A - B, dan pengualang B \xe2\x89\xa4 A yang menghitung B \xe2\x86\x90 B - A._NEWLINE_Hal ini bekerja karena, saat yang dikurang M lebih kecil pengurang S ( Selisih = pengurang - yang_di_kurang ), yang_dikurang bisa menjadi s (panjang pengukuran yang baru) dan pengurang bisa menjadi r yang baru (panjang yang akan diukur);_NEWLINE_dengan kata lain "arti" dari pengurangan dibalik.\n_START_SECTION_\nMenguji algoritme Euclid\n_START_PARAGRAPH_\nApakah algoritme berjalan seperti yang penulis inginkan?_NEWLINE_Beberapa kasus uji cukup menentukan fungsi inti._NEWLINE_Sumber pertama_NEWLINE__NEWLINE_menggunakan 3009 dan 884._NEWLINE_Knuth menyarankan 40902, 24140._NEWLINE_Kasus menarik lainnya yaitu dua angka relatif prima 14157 dan 5950._NEWLINE_Tapi kasus pengecualian harus teridentifikasi dan diuji._NEWLINE_Apakah "inelegan" berjalan benar saat R > S, S > R, R = S?_NEWLINE_Sama juga dengan "Elegan": B > A, A > B, A = B?_NEWLINE_(Semuanya benar)._NEWLINE_Apa yang terjadi bila salah satu bilangan nol, atau keduanya nol?_NEWLINE_("Inelegan" terus berjalan pada kedua kasus; "elegan" terus berjalan saat A = 0.)_NEWLINE_Apa yang terjadi bila angka negatif dimasukan?_NEWLINE_Angka desimal?_NEWLINE_Bila angka masukan, misalnya domain dari fungsi yang dihitung oleh algoritme/program, mengikutkan hanya integer positif termasuk 0, maka kegagalan pada nol mengindikasikan bahwa algoritme (dan program instansiasinya) adalah sebuah fungsi parsial bukannya fungsi total._NEWLINE_Kesalahan yang terkenal karena eksepsi adalah kegagalan roket Ariane V._NEWLINE_Bukti dari kebenaran program menggunakan induksi matematika: Knuth mendemonstrasikan penggunaan induksi matematika untuk versi "pengembangan" dari algoritme Euclid, dan dia mengajukan "metode umum yang digunakan untuk membuktikan validitas dari setiap algoritme."_NEWLINE__NEWLINE_Tausworthe mengajukan bahwa sebuah pengukuran dari kompleksitas dari sebuah program adalah panjang dari pembuktian kebenarannya.\n_START_SECTION_\nMenghitung dan meningkatkan algoritme Euclid\n_START_PARAGRAPH_\nElegan (kepadatan) lawan kebaikan (kecepatan): Dengan hanya 6 instruksi dasar, "Elegan" adalah jelas pemenang dibandingkan dengan instruksi "inelegan" dengan 13 instruksi._NEWLINE_Namun, "inelegan" lebih cepat (ia sampai pada HALT dengan langkah lebih sedikit)._NEWLINE_Analisis algoritme_NEWLINE_mengindikasikan kenapa hal tersebut terjadi: "Elegan" melakukan pengujian kondisi dua kali disetiap pengulangan pengurangan, sementara "inelegan" hanya sekali._NEWLINE_Bila algoritme (biasanya) membutuhkan banyak pengulangan, secara rata-rata lebih banyak waktu yang terbuang saat melakukan tes "B = 0?" yang hanya diperlukan saat sisa sudah dihitung._NEWLINE_Bisakah algoritme ditingkatkan?: Bila programmer sudah menilai sebuah program "cocok" dan "efektif"\xe2\x80\x94yaitu, ia menghitung fungsi yang ditujukan oleh penulisnya\xe2\x80\x94maka pertanyaannya menjadi, bisakah ditingkatkan?_NEWLINE_Kepadatan dari "inelegan" bisa ditingkatkan dengan menghilangkan 5 langkah._NEWLINE_Tapi Chaitin membuktikan bahwa memadatkan algoritme tidak bisa diotomatiskan dengan algoritme generalisasi;_NEWLINE__NEWLINE_tapi, ia bisa dilakukan secara heuristik, misalnya dengan pencarian menyeluruh (contohnya bisa ditemukan di Berang sibuk), coba dan gagal, kecerdasan, kedalaman, penggunaan penalaran induktif, dll._NEWLINE_Bisa diamati bahwa langkah 4, 5, dan 6 diulang pada langkah 11, 12, dan 13._NEWLINE_Pembandingan dengan "Elegan" menyediakan petunjuk langkah-langkah tersebut dengan langkah 2 dan 3 dapat dihilangkan._NEWLINE_Hal ini mereduksi jumlah instruksi dasar dari 13 menjadi 8, yang membuatnya "lebih elegan" dari "Elegan" dengan 9 langkah._NEWLINE_Kecepatan "Elegan" bisa ditingkatkan dengan memindahkan tes B=0? keluar dari pengulangan._NEWLINE_Perubahan ini memerlukan penambahan 3 instruksi (B=0?, A=0?, GOTO)._NEWLINE_Sekarang "Elegant" menghitung contoh-angka lebih cepat;_NEWLINE_untuk setiap angka pada A, B dan R, S hal ini selalu merupakan kasus yang membutuhkan analisis yang mendalam.\n_START_SECTION_\nAnalisis Algoritme\n_START_PARAGRAPH_\nSangat penting untuk mengetahui berapa banyak sumber tertentu (seperti waktu dan tempat penyimpanan) secara teoretis diperlukan untuk sebuah algoritme._NEWLINE_Metode-metode telah dikembangkan untuk analisis algoritme untuk mendapatkan jawaban kuantitatif (estimasi);_NEWLINE_sebagai contohnya, algoritme pengurutan di atas memerlukan waktu O(n), menggunakan notasi O besar dengan n sebagai panjang deret (yang akan diurut)._NEWLINE_Setiap saat algoritme hanya perlu mengingat dua nilai: nilai terbesar yang ditemukan, dan posisinya sekarang dideretan input._NEWLINE_Oleh karena itu dikatakan memiliki kebutuhan ruang O(1), jika ruang yang dibutuhkan untuk menyimpan angka masukan tidak dihitung, atau O(n) jika dihitung._NEWLINE_Algoritme berbeda mungkin menyelesaikan pekerjaan yang sama dengan kumpulan instruksi yang berbeda dengan waktu, ruang, atau \'usaha\' lebih sedikit atau banyak dari yang lain._NEWLINE_Sebagai contohnya, algoritme pencairan binari biasanya mengungguli pencarian berderet secara paksa bila digunakan untuk tabel pencarian pada deret terurut.\n_START_SECTION_\nFormal lawan empiris\n_START_PARAGRAPH_\nAnalisis dan kajian algoritme adalah bidang dari ilmu komputer, dan biasanya dilakukan secara abstrak tanpa menggunakan bahasa pemrograman tertentu atau implementasi._NEWLINE_Dalam artian, analisis algoritme mirip dengan bidang matematika lainnya yang mana fokus pada properti yang mendasari algoritme dan bukan pada implementasi tertentu._NEWLINE_Biasanya pseudokode digunakan pada analisis karena merupakan representasi paling umum dan sederhana._NEWLINE_Namun, pada akhirnya, kebanyakan algoritme diimplementasikan di perangkat keras / lunak tertentu dan efisiensi algoritmik mereka akhirnya diuji menggunakan kode yang sebenarnya._NEWLINE_Untuk solusi dari sebuah masalah, efisiensi dari algoritme tertentu mungkin tidak terlalu berpengaruh (kecuali n sangat besar) tetapi bagi algoritme yang dirancang untuk kecepatan interaktif, komersial, atau penggunaan ilmiah jangka panjang ia bisa saja kritikal._NEWLINE_Meningkatkan n dari kecil ke n yang besar biasanya menunjukan ketak efisienan algoritme yang tidak berbahaya._NEWLINE_Pengujian empiris berguna karena bisa membuka interaksi tak terduga yang mempengaruhi performa._NEWLINE_Benchmark bisa digunakan untuk membandingkan potensi kenaikan sebelum/sesudah algoritme setelah optimisasi program dilakukan.\n_START_SECTION_\nEfisiensi eksekusi\n_START_PARAGRAPH_\nUntuk menggambarkan kemungkinan potensi peningkatan bahkan pada algoritme yang sudah teruji, inovasi terbaru, berkaitan dengan algoritme FFT (banyak digunakan di bidang pemrosesan gambar), bisa menurunkan waktu pemrosesan dengan faktor sampai 1.000 untuk aplikasi seperti pencitraan medis._NEWLINE__NEWLINE_Secara umum, peningkatan kecepatan bergantung pada properti khusus dari permasalahan, yang mana sangat umum pada aplikasi praktis._NEWLINE__NEWLINE_Percepatan dengan tingkat seperti itu membolehkan perangkat komputasi yang sering menggunakan pemrosesan gambar (seperti kamera digital dan peralatan medis) menghabiskan daya yang lebih sedikit.\n_START_SECTION_\nBerdasarkan bidang kajian\n_START_PARAGRAPH_\nSetiap bidang sains memiliki permasalahannya sendiri dan membutuhkan algoritme yang efisien. Masalah yang berkaitan di satu bidang terkadang dipelajari bersama. Beberapa contoh yaitu algoritme pencarian, algoritme penggabungan, algoritme numerik, algoritme grafik, algoritme deret, algoritme komputasi geometri, algoritme kombinatorial, algoritmas medis, mesin belajar, kriptografi, algoritme kompresi data dan teknik penguraian._NEWLINE_Terkadang bidang-bidang tersebut saling tumpang tindih, dan perkembangan algoritme di satu bidang bisa meningkatkan bidang lainnya yang terkadang tidak berkaitan. Sebagai contohnya, pemrograman dinamis ditemukan untuk optimisasi konsumsi sumber daya dalam industri, tetapi sekarang digunakan untuk menyelesaikan sejumlah besar permasalahan dalam banyak bidang.\n_START_SECTION_\nBerdasarkan kompleksitas\n_START_PARAGRAPH_\nAlgoritme bisa diklasifikasikan berdasarkan jumlah waktu yang dibutuhkan untuk selesai dibandingkan dengan ukuran inputnya. Ada berbagai varietas: beberapa algoritme 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 algoritme dengan kompleksitas yang berbeda, sementara permasalahan yang lain bisa saja tidak memiliki algoritme atau tidak diketahui algoritmanya yang efisien. Ada juga pemetaan dari beberapa algoritme terhadap permasalahan lain. Karena itu, lebih cocok untuk mengklasifikasikan permasalahan itu sendiri bukannya algoritme menjadi kelas-kelas yang sama berdasarkan kompleksitas dari kemungkinan algoritme terbaik baginya._NEWLINE_Burgin (2005, p.\xc2\xa024) menggunakan definisi algoritme secara umum yang melonggarkan kebutuhan bersama yang keluaran dari algoritme yang menjalankan sebuah fungsi harus ditentukan setelah sejumlah langkah. Dia mendefinisikan kelas super-rekursif dari algoritme sebagai "sebuah kelas algoritme yang mana memungkinkan untuk menghitung fungsi yang tidak bisa dihitung oleh mesin Turing manapun" (Burgin 2005, p.\xc2\xa0107). Hal ini berkaitan dekat dengan kajian dari metode hiperkomputasi.\n_START_SECTION_\nBerdasarkan tipe evaluatif\n_START_PARAGRAPH_\nUntuk menjaga keseimbangan saat mengintegrasikan mesin ke dalam masyarakat, seseorang bisa mengklasifikasikan algoritme berdasarkan tipe dari evaluasi yang mereka lakukan._NEWLINE_Sejumlah filsuf telah berhipotesis bahwa masyarakat diuntungkan dari keragaman evaluatif seperti mereka diuntungkan keragaman jender dan tipe darah (misalnya, Dean 2012, Sober & Wilson 1998) Hertzke & McConkey 1998, dan Bellah 1985)._NEWLINE_Teknologi dapat mengancam ekosistem moral tersebut seperi spesies invasif jika ia mengganggu campuran keragaman._NEWLINE_Wallach & Allen (2008) mengklasifikasikan algoritme pembuat-keputusan menjadi tiga tipe evaluatif: Algoritme bottom-up membuat penilaian tidak terprediksi bagi pemrogram (misalnya, perangkat lunak yang berevolusi)._NEWLINE_Yang lainnya (top-down) dibagi menjadi deontologikal (yang dapat bergantung pada implementasi aturan pemrograman) lawan consequensialis (yang mengandalkan pada memaksimalkan perkiraan pemrograman)._NEWLINE_Sebagai contohnya, sebuah kalkulator standar termasuk deontologikal, sementara mesin pembelajaran untuk perdagangan saham termasuk consequensialis._NEWLINE_Santos-Lang mengganti nama deontologikal dan consequensialis menjadi kelas "institusional" dan "negosiator" dengan tujuan untuk menghindari implikasi bahwa semua teori-teori etika deontologikal dan consequensialis bisa diimplementasikan sebagai algoritme, dan membagi kelas bottom-up menjadi "pengganggu" (algoritme yang tidak terprediksi karena menggunakan generator pengacakan) lawan "relasional" (algoritme yang tidak terprediksi karena efek jaringan)._NEWLINE_Seorang mutator dalam komputasi evolusioner bisa menjadi contoh dari pengganggu, sementara kelas 3 atau 4 dari otomata sellular adalah contoh dari mesin relasional._NEWLINE_Santos-Lang mencatat bahwa algoritme terkadang memiliki subkomponen dari tipe lainnya._NEWLINE_Sebagai contohnya, negosiator perdagangan saham bisa mengimplementasikan sebuah algoritme genetik, dan memiliki mutator pengganggu, dan mutator bisa memiliki subkomponen institusional dan relasional, semua komputasi adalah relasional pada tingkat di jajaran kimiawi (Santos-Lang 2014).\n_START_SECTION_\nEtimologi\n_START_PARAGRAPH_\nKata "Algoritme", atau "Algorisma" pada versi penulisan lain, datang dari nama al-Khwarizmi. dieja dalam Arab klasik sebagai Al-Khwarithmi. Al-khwarizmi (bahasa Persia: \xd8\xae\xd9\x88\xd8\xa7\xd8\xb1\xd8\xb2\xd9\x85\xd9\x8a, 780-850) adalah matematikawan, ahli astronomi, ahli geografi dari 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._NEWLINE__NEWLINE_Sekitar tahun 825, dia menulis risalah dalam bahasa Arab, yang diterjemahkan dalam Latin pada abad ke-12 dengan judul Algoritmi de numero Indorum._NEWLINE_Judul ini artinya "Algoritmi pada bilangan India", di mana "Algoritmi" adalah pelatinan penerjemah dari nama Al-Khwarizmi._NEWLINE__NEWLINE_Al-Khwarizmi dulunya adalah matematikawan yang paling banyak dibaca di Eropa pada akhir Abad Pertengahan, pada umum lewat bukunya yang lain, Aljabar._NEWLINE__NEWLINE_Pada akhir abad pertengahan, algorismus, perubahan dari namanya, berarti "sistem bilangan desimal" yang masih merupakan arti dari kata Inggris modern algorism._NEWLINE_Pada abad ke-17 Prancis kata tersebut berubah, tetapi tidak maknanya, menjadi algorithme._NEWLINE_Inggris mengadopsi Prancis setelahnya, tetapi tidak pada akhir abad ke-19 lah "Algorithm" mengambil makna dari kata Inggris masa sekarang._NEWLINE_Etimologi alternatif mengklaim asal mulanya dari istilah algebra (aljabar) dari makna abad pertengahan "aritmetika Arab" dan arithmos istilah Yunani untuk angka (yang secara harfiah berarti "bilangan Arab" atau "perhitungan Arab")._NEWLINE_Karya algoritme Al-Kharizmi bukan berbentuk seperti pada masa modern sekarang tetapi 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)._NEWLINE_Dalam makna tersebut, algoritima dikenal di Eropa jauh sebelum Al-Kharizmi._NEWLINE_Algoritme paling tua yang dikenal sekarang adalah Algoritme Euklid (lihat juga Pengembangan algoritme Euklid)._NEWLINE_Sebelum ditemukan istilah algorithm orang Yunani menyebutnya anthyphairesis secara harfiah berarti anti-substraksi atau substraksi timbal-balik (untuk bacaan lebih lanjut disini dan ini._NEWLINE_Algoritme dikenal oleh orang Yunani berabad sebelum_NEWLINE__NEWLINE_Euclid._NEWLINE_Bukannya kata algebra orang Yunani menggunakan istilah arithmetica(\xe1\xbc\x80\xcf\x81\xce\xb9\xce\xb8\xce\xbc\xce\xb7\xcf\x84\xce\xb9\xce\xba\xce\xae, yaitu dalam karya Diophantus yang dikenal "bapak dari Aljabar" - lihat juga artikel Wikipedia persamaan Diophantine dan Eudoxos).\n_START_SECTION_\nAsal mula\n_START_PARAGRAPH_\nKata algoritme datang dari nama matematikawan Persia abad ke-9 Abu Abdullah Muhammad ibnu Musa Al-Khwarizmi, yang hasil kerjanya dibangun dari matematikawan India abad ke-7 Brahmagupta._NEWLINE_Kata algorisma awalnya mengacu hanya pada aturan-aturan dalam melakukan aritmetika menggunakan bilangan Hindu-Arab namun berkembang lewat penerjemahan Latin Eropa dari nama Al-Khwarizmi menjadi algoritme pada abad ke-18._NEWLINE_Penggunaan kata tersebut berkembang mengikutkan semua prosedur untuk menyelesaikan masalah atau melakukan unit kegiatan.\n_START_SECTION_\nSimbol diskrit dan yang dapat dibedakan\n_START_PARAGRAPH_\nPenanda-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._NEWLINE_Sampai orang Babilonia dan Mesir menggunakan tanda dan simbol, pada akhirnya bilangan Roma dan abakus berkembang (Dilson, p.\xc2\xa016-41)._NEWLINE_Penanda penghitung muncul dalam sistem bilangan operan aritmetika digunakan dalam mesin Turing dan komputasi mesin Post-Turing.\n_START_SECTION_\nManipulasi simbol sebagai "penampung" bilangan: aljabar\n_START_PARAGRAPH_\nKarya dari Geometer Yunani kuno (algoritme Euklid), matematikawan India Brahmagupta, dan matematikawan Persia Al-Khwarizmi (yang darinya isitlah "algorism" dan "algoritme" diturunkan), dan matematikawan Eropa Barat memuncak dalam notasi Leibniz dari rasiosinator kalkulus (sekitar 1680-an):_NEWLINE_Abad yang baik dan setengah lebih maju dari masanya, Leibniz mengajukan logika aljabar, sebuah aljabar yang akan menentukan aturan-aturan untuk memanipulasi konsep logika dengan cara yang aljabar biasa menentukan aturan untuk manipulasi angka.\n_START_SECTION_\nMatematika selama abad 19 sampai pertengahan abad 20\n_START_PARAGRAPH_\nSimbol dan aturan: Dengan cepat berkembangnya matematika dari George Boole (1847, 1854), Gottlob Frege (1897), dan Giuseppe Peano (1888-1889) mereduksi aritmetika 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"._NEWLINE_Tapi Heijenoort memberi pujian pada Frege (1879): Frege "merupakan karya tulis paling penting mengenai logika. ... yang mana kita lihat sebuah "\'bahasa formula\', yaitu sebuah lingua characterica, sebuah bahasa ditulis dengan simbol-simbol khusus, "untuk berpikir murni", yaiut, bebas dari hiasan retorikal ... dibangun dari simbol-simbol tertentu yang dimanipulasi menurut aturan-aturan terbatas"._NEWLINE__NEWLINE_Karya dari Frege lebih lanjut disederhanakan dan diperkuat oleh Alfred North Whitehead dan Bertrand Russell dalam Principia Mathematical (1910-1913)._NEWLINE_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._NEWLINE__NEWLINE_Hasilnya mengarah ke makalah Kurt Godel (1931) -- dia secara khusus merujuk paradoks pembohong\xe2\x80\x94yang mereduksi aturan dari rekursi pada angka._NEWLINE_Penghitungan Efektif: Dalam usaha untuk menyelesaikan permasalahan keputusan yang didefinisikan oleh Hilbert tahun 1928, matematikawan pertama mendefinisikan apa arti dari "metode efektif" atau "kalkulasi efektif" (misalnya, sebuah kalkulasi yang akan sukses)._NEWLINE_Dalam waktu yang cepat hal berikut muncul: kalkulus-\xce\xbb oleh Alonzo Church, Stephen Kleene, dan J.B. Rosser_NEWLINE_definisi dari "rekursi umum" yang benar-benar diasah dari karya Godel berdasarkan saran dari Jacquard Herbrand (cf. kuliah Godel di Princeton tahun 1934) dan penyederhaan selanjutnya oleh Kleene._NEWLINE__NEWLINE_Church membuktikan_NEWLINE__NEWLINE_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._NEWLINE__NEWLINE_Pembuktian Alan Turing bahwa permasalahan keputusan tidak terpecahkan dengan menggunakan "sebuah mesin [otomatis]"-nya_NEWLINE__NEWLINE_dengan efek yang mirip dengan "formulasi"-nya Post, definisi J. Barkley Rosser tentang "metode efektif" dalam makna "sebuah mesin"._NEWLINE__NEWLINE_Proposal S. C. Kleene dari pelopor "Tesis Church" yang disebutnya "Thesis I",_NEWLINE__NEWLINE_dan beberapa tahun kemudian Kleene menamakan tesisnya "Tesis Church"_NEWLINE__NEWLINE_dan mengajukan "Tesis Turing".\n_START_SECTION_\nSejarah setelah 1950\n_START_PARAGRAPH_\nSejumlah usaha telah diarahkan untuk memperbaiki lebih lanjut definisi dari "algoritme", dan aktivitas tersebut masih terus berjalan karena isu-isu yang mengelilinginya, terutama, fondasi matematika (khususnya tesis Church-Turing) dan filsafat pikiran (khususnya argumen menyangkut kecerdasan buatan)._NEWLINE_Lebih lanjut, lihat karakterisasi algoritme.'