Contoh algoritma di mana istilah orde rendah mendominasi runtime untuk input praktis?

10

Notasi O-besar menyembunyikan faktor konstan, sehingga beberapa algoritma ada yang tidak layak untuk ukuran input yang masuk akal karena koefisien pada term begitu besar.HAI(n)n

Apakah ada algoritma yang dikenal yang runtime-nya adalah tetapi dengan beberapa istilah orde-rendah yang begitu besar sehingga untuk ukuran input yang masuk akal ia sepenuhnya mendominasi runtime? Saya ingin menggunakan algoritme seperti ini sebagai contoh dalam kursus algoritme, karena memberikan alasan yang bagus mengapa notasi O besar tidak pernah terjadi.HAI(f(n))Hai(f(n))

Terima kasih!

templatetypedef
sumber
Algoritma yang pertama mengatur tabel besar dan kemudian melakukan pencarian cepat di tabel untuk setiap item input? Jika tabel cukup besar maka jumlah item harus sangat besar untuk mengimbangi biaya pembuatan tabel. Mesin pencari adalah salah satu contoh, jika adalah jumlah kueri. n
András Salamon
Saya pernah mendengar pemrograman linear seperti ini. Simplex bersifat eksponensial tetapi lebih cepat daripada algoritma polinomial dalam praktiknya.
jmite
1
Saya tidak tahu algoritma apa pun yang sesuai dengan kebutuhan Anda, tetapi saya akan mencari sesuatu yang paling banyak memiliki waktu berjalan linier, karena di luar itu saya akan sangat meragukan istilah yang lebih kecil dapat mendominasi istilah terkemuka untuk input yang paling masuk akal. Tapi mungkin k-way mergesort sesuai dengan kebutuhan Anda, ketika digunakan untuk mengurutkan data besar? Masalahnya adalah untuk meminimalkan akses memori sekunder karena itu menghabiskan banyak waktu - meskipun saya tidak sepenuhnya yakin bahwa itu akan menjadi contoh yang tepat untuk apa yang ingin Anda tunjukkan, dan saya tidak berpikir itu cukup sederhana untuk menjadi ilustratif.
G. Bach
agak mirip dengan algoritma yang kuat terlalu rumit untuk diimplementasikan , juga lihat blog rjlipton tentang algoritma galaksi
vzn

Jawaban:

2

Kriptografi adalah contohnya, jika bersifat merosot. Misalnya, melanggar enkripsi AES adalah - yang harus Anda lakukan adalah menemukan kunci yang tepat di antara angka yang terbatas, atau atau tergantung pada ukuran kunci ( berasumsi bahwa cukup teks plainteks diketahui menentukan kunci secara jelas). Namun bahkan operasi akan mengambil semua komputer hari ini (satu miliar atau sekitar itu, masing-masing melakukan sekitar satu miliar operasi per sceond) lebih dari umur alam semesta (sekitar satu miliar miliar detik).HAI(1)2128219222562128


Cara yang sedikit berbeda untuk mengilustrasikan mengapa big-O bukanlah segalanya adalah dengan mengatakan bahwa kita kadang-kadang menggunakan algoritma yang berbeda untuk ukuran input yang kecil. Misalnya, ambil quicksort. Dengan pivot pilihan yang tepat (yang merupakan bisnis rumit!), Itu . Quicksort beroperasi dengan membagi-dan-menaklukkan: setiap contoh melibatkan banyak penyortiran array kecil. Untuk array kecil, metode kuadratik seperti jenis sisipan berkinerja lebih baik. Jadi untuk kinerja terbaik, quicksort dari array besar melibatkan banyak jenis penyisipan berjalan untuk ukuran kecil.HAI(nlgn)

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Saya tidak berpikir melanggar enkripsi adalah contoh yang masuk akal di sini; satu hal adalah bahwa untuk menganalisis masalah menemukan kunci yang benar secara asimptotik, kita harus mempertimbangkan versi Rijndael yang tersedia secara teoritis dengan ukuran kunci tidak konstan, yaitu memecah kunci untuk kunci ukuran . Kalau tidak, kita bisa saja mengatakan bahwa setiap algoritma yang mengakhiri berkinerja dalam untuk input ukuran tetap. nHAI(1)
G. Bach
@ G.Bach Maksud dari contoh ini adalah tidak layak (yang dikaitkan dengan kompleksitas teori dengan kompleksitas tinggi) meskipun waktu-konstan (dalam hal ukuran ciphertext).
Gilles 'SANGAT berhenti menjadi jahat'
2
Saya tidak berpikir contoh pertama Anda berhasil. Karena hanya ada banyak pilihan untuk diperiksa, runtime algoritma adalah , jadi tidak ada istilah orde rendah yang bertanggung jawab atas runtime penuh. HAI(1)Hai(1)
templatetypedef
1
HAI(1)
1

Dua contoh muncul dari bidang kompleksitas parameter dan algoritma FPT. Ini mungkin tidak persis apa yang Anda cari, tapi begini saja.

Pertimbangkan masalah grafik, seperti 3-COLORING atau HAM-CYCLE. Kedua masalah dapat diekspresikan dalam logika urutan kedua monadik, dan karenanya dapat diputuskan dalam waktu linier grafik dengan treewidth terikat. Ini adalah hasil dari Bruno Courcelle , tetapi algoritma yang dihasilkan jauh dari praktis.

HAI(hal9hal/2)L.HAI(hal2halL.)halL.

Juho
sumber
2
HAI(n)Hai(n)
0

agak terkait dengan pertanyaan Anda adalah algoritma yang diketahui memiliki kinerja yang baik secara teoritis tetapi tidak digunakan pada masalah nyata karena ketidakpraktisan pada contoh yang lebih kecil. dengan kata lain seperti yang Anda minta, "kinerja yang diiklankan" hanya mungkin untuk input besar dalam teori, tidak terlihat dalam aplikasi praktis. ini kadang-kadang tercermin dalam perkiraan Big-Oh, di waktu lain tidak tepat. beberapa algoritma memiliki "kinerja" teoretis yang baik tetapi sangat kompleks secara logis dan belum pernah diterapkan oleh siapa pun, dan oleh karena itu "kinerja" pada ukuran contoh praktis bahkan tidak dikenal, misalnya dengan masalah Maximum Flow .

vzn
sumber
Tetapi apakah itu tidak praktis karena istilah orde rendah mendominasi atau karena konstanta pada syarat orde tinggi itu buruk?
David Richerby
baik, atau kombinasi, akan sulit untuk mengisolasi dalam setiap kasus. efektif / praktis efeknya sama.
vzn
-1

Ini semacam lelucon tetapi memiliki sisi serius ...

HAI(ncatatann)HAI(n2)

David Richerby
sumber
1
Tidak, itu berbeda. Quicksort berguna dalam praktik karena tidak ada istilah kuadratik untuk input tipikal, tidak peduli seberapa besar ukurannya. Jika pilihan pivot buruk untuk tata letak data, quicksort menunjukkan perilaku kuadratik bahkan untuk input kecil.
Gilles 'SANGAT berhenti menjadi jahat'