Apakah benar-benar mungkin untuk membuktikan batas bawah?

24

Dengan adanya masalah komputasi, apakah tugas menemukan batas bawah untuk perhitungan seperti itu benar-benar mungkin? Saya kira itu bermuara pada bagaimana langkah komputasi tunggal didefinisikan dan model apa yang kita gunakan untuk bukti, tetapi mengingat itu, apakah kita benar-benar membuktikan batas bawah kemudian secara umum? Maksud saya adalah dapatkah kita membuktikan sesuatu seperti "masalah tidak dapat diselesaikan lebih cepat dari waktu " daripada "masalah dapat diselesaikan dalam waktu atau lebih cepat"?Xt(X)Xt(X)

Saya telah mencoba mencari informasi secara khusus tentang batas bawah dan bukti dari mereka, tetapi saya tidak dapat menemukan minat, rekomendasi mengenai buku / makalah / situs web tentang masalah ini?

hsalin
sumber

Jawaban:

19

Kami benar-benar dapat membuktikan hal-hal seperti itu.

Banyak masalah memiliki batas bawah yang sepele, seperti bahwa menemukan minimum satu set angka (yang tidak diurutkan / terstruktur dengan cara apa pun) membutuhkan setidaknya waktu. Buktinya sederhana: algoritma hipotetis yang berjalan dalam waktu tidak dapat memeriksa semua angka dalam input. Jadi jika kita menjalankan algoritma pada beberapa input, kita dapat mengamati bahwa itu tidak pernah memeriksa elemen input tertentu. Mengubah elemen itu ke minimum, kita bisa membuat algoritma gagal.Ω ( n ) o ( n )nΩ(n)o(n)

Batas bawah yang kurang sepele adalah batas bawah untuk menyortir dalam model berbasis perbandingan. Buktinya ada pada baris berikut: diberi input angka , adakemungkinan keluaran (input bisa berupa permutasi dari daftar yang disortir, sehingga output juga bisa berupa permutasi dari input). Jika kita terbatas hanya melakukan perbandingan, maka algoritma kami (rata-rata) perlu melakukan setidaknya perbandingan agar dapat memberikanoutput yang berbeda.nΩ(nlogn)nn!log2(n!)=Ω(nlogn)n!

Batas bawah bahkan bisa lebih kuat. Ada beberapa masalah (terutama masalah ) yang memiliki batas bawah eksponensial. Masalah dalam kelas ini termasuk menghitung strategi optimal untuk permainan seperti catur (umum), catur dan go. Buktinya adalah melalui Teorema Time Hierarchy , yang menyatakan (tunduk pada beberapa batasan pada ):EXPTIMEf

Diberikan fungsi , ada masalah komputasi yang dapat dipecahkan dalam waktu tetapi tidak dapat diselesaikan dalam waktu .fO(f(n))o(f(n)logn)

Jadi pada dasarnya, jika Anda dapat memikirkan fungsi ada masalah yang membutuhkan banyak waktu untuk menyelesaikannya.f

Akhirnya, jalan lain untuk tidak membuktikan batas waktu yang lebih rendah tetapi sesuatu yang lebih kuat menunjukkan ketidakpastian masalah (misalnya berhenti, pasca korespondensi).

Tom van der Zanden
sumber
Ukuran input atau output adalah batas bawah yang paling umum.
Raphael
14

Iya itu mungkin. Contoh klasik adalah fakta bahwa setiap algoritma pengurutan berbasis perbandingan memerlukan perbandingan untuk mengurutkan daftar panjang .Ω(nlogn)n

Namun, batas bawah tampaknya jauh lebih sulit untuk dibuktikan daripada batas atas. Untuk membuktikan bahwa ada algoritma penyortiran yang membutuhkan perbandingan , Anda hanya perlu menunjukkan algoritme seperti itu (merge sort - voila !). Tetapi untuk batas bawah, Anda harus menunjukkan bahwa tidak ada algoritma di kelas tertentu yang dapat menyelesaikan masalah Anda. Kesulitan melakukan itu diilustrasikan oleh fakta bahwa kita hanya tahu bahwa meskipun kita tahu bahwa setidaknya satu dari inklusi itu ketat ( oleh teorema hierarki ruang) dan kebanyakan orang berpikir mereka semua ketat.O(nlogn)

LNLPNPPSPACE,
LPSPACE

Di sisi lain, Ryan Williams memiliki makalah yang bagus (dan pembicaraan, yang saya dengar beberapa kali) yang disebut Algoritma untuk Sirkuit dan Sirkuit untuk Algoritma , di mana ia berpendapat bahwa menemukan batas bawah dan menemukan algoritma tidak secara mendasar semua berbeda. Sebagai contoh, ia mengutip bukti dari ketidakpastian masalah penghentian sebagai contoh dari algoritma (mesin Turing universal) yang digunakan tepat untuk membuktikan batas bawah (ketidakpastian).

