P vs NP: Contoh instruktif kapan pencarian Brute Force dapat dihindari


8

Untuk dapat menjelaskan masalah P vs NP kepada non-matematikawan, saya ingin memiliki contoh pedagogis tentang kapan pencarian Brute Force dapat dihindari. Masalahnya idealnya harus segera dimengerti dan triknya seharusnya tidak terlalu mudah atau terlalu sulit.

Yang terbaik yang saya hasilkan sejauh ini adalah

SUBSET_PRODUCT_IS_ZERO

Masalahnya mudah dipahami (diberikan satu set bilangan bulat, dapatkah subset dengan produk 0 dibentuk?), Tetapi triknya terlalu mudah (periksa apakah 0 ada di antara angka-angka yang diberikan, yaitu tidak perlu melihat banyak himpunan bagian).

Ada saran?



Apakah Anda menginginkan algoritma yang lebih baik dari pada bruteforce untuk masalah NP-complete atau untuk masalah konyol, seperti subset-product-is-0? Bagaimana dengan trik yang menghasilkan untuk jumlah himpunan bagian, lihat misalnya algoritma horowitz dan sahni di sini rjlipton.wordpress.com/2010/02/05/…2n/2+o(n)
Sasho Nikolov

Mungkin saya tidak mengerti dengan baik pertanyaannya, tetapi jika Anda membutuhkan masalah yang mudah dimengerti dalam P dengan algoritma waktu polinomial "tingkat menengah", maka saya menyarankan kepuasan klasik 2-CNF .
Marzio De Biasi

4
Bagaimana dengan 2-Mewarnai vs 3-Mewarnai?
Serge Gaspers

6
Cara pertanyaan ini ditulis tampaknya mengandaikan bahwa masalah NP-complete hanya dapat diselesaikan dengan pencarian brute force. Itu akan menjadi kesalahan. Misalnya, pencarian brute force naif untuk salesman keliling membutuhkan waktu Sementara itu dapat diselesaikan dengan algoritma pemrograman dinamis non-brute-force dalam batas waktu O yang jauh lebih cepat ( n 2 2 n ) . O(n!)O(n22n)
David Eppstein

Jawaban:


22

Saya merekomendasikan Jenga !

Dengan asumsi Anda memiliki dua pemain yang sepenuhnya logis, bijaksana, dan cekatan, Jenga adalah permainan dua pemain dengan informasi lengkap, seperti Checkers atau Go. Misalkan permainan dimulai dengan tumpukan batu bata, dengan 3 batu bata di setiap level. Untuk sebagian besar permainan, setiap pemain memiliki Θ ( N ) pilihan pada setiap gilirannya untuk langkah selanjutnya, dan dengan tidak adanya kesalahan bodoh, jumlah putaran selalu antara N dan 6 N . Jadi kasar, pohon permainan memiliki N Θ ( N ) menyatakan. Jika Anda menjelajahi pohon permainan dengan kekerasan, Anda mungkin menghabiskan waktu secara eksponensial untuk menemukan langkah kemenangan atau meyakinkan diri sendiri bahwa Anda tidak bisa menang.3NΘ(N)N6NNΘ(N)

Namun pada kenyataannya, Uri Zwick membuktikan pada 2005 bahwa Anda dapat memainkan Jenga dengan sempurna dengan melacak hanya tiga bilangan bulat, menggunakan seperangkat aturan sederhana yang dapat dengan mudah Anda paskan pada kartu bisnis. Tiga angka yang Anda butuhkan adalah

  • jumlah level (tidak termasuk level atas) dengan tiga batu bata.m=
  • jumlah level (tidak termasuk level atas) dengan dua batu bata berdampingan.n=
  • jumlah batu bata di tingkat atas (0, 1, 2, atau 3).t=

m mod 3 n mnmod3mmod3nm

masukkan deskripsi gambar di sini

