Bagaimana saya tahu jika jaringan perbandingan macam?

9

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. Jaringan penyortiran berdasarkan penyisipan

gogasca
sumber
2
Apa yang Anda cari, baca, atau coba? Apa yang menghalangi Anda? Semakin tepat pertanyaan, semakin baik jawabannya. Apakah pertanyaan Anda tentang jaringan perbandingan sewenang-wenang, yaitu prosedur umum untuk menentukan apakah jaringan perbandingan sewenang-wenang adalah jaringan pengurutan? Atau pertanyaan Anda tentang disgram yang diberikan.
babou
2
Anda dapat menggunakan prinsip nol satu: jaringan penyortiran benar jika bekerja pada semua input nol satu.
Yuval Filmus
@YuvalFilmus Itu adalah tes eksponensial (dalam jumlah input). Apakah ini masalah lengkap NP?
babou
@ Babou saya tidak tahu. Dalam hal ini praktis.
Yuval Filmus
ide yang jelas adalah pendekatan empiris, cukup pertimbangkan aksinya pada permutasi acak [1..n], amati hasilnya, apakah itu akan gagal atau berhasil, jika berhasil Anda memiliki pendekatan yang hampir-bukti ...
vzn

Jawaban:

10

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.2n2nn1

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,,nC(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.

DW
sumber
6

Mengutip pertanyaan Anda:

Saya mencari model matematika / bukti untuk memverifikasi ini adalah jaringan penyortiran yang valid.

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

  1. n=1 input selalu diurutkan;
  2. Asumsikan bahwa jaringan ukuran dari formulir ini adalah jaringan penyortiran, dan pertimbangkan jaringan ukuran . n1n
    1. "Diagonal" paling kiri akan selalu benar membawa elemen terbesar ke posisi ke- (dalam kasus Anda, );nb8
    2. Anda dibiarkan dengan jaringan yang lebih kecil dan serupa dengan elemen tersisa ;n1
    3. Jaringan yang lebih kecil ini akan mengurutkan semua elemen yang tersisa dengan hipotesis induktif.

Ilustrasi bukti

jadhachem
sumber
5

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:

  1. Ambil dua elemen berbeda dari domain jaringan sortir dan panggil mereka "0" dan "1", sehingga "0" <"1"
  2. Bangun semua string biner dengan panjang yang tepat dari jaringan penyortiran
  3. Dalam string ini gantikan 0-bit dan 1-bit dengan "0" dan "1"
  4. Terapkan string ini ke jaringan penyortiran
  5. Setiap string harus diurutkan menjadi sekitar 000..01 ... 1

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 ).n2nn

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.

stefan.schwetschke
sumber
Nitpick: bahkan jika P! = NP, (co-) NP-kelengkapan tidak menghalangi keberadaan algoritma sub-eksponensial, katakan dengan runtime di . (Algoritma semacam itu ada untuk banyak masalah NP-complete.)O(2n)
Raphael
@Raphael Jika saya melakukannya dengan benar, P! = NP seharusnya hanya melarang solusi "polinomial" untuk (co-) masalah NP-complete, yaitu solusi di mana runtime (dan penggunaan memori) terikat oleh istilah polinomial untuk input panjang yang sewenang-wenang. Jadi saya hanya perlu memeriksa apakah istilah yang Anda berikan lebih besar daripada polinomial apa pun untuk nilai besar sembarang . Baik? n
stefan.schwetschke
Sesuatu seperti itu , ya. (Saya membaca jawaban Anda seperti "inilah cara melakukannya dalam waktu yang eksponensial, dan kami mungkin tidak bisa melakukan yang lebih baik karena ini merupakan co-NP-hard". Itu non-sequitur, maka komentar saya.)
Raphael