Misalkan saya memiliki poset "S" dan predikat monoton "P" pada S. Saya ingin menemukan satu atau semua elemen maksimal dari S yang memuaskan P.
EDIT : Saya tertarik dalam meminimalkan jumlah evaluasi P .
Algoritma apa yang ada untuk masalah ini dan properti serta operasi tambahan apa yang mereka butuhkan di S?
Bagaimana dengan kasus khusus yang penting, seperti:
- S adalah urutan linier - maka pencarian biner biasa berfungsi, selama Anda memiliki operasi "find middle"
- S adalah sebuah kisi
- S adalah kisi subset
- S adalah kisi multiset
- ...
Dua kasus terakhir tampaknya sangat penting misalnya untuk desain eksperimen - Anda memiliki serangkaian parameter boolean atau nyata, dan Anda ingin menemukan kombinasi terkecil dari mereka yang mereproduksi pola tertentu (misalnya tes gagal).
Jawaban:
Saya belum terlalu memikirkan hal ini, jadi tolong perbaiki saya jika saya salah.
Katakanlah adalah lebar poset.w
Untuk poset yang merupakan gabungan dari rantai menguraikan Anda memerlukan setidaknya evaluasi dari dengan hanya menerapkan standar batas bawah pada kompleksitas query pencarian biner untuk masing-masing rantai.w log n P.w wlogn P
Karena Anda memberikan perbandingan secara gratis, Anda dapat menghitung dekomposisi rantai poset menjadi rantai secara gratis. Melakukan pencarian biner pada setiap rantai untuk mengidentifikasi elemen pertama yang memenuhi . Kemudian pergi ke elemen yang diidentifikasi dan menghapus yang dominan. Jumlah evaluasi adalah . Ini mengidentifikasi semua elemen maksimal, karena mungkin ada paling banyak satu elemen maksimal per rantai.P P O ( w log n )w P P O(wlogn)
TAMBAH: Sebenarnya saya melihat algoritma rekursif sederhana untuk melakukan jauh lebih baik ( ) untuk kisi subset ( EDIT : domotor menggambarkan strategi umum dalam jawabannya). Di sini saya berasumsi adalah monoton ke bawah (yaitu himpunan bagian membentuk himpunan yang lebih rendah), yang saya pikir apa yang Anda maksud. Jadi, inilah algoritme untuk menemukan anggota kelompok yang lebih rendah:2 [ n ] P { X : P ( X ) = 1 }O(n) 2[n] P {X:P(X)=1}
a) Uji . Jika 0, maka berhenti.P(∅)
b) Uji .P({n})
bi) Jika 0, maka kambuh pada (OK, karena tidak ada set yang mengandung bisa di set lebih rendah). n2[n−1] n
b.ii) Jika 1, maka ada anggota himpunan bagian bawah di sublattice . Subkisi ini isomorfik hingga jadi sekali lagi kita bisa kambuh. Lebih tepatnya, kita dapat menjalankan algoritma untuk , tetapi ketika algoritma meminta untuk mengevaluasi , kita mengevaluasi mana .{X:n∈X} 2[n−1] 2[n−1] P(Y) P(X) X=Y∪{n}
Jadi dalam setiap langkah kita mengulang pada sublattice yang setengah dari ukuran aslinya. Secara keseluruhan, kita perlu mengevaluasi paling banyak kali (pada kenyataannya Anda dapat mengimplementasikan algoritma untuk mengevaluasi predikat kali seperti yang ditunjukkan Yoshio, karena Anda hanya perlu memeriksa sekali).P 2n n+1 ∅
sumber
Jika adalah pohon, maka ada algoritma waktu polinomial yang membangun pohon keputusan yang optimal.P
Generalisasi Pencarian Biner: Pencarian di Pohon dan Pesanan Sebagian Seperti Hutan
sumber
Satu makalah baru-baru ini oleh Daskalakis et al menunjukkan bahwa untuk poset ukuran dan lebar , elemen minimal dapat ditemukan dalam waktu . Yang menarik adalah bahwa dalam abstrak mereka, kata merekan w O(wn)
sumber
Jika S adalah bagian dari input, maka masalah menemukan elemen maksimal sudah menjadi `` NP-hard '' (jika kita memikirkan kisi sedemikian sehingga elemen-elemennya adalah n string yang agak panjang), misalnya Anda dapat mengatakan jika CNF (x) tidak benar dan CNF (y) berlaku untuk beberapa CNF tetap.x<y
Juga, mungkin ada banyak elemen maksimal yang memuaskan P, jadi bahkan untuk mengeluarkan semuanya mungkin butuh waktu lama, jadi saya pikir hanya ada harapan untuk menemukan satu yang maksimal.
Secara umum, pencarian biner berfungsi jika Anda dapat memilih elemen secara rekursif sehingga setelah Anda dibiarkan dengan elemen-elemen di atas, atau elemen-elemen di atas dihapus, dan di setiap set seperti itu rasio tetap dari elemen-elemen dihapus.
Misalnya. jika S adalah grid dimensi tetap, maka ada algoritma cepat: Selalu membagi dua satu koordinat sambil menjaga yang lain minimal, jadi tanyakan misalnya pada langkah pertama (n / 2,0, ..., 0).
Salah satu teorema terkait yang penting adalah teorema titik tetap Tarski, di mana alih-alih P Anda memiliki pemetaan monoton dari kisi ke dirinya sendiri. Teorema mengatakan bahwa titik tetap membentuk kisi. Kami membuktikan dengan Jaroslaw Byrka dan Paul Duetting bahwa dalam pengaturan ini jika kisi adalah grid d-dimensi, maka Anda dapat menemukan titik tetap di sekitar waktu di mana algoritma adalah generalisasi sederhana dari pencarian biner.nd
sumber
Untuk masalah menemukan semua elemen maksimal atas kisi himpunan himpunan bagian , ini sama dengan inferensi eksak dari fungsi boolean positif dari variabel boolean. Jika Anda hanya peduli dengan jumlah evaluasi (bukan kompleksitas komputasi), Anda dapat menemukan survei di Penambangan Data dan Penemuan Pengetahuan melalui Metode Berbasis Logika , Bab 10, bagian 10.2.4, atau dalam paragraf terakhir dari bagian 6.1 dari artikel ini , yang saya tunjukkan dengan jawaban ini (berhati-hatilah, sisa artikel ini membahas kompleksitas komputasi, bukan hanya kompleksitas mengevaluasi ).2 [ n ] n P PP 2[n] n P P
sumber