¿Generalizaciones de búsqueda binaria para posets?

28

Supongamos que tengo un poset "S" y un predicado monótono "P" en S. Quiero encontrar uno o todos los elementos máximos de S que satisfagan a P.

EDITAR : Estoy interesado en minimizar el número de evaluaciones de P .

¿Qué algoritmos existen para este problema y qué propiedades y operaciones adicionales requieren en S?

¿Qué pasa con casos especiales importantes, como:

  • S es un orden lineal, entonces la búsqueda binaria regular funciona, siempre y cuando tenga una operación de "búsqueda intermedia"
  • S es una red
  • S es una red de subconjuntos
  • S es una red multiset
  • ...

Los dos últimos casos parecen particularmente importantes, por ejemplo, para el diseño de experimentos: tiene un conjunto de parámetros booleanos o reales, y desea encontrar la combinación más pequeña posible que reproduzca un patrón particular (por ejemplo, una prueba fallida).

jkff
fuente
1
¿Qué es la red 'multiset'?
Suresh Venkat
1
Es la red cuyos elementos son mapeos X -> N, meet es elementwise min y join es elementwise max. Se puede generalizar a cualquier red en lugar de N como codominio.
jkff

Respuestas:

15

No he pensado mucho en esto, así que corrígeme si me equivoco.

Digamos que es el ancho del poset.w

  1. Para el poset que es la unión de cadenas disjuntas, necesita al menos w log n evaluaciones de P simplemente aplicando el límite inferior estándar en la complejidad de la consulta de búsqueda binaria a cada cadena.wwlognP

  2. Como proporciona comparaciones de forma gratuita, puede calcular una descomposición en cadena del poset en cadenas de forma gratuita. Utilizar búsqueda binaria en cada cadena para identificar el primer elemento que satisface P . Luego repase los elementos identificados y elimine los dominados. El número de evaluaciones de P es O ( w log n ) . Esto identifica todos los elementos máximos, ya que puede haber como máximo un elemento máximo por cadena.wPPO(wlogn)


AGREGADO: En realidad estoy viendo un algoritmo recursivo simple para hacerlo mucho mejor ( ) para la red de subconjuntos 2 [ n ] ( EDIT : domotor describió la estrategia general en su respuesta). Aquí estoy asumiendo que P es monótono hacia abajo (es decir, los subconjuntos { X : P ( X ) = 1 } forman un conjunto más bajo), que es lo que quiero decir. Entonces, aquí está el algoritmo para encontrar un miembro del conjunto inferior:O(n)2[n]P{X:P(X)=1}

a) Prueba . Si es 0, entonces pare.P()

b) Prueba . P({n})

bi) Si 0, entonces recurse en (OK, ya que ningún conjunto que contenga n puede estar en el conjunto inferior).2[n1]n

b.ii) Si 1, entonces existe un miembro del conjunto inferior en la subred . Esta subred es isomorfa a 2 [ n - 1 ], por lo que una vez más podemos recurrir. Más precisamente, podemos ejecutar el algoritmo para 2 [ n - 1 ] , pero cuando el algoritmo pide evaluar P ( Y ) , evaluamos P ( X ) donde X = Y { n } .{X:nX}2[n1]2[n1]P(Y)P(X)X=Y{n}

Entonces, en cada paso, recurrimos a una sub-red que es la mitad del tamaño de la original. En general, necesitamos evaluar como máximo 2 n veces (de hecho, puede implementar el algoritmo para evaluar el predicado n + 1 veces como señala Yoshio, ya que solo necesita verificar una vez).P2nn+1

Sasho Nikolov
fuente
Wow, una idea tan simple! Gracias.
Pensaré
En realidad, es incluso menor que w log n, ya que la suma de las longitudes de cadena es n. Supongo que el máximo es alrededor de w log (n / w).
jkff
OK, para órdenes lineales esto proporciona búsqueda binaria, para una red de subconjuntos esto proporciona C (n, n / 2) log (2 ^ n / C (n, n / 2)) ~ exp (n) * n. No es demasiado rápido, pero tampoco parece demasiado subóptimo, ya que en realidad puede haber tantas respuestas. Sin embargo para encontrar un subconjunto máxima, es necesario búsqueda binaria sobre cualquier una cadena - esto es muy bueno y ahora llama a mí estúpida por no pensar en ella. ¡Gracias de nuevo!
jkff
2
Creo que las cadenas disjuntas de dan un límite inferior de al menos w + log n (para algoritmos deterministas). Piense en un adversario que "oculta" una solución única en la última cadena consultada. Un límite inferior aleatorio de Ω ( w ) debe seguir el principio minimax de Yao. Encontrar un solo elemento con complejidad w + log n puede ser interesante. ww+lognΩ(w)w+logn
Sasho Nikolov
1
@YanKingYin Una red no puede ser la unión de (más de una) cadenas disjuntas, porque cada dos elementos deben tener un supremum. Un poset es una unión de cadenas disjuntas si se puede dividir para que los elementos de diferentes partes sean incomparables y los elementos dentro de la misma parte admitan un orden total.
Sasho Nikolov
8

nwO(wn)

También sería interesante encontrar estructuras de datos dinámicas y estáticas eficientes que desempeñen el mismo papel para órdenes parciales que los montones y los árboles de búsqueda binarios juegan para órdenes totales.

Suresh Venkat
fuente
Je, no suena demasiado inspirador en comparación con log (n) :) pero gracias de todos modos!
jkff
Pero ese es el punto. Sin estructuras de datos, no puede obtener el registro ni siquiera para un conjunto totalmente ordenado, porque todo lo que puede hacer es escanear. En realidad, es una buena pregunta intentar encontrar un equivalente BST.
Suresh Venkat
Bueno, estoy hablando de la complejidad en términos del número de evaluaciones del predicado P, no del predicado de comparación.
jkff
1
En cierto sentido, sí, pero eso está lejos de ser la respuesta completa, por ejemplo, no da bisección para los casos 1d o 2d :) ¿qué sugiere hacer con las raíces?
jkff
1
No estoy seguro todavía. pensando en voz alta. Pero es una excelente pregunta.
Suresh Venkat
4

x<y

Además, puede haber muchos elementos máximos que satisfagan P, por lo que incluso generar todos ellos puede llevar mucho tiempo, por lo que creo que solo hay esperanza de encontrar uno máximo.

En general, la búsqueda binaria funciona si puede seleccionar elementos de forma recursiva de modo que después de que se quede con los elementos anteriores o los elementos anteriores se eliminen, y en cada uno de estos conjuntos se elimine una proporción fija de los elementos.

P.ej. si S es una cuadrícula dimensional fija, entonces hay un algoritmo rápido: siempre reduzca a la mitad una coordenada mientras mantiene las otras mínimas, así que pregunte, por ejemplo, en el primer paso (n / 2,0, ..., 0).

nd

domotorp
fuente
Me temo que no entiendo el primer párrafo. En su reducción, ¿tiene todas las cadenas de n bits en el poset S y se dan como parte de la entrada? Si es así, podemos pasar por todas las cadenas en tiempo polinómico.
Yoshio Okamoto
1
@YoshioOkamoto: Creo que la suposición en ese párrafo es que la comparación en S se da como un circuito booleano. (Pero eso no tiene nada que ver con la búsqueda en un conjunto parcialmente ordenado y por lo tanto no es interesante para mí.)
Tsuyoshi Ito
@ Tsuyoshi: Gracias. Eso tiene mucho sentido.
Yoshio Okamoto
4

P2[n]nPP

a3nm
fuente