Je n'y ai pas beaucoup réfléchi, alors corrigez-moi si je me trompe.
Disons que est la largeur du poset.w
Pour le poset qui est l'union de chaînes disjointes, vous avez besoin d'au moins évaluations de en appliquant simplement la borne inférieure standard sur la complexité des requêtes de recherche binaire à chaque chaîne.w log n PwwlognP
Puisque vous donnez des comparaisons gratuitement, vous pouvez calculer une décomposition en chaîne du poset en chaînes gratuitement. Faites une recherche binaire sur chaque chaîne pour identifier le premier élément qui satisfait . Passez ensuite en revue les éléments identifiés et supprimez ceux qui sont dominés. Le nombre d'évaluations de est . Ceci identifie tous les éléments maximaux, car il peut y avoir au plus un élément maximal par chaîne.P P O ( w log n )wPPO(wlogn)
AJOUT: En fait, je vois un algorithme récursif simple pour faire beaucoup mieux ( ) pour le réseau de sous-ensembles ( EDIT : domotor a décrit la stratégie générale dans sa réponse). Ici, je suppose que est monotone vers le bas (c'est-à-dire que les sous-ensembles forment un ensemble inférieur), ce qui est, je pense, ce que vous voulez dire. Voici donc l'algorithme pour trouver un membre de l'ensemble inférieur:2 [ n ] P { X : P ( X ) = 1 }O(n)2[n]P{X:P(X)=1}
a) Testez . Si 0, arrêtez.P(∅)
b) Testez . P({n})
bi) Si 0, répétez sur (OK, car aucun ensemble contenant ne peut être dans l'ensemble inférieur). n2[n−1]n
b.ii) Si 1, alors il existe un membre de l'ensemble inférieur dans le sous-réseau . Ce sous-réseau est isomorphe à donc encore une fois, nous pouvons recurse. Plus précisément, nous pouvons exécuter l'algorithme pour , mais lorsque l'algorithme demande d'évaluer , nous évaluons où .{X:n∈X}2[n−1]2[n−1]P(Y)P(X)X=Y∪{n}
Donc, à chaque étape, nous recursons sur un sous-réseau qui est la moitié de la taille de celui d'origine. Dans l'ensemble, nous devons évaluer au plus fois (en fait, vous pouvez implémenter l'algorithme pour évaluer le prédicat fois comme le souligne Yoshio, car vous n'avez besoin de vérifier qu'une seule fois).2 n n + 1 ∅P2nn+1∅