Sangat sering, jika waktu berjalan suatu algoritma adalah ekspresi yang rumit, algoritma itu sendiri juga rumit dan tidak praktis. Setiap akar pangkat tiga dan faktor dalam waktu berjalan asimptotik cenderung menambah kompleksitas pada algoritma dan juga menyembunyikan faktor konstan pada waktu berjalan.
Apakah kita memiliki contoh mencolok di mana aturan praktis ini gagal?
Tentu saja mudah untuk menemukan contoh - contoh algoritma yang sangat sulit diimplementasikan walaupun mereka memiliki waktu berjalan terburuk yang sangat sederhana. Tapi bagaimana dengan yang sebaliknya?
Apakah kita memiliki contoh algoritma deterministik yang sangat sederhana dan praktis yang mudah diterapkan tetapi kebetulan memiliki ekspresi yang sangat rumit sebagai waktu berjalan asimptotik terburuknya?
Harap perhatikan kata kunci "deterministik" dan "kasus terburuk"; analisis algoritma acak sederhana cukup mudah menyebabkan ekspresi rumit.
Tentu saja apa yang "rumit" adalah masalah selera. Lagi pula, saya lebih suka melihat ekspresi yang terlalu jelek untuk dimasukkan ke dalam judul makalah Anda. Dan saya lebih suka fungsi rumit dari satu parameter alami (ukuran input, jumlah node, dll.).
PS. Saya pikir saya tidak akan menjadikan ini "daftar pertanyaan besar", dan bukan CW. Saya ingin menemukan satu contoh bagus (jika ada sama sekali). Karena itu tolong posting jawaban lain hanya jika Anda berpikir itu "lebih baik" daripada jawaban sejauh ini.
sumber
Jawaban:
Contoh terbaik yang dapat saya pikirkan adalah sebuah algoritma (dijelaskan di bawah) untuk menghitung tingkat- dalam susunan garis n dalam bidang, yaitu garis poligon yang dibentuk oleh titik-titik yang memiliki garis k persis secara vertikal di atasnya. Ini bukan algoritma paling efisien yang dikenal untuk masalah ini. Ada algoritma yang lebih efisien dengan kompleksitas yang lebih sederhana, tetapi saya percaya ini lebih praktis daripada kebanyakan (jika tidak semua). Analisisnya mungkin tidak ketat, karena menggunakan kompleksitas k- level , yang merupakan masalah terbuka yang terkenal (saya pikir semua istilah lain dalam analisis ini ketat). Meski begitu, saya ragu peningkatan batasan untuk k -level akan membuat waktu berjalan lebih sederhana. Saya akan menganggap k =k n k k k untuk menulis kompleksitas sebagai fungsi dari n sendiri.k = n / 2 n
Algoritma ini didasarkan pada paradigma garis menyapu dan menggunakan dua turnamen kinetikary sebagai antrian prioritas kinetik. Penyisipan dan penghapusan dilakukan ketika garis berjalan di atas atau di bawah tingkat k , memindahkan garis dari satu turnamen kinetik ke yang lain. Oleh karena itu, ada O ( n 4 / 3 ) sisipan dan penghapusan (menggunakan terikat untuk Dey k kompleksitas -tingkat). Setiap acara diproses di O ( log n ) waktu dan ada O ( n 4 / 3 α ( n( logn ) k O ( n4 / 3) k O ( logn ) peristiwa ( α ( n ) berasal dari kompleksitas amplop atas pengaturan segmen garis, sedangkan log n / log log n berasal dari ketinggianpohon log ( n log ) ). Total waktu berjalan adalahO ( n4 / 3log α ( n )n / logcatatann ) α ( n ) catatann / logcatatann ( logn )
Silakan periksa manuskrip Timothy Chan http://www.cs.uwaterloo.ca/~tmchan/lev2d_7_7_99.ps.gz untuk rincian dan referensi lebih lanjut. Faktor dapat dihapus dengan menggunakan turnamen kinetik biner (intead of ( log n ) -ary), tetapi sebenarnya mempercepat antrian prioritas kinetik dalam tes yang saya lakukan. Kompleksitas harus menjadi sedikit lebih buruk dan lebih buruk (sementara algoritme akan tetap praktis) jika tumpukan kinetik digunakan sebagai pengganti turnamen kinetik ( log di dalam akar kuadrat akan muncul).1 / logcatatann ( logn ) catatan
sumber
Operasi struktur data union-find tampaknya memenuhi kriteria Anda:
http://en.wikipedia.org/wiki/Disjoint-set_data_structure
sumber
Algoritma simpleks. Mudah diimplementasikan dan bekerja luar biasa dalam praktik tetapi berantakan untuk dianalisis secara teoritis.
sumber
Saya tidak yakin apakah Anda menganggap ini "praktis" tetapi ini adalah masalah terbuka yang terkenal. Paul Erdos berkata tentang dugaan Collatz: "Matematika belum siap untuk masalah seperti itu"
sumber
Contoh ini, walaupun tidak memenuhi surat permintaan Anda, mungkin menarik karena itu memiliki kedekatan spiritual. Secara khusus, pertanyaan tentang menyortir tumpukan pancake dan pancake yang dibakar dengan pembalikan.
http://en.wikipedia.org/wiki/Pancake_sorting
Salah satu bidang aplikasi adalah untuk biologi komputasi (genetika) di mana pertanyaan tentang penyusunan kembali genom dapat ditulis dalam hal jarak antara permutasi menggunakan pembalikan potongan permutasi yang tunduk pada berbagai aturan.
sumber