Di sini II berarti Anda harus memindahkan bata tengah dari setiap 3-layer bagian atas, II- berarti Anda harus memindahkan bata sisi dari 3-layer ke atas, -I- berarti Anda harus memindahkan bata sisi dari 2-layer ke atas, dan bob-omb berarti Anda harus berpikir tentang kematian dan menjadi sedih dan semacamnya . Jika ada lebih dari satu gerakan yang disarankan dalam sebuah kotak, Anda dapat memilih salah satunya. Ini sepele untuk menjalankan strategi ini dalam waktu jika Anda sudah tahu triple , atau dalam waktu jika Anda tidak tahu.( m , n , t ) O ( N )O(1)(m,n,t)O(N)

Moral: Jenga hanya menyenangkan jika semua orang canggung dan / atau mabuk.


Itu contoh pengajaran yang bagus, tapi saya akan memberi +1 untuk referensi Pilgrim saja.
Luke Mathieson

10

Seorang kasir harus mengembalikan sen uang kembalian kepada pelanggan. Mengingat koin yang ia miliki tersedia, dapatkah ia melakukannya dan bagaimana caranya?x

  • Brute force: pertimbangkan semua kemungkinan koleksi koin dan lihat apakah salah satu dari mereka berjumlah hingga .x
  • Non-brute force: lakukan seperti yang dilakukan setiap kasir, dengan pemrograman dinamis.

Ada dua varian masalah:

  1. Mudah : kasir memiliki persediaan tak terbatas untuk semua denominasi.
  2. Sulit: kasir memiliki persediaan koin yang terbatas.

Varian yang mudah dapat diselesaikan dengan algoritma serakah. Yang lebih sulit membutuhkan pemrograman yang dinamis.

Sebenarnya, cara untuk mempresentasikan ini adalah dengan mengusulkan solusi brute force, membuat orang mengerti bahwa itu sangat tidak efisien, dan kemudian bertanya kepada mereka apa yang dilakukan kasir, pertama untuk varian yang mudah, kemudian dalam yang sulit. Anda harus memiliki beberapa contoh yang tersedia dari yang mudah ke yang jahat.


1

Saya pikir saya menemukan contoh yang berguna sendiri!

Mungkin saya agak kabur, tetapi saya mencari masalah yang memenuhi spesifikasi berikut:

  • Masalahnya sendiri harus mudah dijelaskan kepada seseorang yang mempelajari ilmu sosial.
  • Seharusnya memiliki algoritma yang jelas tetapi tidak efektif.
  • Seharusnya memiliki algoritma yang lebih baik yang juga mudah dijelaskan kepada seseorang yang mempelajari ilmu sosial.

Untuk Eulerian Cycle mudah untuk menjelaskan bahwa ini adalah kondisi yang diperlukan bahwa setiap node harus memiliki derajat yang sama, tetapi tidak mudah untuk menjelaskan mengapa ini merupakan kondisi yang cukup.

Ini adalah masalah yang menurut saya sejauh ini paling memenuhi spesifikasi di atas:

FORM_TARGET_SET_WITH_UNIONS

C={S1,S2,...,Sn}

T

TC

Algoritma yang jelas tetapi tidak efektif:

  • 2n
  • T

Algoritma yang lebih baik

  • CT
  • S
  • |S|=|T|YESNO

Ada juga masalah saudari

FORM_TARGET_SET_WITH_INTERSECTIONS

untuk algoritma yang lebih baik

  • CT
  • S
  • |S|=|T|YESNO

Seperti yang Anda lihat, saya mencari sesuatu yang sangat sederhana (hampir sesederhana SUBSET_PRODUCT_IS_ZERO).

Masalahnya juga dapat dikontraskan dengan SUMBER SUBSET dan PRODUK SUMBER, yang NP-lengkap tetapi serupa dalam formulasi mereka. Dalam semua masalah ini orang disajikan dengan koleksi objek dan ditanya apakah operasi pada pemilihan objek-objek ini dapat menghasilkan hasil yang diinginkan.


1
Masalah lain seperti itu adalah primality , Horn-SAT , dan pencocokan maksimum .
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.