Ketika kami mencoba membuat algoritma untuk masalah baru, bagi-dan-taklukkan (menggunakan rekursi) adalah salah satu pendekatan pertama yang kami coba. Tetapi dalam beberapa kasus, pendekatan ini tampaknya tidak membuahkan hasil karena masalahnya menjadi jauh lebih rumit ketika inputnya bertambah.
Pertanyaan saya adalah: adakah masalah yang bisa kita buktikan bahwa pendekatan membagi dan menaklukkan tidak dapat membantu untuk menyelesaikannya? Pada baris-baris berikut saya mencoba membuat ini lebih formal.
Mari menjadi masalah tertentu yang input memiliki ukuran (misalnya masalah yang menerima input array nomor). Misalkan kita memiliki algoritma rekursif untuk menyelesaikan . The runtime rekursif dari algoritma yang dihitung dengan asumsi oracle yang dapat memecahkan untuk setiap dalam waktu yang konstan. Sebagai contoh:
- Runtime rekursif pencarian biner adalah , karena hanya menggunakan perbandingan dan dua panggilan rekursif.
- Elemen maksimum dalam array dapat ditemukan dalam waktu rekursif .
- Runtime rekursif dari jenis gabungan adalah , karena langkah penggabungan.
Waktu rekursif biasanya lebih kecil dari runtime yang sebenarnya, yang mencerminkan fakta bahwa algoritma rekursif lebih sederhana daripada solusi non-rekursif langsung untuk masalah yang sama.
Sekarang pertanyaan saya adalah:
Apakah ada masalah yang dapat diselesaikan dalam waktu , tetapi terbukti tidak memiliki algoritma rekursif dengan runtime rekursif asimtotik kurang dari ?
Beberapa varian spesifik dari pertanyaan ini adalah:
- Apakah ada masalah dalam yang tidak memiliki algoritma dengan runtime rekursif ? (Mungkin menyortir?)
- Apakah ada masalah dengan algoritma eksponensial yang tidak memiliki algoritma dengan runtime rekursif polinomial?
EDIT: bertentangan dengan dugaan saya, pengurutan memiliki algoritma dengan runtime rekursif P O ( . Jadi masih terbuka, apakah ada masalah di yang tidak memiliki algoritma dengan runtime rekursif .
sumber
Jawaban:
Iya. Perhatikan bahwa jika bahasa penghitungan memiliki "algoritma rekursif" dengan "runtime rekursif" polinomial, maka itu dalam P. Ada bahasa penghitungan dalam E ∖ P oleh argumen diagonalisasi standar.
Ini mungkin tergantung pada model komputasi, tetapi saya ragu ini diketahui, mengingat bahwa teorema hierarki waktu untuk mesin dua-pita Turing tidak cukup kuat untuk membedakan, katakanlah, O ( n 2 ) waktu dan o ( n 2 ) waktu bahkan tanpa memberikan yang terakhir waktu akses konstan ke jawaban pada contoh yang lebih kecil.
Komentar acak pada pertanyaan Anda di pos ini:
sumber
Setiap pertanyaan yang memiliki jawaban rekursif memiliki jawaban berulang dan sebaliknya.
Algoritma rekursif apa pun dapat ditulis ulang dengan cara iteratif dan sebaliknya.
Karenanya, pertanyaan Anda tidak bagus.
sumber
Saya tidak yakin apakah saya benar memahami gagasan Anda tentang "kompleksitas rekursif".
Mari (secara wajar) Asumsikan bahasa pemrograman yang berisi skema untuk rekursi primitif yaitu di mana orang dapat mendefinisikan fungsi darif
Jika semua asumsi saya terpenuhi, maka contoh yang Anda cari tidak bisa menjadi rekursif primitif.
sumber