David Richerby
sumber
Saya pikir inilah yang saya kejar ".. Anda entah bagaimana harus menunjukkan bahwa tidak ada algoritma dalam kelas tertentu yang dapat menyelesaikan masalah Anda." hal seperti itu, secara umum setidaknya. Ketika @Tom van der Zanden menggambarkan temuan angka minimum yang saya mengerti, tetapi apakah pendekatan itu umum? Maksud saya umum seperti memiliki argumen semacam itu ketika membangun bukti? Terima kasih untuk tautannya juga.
hsalin
1
@ user1288420 Anda tidak sendirian. Jika ada yang bisa melihat secara intuitif bagaimana membuktikan bahwa tidak ada algoritma di kelas tertentu yang dapat menyelesaikan beberapa masalah, kami akan memiliki lebih banyak hasil dengan batas bawah! Biasanya, Anda perlu membuat beberapa properti yang dimiliki oleh setiap algoritma di kelas, dan menunjukkan bahwa properti mencegah beberapa masalah diselesaikan. Sebagai contoh, setiap mesin Turing yang berjalan dalam waktu sublinear memiliki properti yang bahkan tidak dapat membaca semua inputnya. Itu berarti tidak dapat menyelesaikan sebagian besar masalah. Itu sepele; Sayangnya, kasus yang lebih menarik tampaknya sangat sulit.
David Richerby
3

Untuk mengambil contoh sepele, Anda tidak dapat menemukan angka terbesar dari sekumpulan angka tanpa memeriksa semuanya yang membutuhkan waktu linier. Tidak ada bukti besar. Tetapi ada algoritma yang tidak selalu mengharuskan membaca semua data. Contoh yang bagus adalah mencari semua kemunculan pola dalam sebuah string, yang mungkin tidak perlu membaca seluruh string (algoritma Boyer-Moore). Tetapi saya tidak boleh mengulangi apa yang sudah dijawab, mungkin lebih baik daripada saya.n

Namun, ada poin dalam pertanyaan yang menyerukan beberapa komentar lebih lanjut tentang batas bawah (atau batas kompleksitas pada umumnya).

Sebenarnya pilihan apa yang merupakan langkah komputasi tunggal tidak relevan, selama langkah-langkah komputasi dapat dianggap memiliki upperbound yang konstan (dan batas bawah). Hasil kerumitan akan sama karena didefinisikan hingga konstanta. Mengambil 3 perbandingan sebagai operasi unit, atau hanya satu, tidak ada bedanya.

Hal yang sama berlaku untuk ukuran data yang berfungsi sebagai referensi untuk mengevaluasi biaya perhitungan. Mengambil bilangan bulat tunggal, atau dua bilangan bulat sebagai satuan ukuran tidak ada bedanya.

Namun, kedua pilihan tersebut harus terkait.

Anda dapat mempertimbangkan bahwa angka adalah satu unit data jika Anda menganggap bahwa operasi pada bilangan bulat, seperti penambahan atau perbandingan, adalah operasi unit. Anda juga dapat mempertimbangkan bahwa itu adalah unit data karena dibutuhkan digit untuk mewakili angka. Kemudian, tentu saja, penambahan dan perbandingan bukan lagi unit operasi, dan biayanya tergantung pada nilai-nilai operan.nlognO(logn)

Apakah suatu operasi dapat dianggap memiliki biaya satuan terkait erat dengan data apa yang dapat dianggap memiliki ukuran satuan. Dan itu tergantung pada tingkat abstraksi yang Anda pilih untuk model perhitungan Anda.

babou
sumber
Menemukan semua kemunculan suatu pola dalam sebuah string sepele membutuhkan membaca seluruh string: jika polanya adalah "a", Anda tidak dapat menemukan semua kemunculan tanpa memeriksa apakah setiap karakter tunggal dari string.
David Richerby
1
@ DavidRicherby Sebenarnya tidak selalu. Algoritma Boyer-Moore mulai dari akhir pola, sehingga melompat dalam string. Jika kecocokan yang dicoba gagal, itu tidak harus membaca awal dari string. Dan itu juga memiliki optimasi yang mirip dengan algoritma Knuth-Morris-Pratt untuk melewati upaya yang gagal karena struktur pola. Tentu saja, ada pola yang mengharuskan membaca seluruh string.
babou
@ DavidRicherby Mengapa Anda bertanya, Anda tahu itu?
babou
Saya tidak mengerti komentar kedua Anda. Jawaban asli Anda berisi klaim yang salah. Tentu saja saya tahu itu tidak benar: itulah cara saya menunjukkannya! Orang lain mungkin tidak tahu itu salah, jadi itu akan membingungkan mereka untuk meninggalkan jawabannya.
David Richerby
1
@ DavidRicherby Maksud saya adalah Anda mengerti apa yang saya maksud. Saya seharusnya mengatakan mungkin bukan daripada tidak . Ini tidak memerlukan gaya komentar yang membuat pembaca percaya bahwa saya sedang berbicara omong kosong. Dan saat melakukannya, Anda membuat kesalahan ceroboh yang sama persis: dengan menyatakan " Menemukan semua kemunculan pola dalam sebuah string sepele membutuhkan membaca seluruh string ", ketika Anda seharusnya mengatakan " Menemukan semua kemunculan suatu pola dalam sebuah string mungkin memerlukan membaca seluruh string ". Saya hanya bermaksud menyatakan bahwa membaca input mungkin tidak selalu diperlukan, untuk mengurangi contoh saya sebelumnya.
babou