Généralisations de recherche binaire pour les posets?


28

Supposons que j'ai un poset "S" et un prédicat monotone "P" sur S. Je veux trouver un ou tous les éléments maximaux de S satisfaisant P.

EDIT : Je suis intéressé à minimiser le nombre d' évaluations de P .

Quels algorithmes existent pour ce problème et quelles propriétés et opérations supplémentaires nécessitent-ils sur S?

Qu'en est-il des cas spéciaux importants, tels que:

  • S est un ordre linéaire - alors la recherche binaire régulière fonctionne, tant que vous avez une opération "find middle"
  • S est un réseau
  • S est un réseau de sous-ensembles
  • S est un réseau multiset
  • ...

Les deux derniers cas semblent particulièrement importants, par exemple pour la conception d'expériences - vous avez un ensemble de paramètres booléens ou réels, et vous souhaitez en trouver la plus petite combinaison possible qui reproduise un modèle particulier (par exemple un test qui échoue).


1
Qu'est-ce que le réseau «multiset»?
Suresh Venkat

1
C'est le réseau dont les éléments sont des mappages X -> N, meet est min par élément et join est max par élément. Il peut être généralisé à n'importe quel réseau au lieu de N comme codomaine.
jkff

Réponses:


15

Je n'y ai pas beaucoup réfléchi, alors corrigez-moi si je me trompe.

Disons que est la largeur du poset.w

  1. 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

  2. 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[n1]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:nX}2[n1]2[n1]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


Wow, une idée si simple! Merci - je vais réfléchir à ce qui semble optimal ou non :)
jkff

C'est en fait encore moins que w log n, car la somme des longueurs de chaîne est n. Je suppose que le maximum est d'environ w log (n / w).
jkff

OK, pour les ordres linéaires, cela donne une recherche binaire, pour un réseau de sous-ensembles, cela donne C (n, n / 2) log (2 ^ n / C (n, n / 2)) ~ exp (n) * n. Pas trop rapide, mais pas trop sous-optimal non plus, car il peut y avoir autant de réponses. Cependant , pour trouver un sous - ensemble maximal, vous devez rechercher binaire sur une juste une chaîne - ce qui est excellent et je me fais appeler maintenant stupide pour ne pas y penser. Merci encore!
jkff

2
Je pense que chaînes disjointes vous donnent une borne inférieure d'au moins w + log n (pour les algorithmes déterministes). Pensez à un adversaire qui "cache" une solution unique dans la dernière chaîne interrogée. Une borne inférieure randomisée de Ω ( w ) devrait découler du principe minimax de Yao. Trouver un seul élément avec une complexité w + log n peut être intéressant. ww+lognΩ(w)w+logn
Sasho Nikolov

1
@YanKingYin Un réseau ne peut pas être l'union de (plus d'une) chaîne disjointe, car chaque élément doit avoir un supremum. Un poset est une union de chaînes disjointes s'il peut être partitionné de sorte que les éléments de différentes parties soient incomparables et que les éléments d'une même partie admettent un ordre total.
Sasho Nikolov


8

Un article récent de Daskalakis et al montre que pour un poset de taille et de largeur w , des éléments minimaux peuvent être trouvés dans le temps O ( w n ) . Ce qui est intéressant, c'est que dans leur résumé, ils disentnwO(wn)

Il serait également intéressant de trouver des structures de données statiques et dynamiques efficaces qui jouent le même rôle pour les ordres partiels que les tas et les arbres de recherche binaires jouent pour les ordres totaux.


Hé, ça ne semble pas trop inspirant par rapport à log (n) :) mais merci quand même!
jkff

Mais c'est le point. Sans structures de données, vous ne pouvez pas obtenir le journal n même pour un ensemble totalement ordonné, car tout ce que vous pouvez faire est de scanner. C'est en fait une très belle question pour essayer de trouver un équivalent BST.
Suresh Venkat

Eh bien - je parle de la complexité en termes de nombre d'évaluations du prédicat P, pas du prédicat de comparaison.
jkff

1
Dans un sens oui, mais c'est loin d'être la réponse complète - par exemple, cela ne donne pas de bissection pour les cas 1d ou 2d :) que proposez-vous de faire avec les racines?
jkff

1
Pas encore sûr. penser a voix haute. Mais c'est une excellente question.
Suresh Venkat

4

Si S fait partie de l'entrée, alors le problème de trouver un élément maximal devient déjà `` NP-dur '' (si nous pensons au réseau de telle sorte que ses éléments sont des chaînes longues de n bits), par exemple, vous pouvez dire si CNF (x) n'est pas vrai et CNF (y) est vrai pour certains CNF fixes.x<y

De plus, il pourrait y avoir de nombreux éléments maximaux satisfaisant P, donc même pour les produire tous, cela pourrait prendre beaucoup de temps, donc je pense qu'il n'y a qu'un espoir de trouver un maximal.

En général, la recherche binaire fonctionne si vous pouvez sélectionner de manière récursive des éléments tels qu'après vous être laissé avec les éléments ci-dessus, ou les éléments ci-dessus soient supprimés, et dans chacun de ces ensembles, un rapport fixe des éléments est supprimé.

Par exemple. si S est une grille dimensionnelle fixe, alors il y a un algorithme rapide: Toujours diviser par deux une coordonnée tout en gardant les autres minimales, alors demandez par exemple dans la première étape (n / 2,0, ..., 0).

nd


J'ai bien peur de ne pas comprendre le premier paragraphe. Dans votre réduction, avez-vous toutes les chaînes de n bits dans le poset S et sont-elles données dans le cadre de l'entrée? Si c'est le cas, nous pouvons parcourir toutes les chaînes en temps polynomial.
Yoshio Okamoto

1
@YoshioOkamoto: Je pense que l'hypothèse dans ce paragraphe est que la comparaison en S est donnée comme un circuit booléen. (Mais cela n'a rien à voir avec la recherche dans un poset et donc pas intéressant pour moi.)
Tsuyoshi Ito

@Tsuyoshi: Merci. Cela a du sens.
Yoshio Okamoto

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.