Apa itu algoritma
Metode mencari faktor persekutuan terbesar dalam Buku VII Elements karya Euclid, yang ditulis sekitar 2300 tahun lalu, masih berjalan di komputer sampai sekarang.
Metode yang selalu berhasil
Misalkan kamu perlu mencari bilangan terbesar yang habis membagi 1071 dan 462. Kamu bisa mencoba setiap bilangan dari 462 turun sampai 1 dan berhenti di bilangan pertama yang habis membagi keduanya. Cara itu berhasil, tetapi bisa butuh ratusan percobaan. Ada cara yang lebih singkat. Bagi 1071 dengan 462 dan simpan sisanya, 147. Sekarang bagi 462 dengan 147 dan simpan sisanya, 21. Bagi 147 dengan 21: sisanya 0, jadi jawabannya 21. Tiga pembagian, bukan beberapa ratus.
Cara singkat itu adalah algoritma: daftar langkah tepat yang jumlahnya terbatas, yang menerima suatu masukan dan menghasilkan keluaran yang benar. Yang ini adalah algoritma Euclid untuk faktor persekutuan terbesar, dan algoritma ini muncul dalam Buku VII Elements, yang ditulis sekitar tahun 300 SM. Euclid menjelaskannya dengan pengurangan panjang berulang kali, bukan pembagian, tetapi idenya sama, dan versi dengan sisa bagi itulah yang dipakai program sekarang.
function gcd(a, b) {
while (b !== 0) {
const r = a % b; // sisa bagi
a = b;
b = r;
}
return a;
}
console.log(gcd(1071, 462)); // 21Apa yang membuat daftar langkah menjadi algoritma
Buku teks seperti karya Cormen, Leiserson, Rivest, dan Stein menggambarkan algoritma sebagai prosedur yang terdefinisi dengan baik untuk mengubah masukan menjadi keluaran. Ada tiga hal yang terkandung dalam gambaran itu, dan masing-masing penting saat kamu menulis kode.
- Tepat. Setiap langkah hanya punya satu arti. "Bagi a dengan b dan simpan sisanya" itu tepat; "buat bilangannya jadi lebih kecil entah bagaimana" tidak.
- Terbatas. Algoritma harus berhenti. Dalam algoritma Euclid, sisanya selalu lebih kecil daripada bilangan pembaginya, jadi sisa itu mengecil setiap putaran dan pasti mencapai 0.
- Benar. Untuk setiap masukan yang diizinkan, keluarannya adalah jawaban yang benar, bukan hanya untuk contoh yang kamu coba.
Resep masakan sering dijadikan contoh sehari-hari, dan itu contoh yang wajar: bahan adalah masukan, hidangan adalah keluaran, dan langkah-langkahnya berurutan. Bedanya ada pada seberapa banyak yang diisi sendiri oleh pembacanya. Juru masak memutuskan sendiri arti "sejumput". Komputer tidak memutuskan apa pun, karena itulah algoritma untuk komputer ditulis dengan setiap langkah dijabarkan lengkap.
Masalah sama, algoritma berbeda
Satu masalah biasanya punya banyak algoritma yang benar, dan banyaknya pekerjaan yang dilakukan masing-masing bisa sangat berbeda. Untuk faktor persekutuan terbesar dari 1071 dan 462, mencoba setiap bilangan dari 462 ke bawah butuh 442 percobaan sebelum sampai ke 21, sedangkan metode Euclid butuh 3 pembagian. Keduanya benar. Hanya satu yang cepat. Sebagian besar kursus ini membahas pertanyaan kedua itu: setelah sebuah metode benar, berapa langkah yang dibutuhkannya, dan bagaimana jumlah itu bertambah saat masukannya makin besar?
Untuk menjawabnya, ilmuwan komputer menghitung langkah dasar (satu perbandingan, satu pertukaran, satu pembagian), bukan detik. Detik bergantung pada mesinnya. Jumlah langkah hanya bergantung pada algoritma dan masukannya, jadi kamu bisa membandingkan dua metode dengan adil. Lab di bawah menghitung perbandingan untukmu sambil mengurutkan sederet batang. Coba urutan awal yang sama dengan dua metode berbeda dan perhatikan penghitungnya.
Seret untuk memutar. Gulir atau cubit untuk memperbesar.
Masukan, keluaran, dan langkah di antaranya
Sebelum menulis algoritma, tuliskan dengan tepat apa yang masuk dan apa yang harus keluar. Untuk faktor persekutuan terbesar: masukannya dua bilangan bulat positif, dan keluarannya satu bilangan bulat yang habis membagi keduanya, tanpa ada bilangan lebih besar yang juga bisa. Gambaran itu memberi tahu cara menguji hasilnya, dan sering memberi petunjuk tentang langkah-langkahnya. Gambaran itu juga memperlihatkan kasus tepi: bagaimana kalau salah satu bilangan 0? (Perulangan di atas mengembalikan bilangan yang lain, dan itu jawaban yang benar.) Bagaimana kalau kedua bilangan sama? Memikirkan kasus tepi sebelum menjalankan kode bisa menangkap banyak kesalahan.
- Sekitar 300 SM: Elements karya Euclid, Buku VII: metode faktor persekutuan terbesar.
- Abad ke-9: Al-Khwarizmi di Bagdad menulis tentang angka Hindu; nama Latinnya melahirkan kata algoritma.
- 1843: Note G karya Ada Lovelace: langkah-langkah bagi Analytical Engine untuk menghitung bilangan Bernoulli.
- 1945: John von Neumann mengusulkan merge sort.
- 1959: Tony Hoare merancang quicksort di Moskow (diterbitkan 1961).
| algoritma | Daftar langkah tepat yang terbatas, yang mengubah masukan menjadi keluaran yang benar |
| masukan | Data yang menjadi titik awal algoritma |
| keluaran | Hasil yang harus dihasilkan algoritma |
| benar | Memberi keluaran yang benar untuk setiap masukan yang diizinkan |
| terbatas | Selalu berhenti setelah sejumlah langkah |
| faktor persekutuan terbesar | Bilangan bulat terbesar yang habis membagi dua bilangan |
| kasus tepi | Masukan yang tidak biasa, seperti 0, daftar kosong, atau nilai yang sama |
| jumlah langkah | Berapa banyak operasi dasar yang dilakukan algoritma |
- Dengan algoritma Euclid, berapa faktor persekutuan terbesar dari 48 dan 18?
- Berapa pembagian yang dibutuhkan algoritma Euclid untuk 1071 dan 462?
- Manakah yang bukan sifat yang wajib dimiliki setiap algoritma?
- Berhenti setelah jumlah langkah yang terbatas
- Setiap langkahnya tepat
- Memakai komputer
- Memberi keluaran yang benar untuk setiap masukan yang diizinkan
- Mengapa algoritma Euclid selalu berhenti?
- Sisanya selalu lebih kecil daripada pembagi, jadi mengecil sampai 0
- Algoritma itu berhenti setelah 10 putaran
- Komputer menghentikan perulangan secara otomatis
- Bilangannya membesar sampai sama
- Kata algoritma berasal dari nama
- Euclid
- Al-Khwarizmi
- Ada Lovelace
- Alan Turing
- Mengapa ilmuwan komputer menghitung langkah, bukan mengukur waktu dalam detik?
- Detik bergantung pada mesin; jumlah langkah hanya bergantung pada algoritma dan masukan
- Jam tidak akurat
- Langkah selalu lebih cepat
- Detik tidak bisa diukur dalam kode
- Sebuah metode memberi jawaban yang benar untuk lima contoh yang kamu coba. Apakah metode itu benar?
- Ya, lima contoh sudah membuktikannya
- Belum tentu: metode itu harus benar untuk setiap masukan yang diizinkan
- Hanya kalau cepat
- Hanya kalau memakai perulangan
- Apa yang dikembalikan gcd(35, 0) dengan perulangan di bab ini?
- Pada tahun berapa Ada Lovelace menerbitkan catatannya, termasuk Note G?
- 1801
- 1843
- 1945
- 1961
- Urutkan langkah-langkah algoritma Euclid.
- Algoritma adalah daftar langkah tepat yang terbatas dari masukan ke keluaran yang benar.
- Algoritma Euclid mencari faktor persekutuan terbesar dengan sisa bagi berulang.
- Satu masalah bisa punya banyak algoritma benar dengan jumlah langkah yang sangat berbeda.
- Tuliskan masukan, keluaran, dan kasus tepinya sebelum langkah-langkahnya.
- Kata ini berasal dari nama Latin al-Khwarizmi.
Sumber kursus ini (11)
- MIT OpenCourseWare 6.006 Introduction to Algorithms, Spring 2020 (Demaine, Ku, Solomon)
- lecture notes 1 Introduction, 3 Sorting, 9 Breadth-First Search, 10 Depth-First Search (ocw.mit.edu/courses/6-006-introduction-to-algorithms-spring-2020/pages/lecture-notes) and Fall 2011 lecture 13 BFS notes (ocw.mit.edu/courses/6-006-introduction-to-algorithms-fall-2011)
- Cormen, Leiserson, Rivest, Stein, Introduction to Algorithms (MIT Press)
- with the CLRS-based Khan Academy algorithms unit by Thomas Cormen and Devin Balkcom of Dartmouth (khanacademy.org/computing/computer-science/algorithms: binary search, selection sort analysis, merge sort, quicksort overview and analysis)
- MacTutor History of Mathematics, Al-Khwarizmi (mathshistory.st-andrews.ac.uk/Biographies/Al-Khwarizmi: word algorithm from the Latin title Algoritmi de numero Indorum)
- D. E. Joyce, Euclid's Elements Book VII Propositions 1 and 2 (mathcs.clarku.edu/~djoyce/elements/bookVII)
- Wolfram MathWorld, Merge Sort (mathworld.wolfram.com/MergeSort.html: proposed by John von Neumann in 1945, after Knuth 1998 p. 159)
- Stanford CS "Tony Hoare: Quicksort" (cs.stanford.edu/people/eroberts/courses/soco/projects/2008-09/tony-hoare/quicksort.html: devised while a student at Moscow State University for Russian-English machine translation with a tape dictionary, programmed in Algol 60 and published 1961; the year 1959 from the Wikipedia Quicksort article and its cited sources)
- Bodleian Libraries, Ada Lovelace (blogs.bodleian.ox.ac.uk/adalovelace: 1843 paper, Note G Bernoulli numbers)
- Fourmilab text of Menabrea's Sketch with Lovelace's notes (fourmilab.ch/babbage/sketch.html)
- Seven Bridges of Konigsberg (Euler 1736) and Tower of Hanoi (Edouard Lucas, 1883) checked against the Wikipedia articles and their cited sources.
Diperiksa: 2026-10-17