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.wwlognP
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 )wPPO(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).P2nn+1∅