Paul Erdos berbicara tentang "Buku" di mana Tuhan menyimpan bukti paling elegan dari setiap teorema matematika. Ini bahkan mengilhami buku (yang saya percaya sekarang dalam edisi ke-4): Bukti dari Buku .
Jika Tuhan memiliki buku yang serupa untuk algoritma, menurut Anda algoritma apa yang akan dijadikan kandidat?
Jika memungkinkan, berikan juga referensi yang dapat diklik dan wawasan kunci yang membuatnya berfungsi.
Tolong, hanya satu algoritma per jawaban.
Jawaban:
Union-find adalah masalah yang indah yang algoritma / datastructure terbaiknya ( Disjoint Set Forest ) didasarkan pada tumpukan spaghetti. Meskipun sangat sederhana dan cukup intuitif untuk dijelaskan kepada anak yang cerdas, butuh beberapa tahun untuk mendapatkan ikatan yang kuat pada runtime-nya. Pada akhirnya, perilakunya ditemukan terkait dengan Fungsi Ackermann terbalik, sebuah fungsi yang penemuannya menandai pergeseran perspektif tentang perhitungan (dan pada kenyataannya dimasukkan dalam Hilbert's On the Infinite ).
Wikipedia menyediakan pengantar yang bagus untuk Disjoint Set Forests .
sumber
Pencocokan string Knuth-Morris-Pratt . Delapan baris kode paling licin yang pernah Anda lihat.
sumber
Algoritma Blum, Floyd, Pratt, Rivest, dan Tarjan untuk menemukan k th unsur daftar disortir dalam waktu linear adalah algoritma yang indah, dan hanya bekerja karena jumlahnya tepat untuk cocok Master Teorema. Bunyinya sebagai berikut:
sumber
Binary Search adalah algoritma paling sederhana, indah, dan berguna yang pernah saya temui.
sumber
Saya terkejut tidak melihat algoritma Floyd-Warshall untuk semua-pasangan jalur terpendek di sini:
sumber
Algoritma Euclidean untuk menghitung pembagi umum terbesar (GCD)
sumber
Mungkin terlihat agak sepele (terutama dibandingkan dengan jawaban lain), tapi saya pikir Quicksort sangat elegan. Saya ingat ketika saya pertama kali melihatnya saya pikir itu benar-benar rumit, tetapi sekarang tampaknya terlalu sederhana.
sumber
Pengodean Huffman untuk kompresi data.
sumber
The tes primality Miller-Rabin (dan tes serupa) harus dalam The Book. Idenya adalah untuk mengambil keuntungan dari sifat-sifat bilangan prima (yaitu menggunakan teorema kecil Fermat) untuk secara probabilistik mencari saksi untuk nomor yang tidak menjadi bilangan prima. Jika tidak ada saksi yang ditemukan setelah tes acak yang cukup, jumlah tersebut diklasifikasikan sebagai prima.
Pada catatan itu, tes primality AKS yang menunjukkan PRIMES ada di P pastinya ada di The Book!
sumber
Pengujian identitas polinomial dengan lemma Schwartz-Zippel :
Jika seseorang membangunkan Anda di tengah malam dan meminta Anda untuk menguji dua ekspresi polinomial univariat untuk identitas, Anda mungkin akan menguranginya menjadi jumlah bentuk normal produk dan membandingkannya dengan identitas struktural. Sayangnya, pengurangan bisa memakan waktu eksponensial; itu analog dengan mengurangi ekspresi Boolean menjadi bentuk normal disjungtif.
Dengan asumsi Anda adalah jenis yang suka algoritma acak, upaya Anda berikutnya mungkin akan mengevaluasi polinomial pada titik yang dipilih secara acak untuk mencari contoh tandingan, menyatakan polinom sangat mungkin identik jika mereka lulus tes yang cukup. Lemma Schwartz-Zippel menunjukkan bahwa ketika jumlah poin bertambah, peluang positif palsu berkurang dengan sangat cepat.
Tidak ada algoritma deterministik untuk masalah yang diketahui yang berjalan dalam waktu polinomial.
sumber
Pencarian Pertama Kedalaman . Ini adalah dasar dari banyak algoritma lainnya. Hal ini juga akalan sederhana: Misalnya, jika Anda mengganti antrian dalam implementasi BFS oleh stack, Anda mendapatkan DFS?
sumber
Algoritma Dijkstra : masalah jalur terpendek sumber tunggal untuk grafik dengan biaya jalur tepi tidak negatif. Ini digunakan di mana-mana, dan merupakan salah satu algoritma paling indah di luar sana. Internet tidak dapat dialihkan tanpa itu - itu adalah bagian inti dari protokol routing IS-IS dan OSPF (Open Shortest Path First).
sumber
The Sieve of Eratosthenes , sederhana & intuitif.
Saya juga suka keindahan Algoritma Horner .
sumber
Skema Enkripsi Homomorfik Sepenuhnya Gentry (baik di atas kisi-kisi ideal atau di atas bilangan bulat) sangat indah. Ini memungkinkan pihak ketiga untuk melakukan perhitungan sewenang-wenang pada data terenkripsi tanpa akses ke kunci pribadi.
Skema enkripsi ini disebabkan oleh beberapa pengamatan yang tajam.
Dalam tesisnya, Craig Gentry memecahkan masalah terbuka lama (dan indah) dalam kriptografi. Fakta bahwa ada skema homomorfis sepenuhnya menuntut kita mengakui bahwa ada beberapa struktur yang melekat pada kemampuan komputasi yang mungkin kita abaikan.
http://crypto.stanford.edu/craig/craig-thesis.pdf
http://eprint.iacr.org/2009/616.pdf
http://portal.acm.org/citation.cfm?id=1666420.1666445
sumber
The Cooley-Tukey Algoritma FFT .
sumber
Algoritma Strassen untuk perkalian matriks.
sumber
The Gale-Shapley algoritma pernikahan yang stabil . Algoritma ini serakah dan sangat sederhana, pada awalnya tidak jelas mengapa itu akan berhasil, tetapi kemudian bukti kebenarannya lagi mudah dipahami.
sumber
Algoritme waktu linier untuk membangun susunan sufiks benar-benar indah, meskipun tidak benar-benar menerima pengakuan yang layak untuknya. Http://www.cs.helsinki.fi/u/tpkarkka/publications/icalp03.pdf
sumber
Eliminasi gaussian. Ini melengkapi urutan generalisasi dari algoritma Euclidean GCD ke Knuth-Bendix.
sumber
Saya terkesan ketika saya pertama kali melihat algoritma untuk pengambilan sampel reservoir dan buktinya. Ini adalah tipe puzzle "asah otak" yang khas dengan solusi yang sangat sederhana. Saya pikir itu pasti milik buku, baik untuk algoritma maupun untuk teorema matematika.
Adapun buku itu, ceritanya bahwa ketika Erdös meninggal dan pergi ke surga, ia meminta untuk bertemu dengan Tuhan. Permintaan itu dikabulkan dan untuk pertemuan itu Erdös hanya punya satu pertanyaan. "Bolehkah aku mencari di buku?" Tuhan berkata ya dan memimpin Erdös ke sana. Tentu sangat bersemangat, Erdös membuka buku hanya untuk melihat yang berikut ini.
Teorema 1: ...
Bukti: Jelas.
Teorema 2: ...
Bukti: Jelas.
Teorema 3: ...
Bukti: Jelas.
sumber
Algoritma Kura - kura dan Kelinci . Saya suka karena saya yakin bahwa bahkan jika saya menghabiskan seluruh hidup saya untuk menemukannya, tidak mungkin saya akan menghasilkan ide seperti itu.
sumber
Sebuah contoh yang fundamental dan "sepele" seperti bukti Euclid tentang bilangan prima yang tak terhingga banyaknya:
2-aproksimasi untuk MAX-CUT - Secara independen untuk setiap simpul, tetapkan ke salah satu dari dua partisi dengan probabilitas yang sama.
sumber
Saya selalu menyukai Algoritma Christofides yang memberikan (3/2) -roksimasi untuk metrik TSP. Sebenarnya, panggil aku mudah untuk menyenangkan, tapi aku bahkan menyukai algoritma 2-aproksimasi yang datang sebelumnya . Trik Christofides untuk membuat pohon spanning minimum Eulerian dengan menambahkan pencocokan simpul derajat anehnya (alih-alih menduplikasi semua sisi) adalah sederhana dan elegan, dan hanya perlu sedikit meyakinkan bahwa pencocokan ini tidak lebih dari setengah beratnya. dari tur yang optimal.
sumber
Gabungkan Sortir . Sederhana, elegan, efisien.
sumber
sumber
Algoritma untuk pemrograman linier : Simplex, Ellipsoid, dan metode titik interior.
http://en.wikipedia.org/wiki/Linear_programming#Algorithms
sumber
Algoritma Robin Moser untuk memecahkan kelas tertentu instance SAT. Contoh seperti itu dipecahkan oleh Lovasz Local Lemma. Algoritma Moser memang merupakan de-pengacakan dari pernyataan lemma.
Saya pikir itu adalah beberapa tahun algoritmanya (dan teknik untuk pembuktian kebenarannya) akan dicerna dengan baik dan disempurnakan hingga menjadi kandidat yang layak untuk Algoritma dari Buku .
Versi ini merupakan perpanjangan dari karya aslinya, ditulis dengan Gábor Tardos.
sumber
Algoritma Marcus Hutter yang Tercepat dan Terpendek untuk Semua Masalah yang Didefinisikan Dengan Baik .
Semacam ini bertentangan dengan semangat persembahan lain dalam daftar ini, karena itu hanya kepentingan teoritis dan tidak praktis, tetapi sekali lagi judul semacam mengatakan itu semua. Mungkin itu harus dimasukkan sebagai kisah peringatan bagi mereka yang hanya akan melihat perilaku asimptotik dari suatu algoritma.
sumber
Algoritma X dari Knuth menemukan semua solusi untuk masalah sampul yang tepat . Apa yang begitu ajaib tentang itu adalah teknik yang ia usulkan untuk menerapkannya secara efisien: Dancing Links .
sumber
Saya pikir kita harus memasukkan Schieber-Vishkin , yang menjawab pertanyaan leluhur umum terendah dalam waktu konstan, preprocessing hutan dalam waktu linear.
Saya suka eksposisi Knuth di Volume 4 Fascicle 1, dan renungannya . Dia mengatakan butuh dua hari penuh untuk memahaminya, dan saya ingat kata-katanya:
sumber