Beberapa algoritma yang rumit ( union-find ) memiliki fungsi Ackermann terbalik yang hampir konstan yang muncul dalam kompleksitas waktu asimptotik, dan waktu terburuk optimal jika istilah Ackermann terbalik yang hampir konstan diabaikan.
Adakah contoh algoritma yang dikenal dengan waktu berjalan yang melibatkan fungsi yang secara fundamental tumbuh lebih lambat daripada inversi Ackermann (mis. Invers fungsi yang tidak setara dengan Ackermann dalam transformasi polinomial atau eksponensial dll.), Yang memberikan waktu kasus terburuk yang paling dikenal kompleksitas untuk memecahkan masalah yang mendasarinya?
reference-request
algorithm-analysis
time-complexity
runtime-analysis
pengguna2566092
sumber
sumber
Jawaban:
Seth Pettie datang dengan algoritma untuk menghitung sensitivitas pohon spanning minimum dalam waktu , meningkatkan algoritma Tarjan yang menghitung sama dalam waktu . (Bandingkan ini dengan algoritma Chazelle untuk menghitung pohon spanning minimum itu sendiri.) Masalah sensitivitas meminta untuk menghitung, untuk grafik yang diberikan dan pohon spanning minimum yang diberikan, dengan seberapa banyak setiap bobot sisi dapat berubah tanpa mengubah pohon rentang minimum.O ( m α ( m , n ) ) O ( m α ( m , n ) )O(mlogα(m,n)) O(mα(m,n)) O(mα(m,n))
(Terima kasih kepada Tsvi Kopelowitz untuk referensi ini.)
sumber
Fungsi yang paling lambat berkembang secara komikal yang pernah secara serius saya lihat digunakan dalam makalah adalah , berapa kali Anda harus menerapkan invers Ackermann untuk menjatuhkan ke beberapa konstanta tetap. Ini digunakan dalam makalah ini pada dugaan deque pada pohon splay .nα∗(n) n
sumber
Ketika Alan Turing menemukan komputer, dulu ada beberapa model untuk komputer yang diusulkan. Turing membuktikan bahwa beberapa (3) dari model-model ini dapat mensimulasikan satu sama lain DAN menghitung fungsi Ackermann, sedangkan model lain dapat mensimulasikan satu sama lain tetapi tidak fungsi Ackermann (sehingga mereka tidak dapat mensimulasikan 3). Oleh karena itu, 3 model ini (Turing Machine, von Neumann dan yang saya tidak tahu), dipilih sebagai arsitektur untuk komputer. Ini tidak berarti fungsi Ackermann adalah batas komputer, tapi saya kira itu sains yang sulit. Saya tidak mengetahui adanya fungsi komputasi yang tumbuh lebih cepat daripada fungsi Ackermann.
Sekarang, saya tidak berpikir ada masalah praktis yang cocok dengan pertanyaan Anda, tapi mungkin kita bisa membuat satu. Kita perlu memberi batasan pada input. Karena kami tidak dapat menggunakan O (n), kami tidak dapat memeriksa seluruh input. Bahkan, kita bahkan tidak dapat memeriksa panjang input karena itu akan menjadi O (log n). Jadi, pertama kita perlu parameter representasi panjang sisa input, misalnya c sehingga Ackermann (c) adalah panjang input. Karena ini juga tidak cocok, kami meminta sebagai nilai pertama dalam input kami parameter c, sehingga bb (c) adalah tentang panjang input, di mana bb adalah fungsi berang-berang yang sibuk. Fungsi ini tidak dapat dihitung tetapi pasti ada bb (c). Kemudian, algoritmenya seperti:
Tujuan dari algoritma ini adalah untuk memeriksa bahwa jika c adalah kebalikan dari bb, jika kemudian panjang input lebih besar dari bb (c).
Jika ada fungsi yang dapat dihitung yang tumbuh lebih cepat dari fungsi Ackermann, saya pikir kita bisa menggunakannya terbalik untuk membuat algoritma yang menjawab pertanyaan Anda pada input apa pun.
sumber