Saya disajikan dengan jaringan perbandingan. Bagaimana saya bisa menentukan apakah jaringan perbandingan adalah jaringan penyortiran? Pada gambar di bawah ini ada contoh pemilihan semacam dan jaringan semacam penyisipan. Tujuannya adalah untuk memiliki jaringan perbandingan dan mengurutkan nilai numerik. Jika saya menguji 2 ^ n nilai dalam kasus ini 2 ^ 8. Ini adalah banyak pekerjaan | cara tidak efisien untuk mengujinya. Saya mencari model matematika / bukti untuk memverifikasi ini adalah jaringan penyortiran yang valid.
9
Jawaban:
Secara umum, memverifikasi apakah jaringan perbandingan tertentu memang jaringan penyortiran yang benar adalah masalah lengkap Co-NP. Jika Anda ingin memeriksa dengan pengujian, maka Anda perlu mencoba banyak tes secara eksponensial.
Secara khusus, terdapat jaringan penyortiran yang menyortir semua kecuali satu nilai dengan benar, jadi Anda tidak bisa berharap untuk menguji apakah jaringan itu benar atau tidak hanya dengan memberi makan beberapa input.
Salah satu metode standar adalah untuk menguji apakah dengan benar mengurutkan semua input yang hanya terdiri dari nol dan satu. Jika ya, maka itu akan mengurutkan semua input (bahkan yang tidak terbatas pada nol dan satu). Namun, ini membutuhkan banyak tes secara eksponensial. Selain itu, jumlah tes tidak dapat dikurangi secara signifikan: untuk input nol-satu, dimungkinkan untuk membuktikan bahwa diperlukan setidaknya tes , untuk memastikan bahwa jaringan sortir benar.2n 2n−n−1
Atau, seseorang dapat menggunakan tes di mana input adalah permutasi . Ini mengurangi jumlah tes yang dibutuhkan, tetapi Anda masih membutuhkan banyak tes secara eksponensial. Secara khusus, uji diperlukan dan memadai.1,2,…,n C(n,⌊n/2⌋)−1
Untuk bukti fakta-fakta ini, lihat makalah berikut:
Pada Kompleksitas Komputasi Verifikasi Jaringan Penyortiran Optimal . Ian Parberry. Parle'91 Paralel Arsitektur dan Bahasa Eropa, 1991.
Batas pada ukuran set tes untuk penyortiran dan jaringan terkait . Moon Jung Chung dan B. Ravikumar. Matematika Terpisah, vol 81, hal.1--9, April 1990.
sumber
Mengutip pertanyaan Anda:
Sementara jawaban DW (luar biasa) berkaitan dengan kasus umum, saya akan mempertimbangkan contoh spesifik Anda. Jaringan formulir ini dengan input dapat ditampilkan sebagai jaringan penyortiran dengan induksi: (lihat gambar untuk ilustrasi)n
sumber
Ketika Anda melihat pada jaringan penyortiran umum, Anda mungkin tidak tahu bagaimana membuktikan bahwa itu menyortir setiap urutan nilai (memiliki panjang yang tepat untuk jaringan penyortiran) dengan benar. Tapi saya sudah belajar tentang trik yang bagus ini, bagaimana menyederhanakan tugas:
Prinsip 0-1
Ketika jaringan penyortiran mengurutkan setiap urutan (dengan panjang yang tepat) hanya terdiri dari "0" dan "1" dengan benar, maka itu mengurutkan setiap urutan (dengan panjang yang tepat) dengan benar. Tentu saja "0" dan "1" adalah placeholder untuk setiap elemen berbeda dalam domain jaringan penyortiran.
Jadi, Anda dapat membuat bukti seperti ini:
Pengujian nilai-nilai2n
Untuk pengujian menyeluruh dari jaringan pemilahan dengan panjang Anda biasanya harus menguji semua kombinasi input. Tetapi dengan prinsip 0-1 Anda bisa membawanya ke tes (menguji semua string biner dengan panjang ).n 2n n
Bisakah kita melakukannya dengan lebih murah?
Sayangnya kami mungkin tidak bisa mendapatkan jauh lebih murah daripada pengujian menyeluruh, setidaknya tidak ketika menggunakan mesin Turing untuk membuat bukti. Tentu saja ketika Anda melihat jaringan penyortiran tertentu, Anda mungkin memiliki ide kreatif bagaimana membuat bukti sederhana. Tetapi secara umum algoritma untuk membangun bukti seperti itu sangat kompleks seperti menguji semua string biner. Alasan untuk ini adalah bahwa jaringan penyortiran proofing terkait dengan kelas kompleksitas lengkap NP seperti yang dijabarkan dalam jawaban lainnya.
"Jauh lebih murah" dalam konteks ini berarti "waktu polinomial". Dimungkinkan untuk menemukan algoritma yang dapat melakukannya "sedikit" lebih cepat daripada waktu eksponensial tetapi masih membutuhkan lebih dari waktu polinomial. Lihat komentar sebagai contoh: Menjalankan dalam langkah-langkahnya (sedikit) lebih cepat dari waktu eksponensial tetapi masih (jauh) lebih lambat dari waktu polinomial.2n√
Prospek / Prospek
Apakah otak Anda mesin Turing
Konsekuensi filosofis adalah: Ketika Anda percaya bahwa Anda dapat menemukan bukti kreatif untuk kebenaran setiap jaringan penyortiran, maka Anda juga percaya bahwa otak Anda sangat mungkin bukan mesin Turing.
Pemilahan paralel
"Prinsip 0-1" juga digunakan untuk membuktikan kebenaran algoritma penyortiran paralel. Saya punya (semoga) presentasi yang bagus tentang ini di Github .
Memperbaiki jaringan penyortiran
Jika salah satu string salah diurutkan (sehingga Anda telah membuktikan jaringan penyortiran salah), Anda dapat menggunakan ini untuk membangun jaringan penyortiran tanpa bug itu. Tambahkan saja perbandingan tambahan pada posisi "perbatasan 1-0" dalam string hasil yang salah.
sumber