Dua cara menganalisis efisiensi suatu algoritma adalah
- untuk menempatkan batas atas asimptotik pada runtime, dan
- untuk menjalankannya dan mengumpulkan data eksperimental.
Saya ingin tahu apakah ada kasus yang diketahui di mana ada kesenjangan yang signifikan antara (1) dan (2). Maksud saya, baik (a) data eksperimental menunjukkan asimtotik yang lebih ketat atau (b) ada algoritma X dan Y sehingga analisis teoritis menunjukkan bahwa X jauh lebih baik daripada Y dan data eksperimental menunjukkan bahwa Y jauh lebih baik daripada X.
Karena eksperimen biasanya mengungkapkan perilaku kasus rata-rata, saya mengharapkan jawaban paling menarik untuk merujuk pada batas atas kasus rata-rata. Namun, saya tidak ingin mengesampingkan kemungkinan jawaban menarik yang membicarakan batasan yang berbeda, seperti jawaban Noam tentang Simplex.
Sertakan struktur data. Silakan masukkan satu algo / ds per jawaban.
sumber
Jawaban:
Contoh yang paling mencolok tentu saja adalah metode Simplex yang berjalan cepat dalam praktiknya, menunjukkan poli-waktu, tetapi membutuhkan waktu yang eksponensial dalam teori. Dan Spielman baru saja mendapatkan penghargaan Nevanlinna untuk menjelaskan misteri ini.
Secara lebih umum, banyak contoh Integer-programming dapat diselesaikan dengan cukup baik dengan menggunakan IP-solver standar, misalnya lelang kombinatorial untuk sebagian besar distribusi yang dicoba pada input berukuran besar dapat diselesaikan - http://www.cis.upenn.edu/~mkearns /teaching/cgt/combinatorial-auctions-survey.pdf
sumber
Pangkalan Groebner . Waktu berjalan terburuk adalah eksponensial ganda (dalam jumlah variabel). Namun dalam praktiknya, terutama untuk masalah yang terstruktur dengan baik, algoritma F4 dan F5 efektif (yaitu berakhir dengan cepat). Ini masih merupakan bidang penelitian aktif untuk mencari tahu apa dugaan yang tepat bahkan tentang waktu berjalan rata-rata atau yang diharapkan. Dugaan bahwa itu terkait, entah bagaimana, dengan volume Newton polytope dari idealnya.
sumber
Saya tidak tahu apakah ada hasil formal rata-rata / merapikan kerumitan masalah, tetapi saya ingat pernah membaca bahwa ada - mungkin orang lain bisa berpura-pura menunjukkan hasil resmi. Tentu saja, ada banyak bukti eksperimental dan banyak pemecah masalah yang cepat. Saya juga ingin tahu apakah properti ini meluas ke anggota keluarga lengkap GI lainnya.
sumber
Dari David Johnson, perbedaan dalam rasio pendekatan teoritis dan eksperimental: Travelling Salesman Problem: Studi Kasus dalam Optimalisasi Lokal, DS Johnson dan LA McGeoch . Dalam makalah ini mereka memberikan bukti eksperimental asimptotik (karena percobaan berjalan hingga ukuran N = 10.000.000!) Yang menentang asimtotik teoritis: Algoritma "Greedy" atau "Multi-Fragmen" karya Jon Bentley (rasio aproksimasi kasus terburuk setidaknya logN / loglogN) mengalahkan Insertion Terdekat dan MST Ganda, yang keduanya memiliki rasio perkiraan kasus terburuk 2.
sumber
Contoh lain yang belum dipahami dengan baik sampai saat ini adalah waktu berjalan dari algoritma k-means Lloyd , yang (dari sudut pandang praktis) telah menjadi algoritma pengelompokan pilihan selama lebih dari 50 tahun. Hanya baru-baru ini, pada tahun 2009, telah terbukti (oleh Vattani ) bahwa dalam kasus terburuk, algoritma Lloyd membutuhkan sejumlah iterasi yang eksponensial dalam jumlah titik input. Di sisi lain, pada saat yang sama, analisis yang dihaluskan (oleh Arthur, Manthey dan Röglin ) membuktikan bahwa jumlah iterasi yang dihaluskan hanyalah polinomial, yang menjelaskan kinerja empiris.
sumber
Traversal, deque, dan split akibat wajar dari dugaan optimalitas dinamis untuk pohon hamparan adalah contoh dari kesenjangan tersebut. Eksperimen mendukung klaim untuk waktu linier, tetapi tidak ada bukti yang diketahui.
sumber
Ada sedikit masalah dengan pertanyaan itu. Sebenarnya ada lebih dari dua cara menganalisis suatu algoritma, dan salah satu cara teoretis yang telah diabaikan adalah waktu yang diharapkan, bukan waktu yang terburuk. Ini benar-benar perilaku kasus rata-rata ini yang relevan untuk melakukan percobaan. Berikut adalah contoh yang sangat sederhana: Bayangkan Anda memiliki algoritma untuk input ukuran n, yang membutuhkan waktu n untuk setiap input ukuran yang mungkin kecuali untuk satu input spesifik dari setiap panjang yang membutuhkan waktu 2 ^ n. Mendengar run time case terburuk adalah eksponensial, tetapi case rata-rata adalah [(2 ^ n -1) n + (2 ^ n) 1] / (2 ^ n) = n - (n-1) / 2 ^ n yang batas ke n. Jelas kedua jenis analisis ini memberikan jawaban yang sangat berbeda, tetapi ini diharapkan karena kami menghitung jumlah yang berbeda.
Dengan menjalankan percobaan beberapa kali, bahkan jika kami mengambil waktu berjalan terpanjang untuk sampel, kami masih hanya mengambil sampel sebagian kecil dari ruang input yang mungkin, dan jadi jika instans keras jarang terjadi maka kami kemungkinan akan melewatkannya .
Relatif mudah untuk membangun masalah seperti itu: Jika n / 2 bit pertama semuanya nol, daripada menyelesaikan instance 3SAT yang dienkode dengan n / 2 bit terakhir. Kalau tidak tolak. Ketika n bertambah besar, masalah memiliki waktu berjalan yang kira-kira sama dalam kasus terburuk sebagai algoritma yang paling efisien untuk 3SAT, di mana waktu lari rata-rata dijamin sangat rendah.
sumber
Inferensi tipe Damas-Milner terbukti lengkap untuk waktu eksponensial, dan ada kasus yang mudah dibangun dengan ledakan eksponensial dalam ukuran hasilnya. Meskipun demikian, pada sebagian besar input dunia nyata berperilaku secara linier efektif.
sumber
PTAS untuk Steiner tree dalam grafik planar memiliki ketergantungan konyol pada epsilon. Namun ada implementasi yang menunjukkan kinerja yang sangat baik dalam praktiknya.
sumber
Pairing heaps, from [1] - mereka mengimplementasikan heaps, di mana insert dan gabungan memiliki O (log n) kompleksitas yang diamortisasi, tetapi dikira sebagai O (1). Dalam praktiknya, mereka sangat efisien, terutama untuk pengguna gabungan.
Saya baru saja menemukan mereka hari ini ketika membaca Sec. 5.5 dari buku C. Okasaki "Struktur data murni fungsional", jadi saya pikir saya harus membagikan info tentangnya.
[1] Fredman, ML, Sedgewick, R., Sleator, DD, dan Tarjan, RE 1986. Tumpukan pasangan: bentuk baru tumpukan penyesuaian diri. Algorithmica 1, 1 (Jan. 1986), 111-129. DOI = http://dx.doi.org/10.1007/BF01840439
sumber
Terkait dengan komentar ilyaraz tentang cabang dan terikat, Pataki et al. menunjukkan bahwa reduksi cabang dan basis ditambah kisi dapat menyelesaikan hampir semua IP acak dalam polytime.
sumber
Heuristik Lin-Kernighan untuk TSP ("Heuristik yang efektif untuk masalah salesman keliling", Operations Research 21: 489-516, 1973) sangat berhasil dalam praktiknya, tetapi masih kekurangan analisis kasus rata-rata atau perataan untuk menjelaskan kinerjanya . Sebaliknya, ada analisis yang mulus dari heuristik 2-pilihan untuk TSP oleh Matthias Englert, Heiko Röglin, dan Berthold Vöcking (Algorithmica, untuk muncul).
sumber
Ada banyak algoritma cabang dan terikat yang sangat cepat dan efisien untuk berbagai masalah NP-hard yang tidak dapat kita analisis dengan teliti: TSP, pohon Steiner, pengemasan bin dan sebagainya.
sumber