4 votos

Algoritmo para responder a las preguntas sobre la entrada dominada

Consideremos una situación en la que vemos las entradas una por una, siendo cada entrada un $n$ -tupla $(a_1,a_2,...,a_n)$ donde cada $a_i\in\{0,1\}$ . Para cada nueva entrada que veamos, tenemos que responder a dos preguntas:

1) ¿Hemos visto esta entrada antes?

2) ¿Es la entrada dominado por alguna entrada que hayamos visto antes? (Una entrada $A=(a_1,\ldots,a_n)$ se dice que dominado por una entrada $B=(b_1,\ldots,b_n)$ si $a_i\leq b_i$ para todos $i$ .)

¿Con qué rapidez podemos responder a estas dos preguntas para cada entrada?

Para la pregunta 1), podemos utilizar una tabla hash. Comprobamos si la entrada ha sido vista antes en $O(1)$ tiempo, y si no, inserta la entrada en la tabla hash en $O(1)$ tiempo.

Para acomodar la pregunta 2), la forma trivial es comparar la nueva entrada con cada una de las entradas anteriores, lo que llevaría $O(k)$ tiempo, donde $k$ es el número de elementos de la tabla hash. Puede ser hasta $O(2^n)$ tiempo. ¿Hay alguna manera de reducir esto a algo polinómico en $n$ ?

0 votos

El hash de la tupla requiere $O(n)$ tiempo ¿verdad? así que el primer caso no puede ser $O(1)$ a menos que $n$ es constante. Además, para la segunda, ¿quieres decir $O(k \times n)$ (comparado con cualquier otro $k$ y cada comparación es $O(n)$ )

0 votos

@Irvan El hash de cada tupla requiere $O(1)$ tiempo. (Recuerde que estamos considerando el tiempo para responder a las preguntas de cada entrada).

0 votos

Pero cada entrada es $(a_1, \cdots, a_n)$ es decir, consiste en $n$ elementos, ¿verdad? Por lo tanto, si $H$ es la función hash, $H(a_1, \cdots, a_n)$ requiere al menos $O(n)$ .

1voto

Bob Cross Puntos 187

Si tratamos a cada $n$ -como un subconjunto de $1,2,\ldots, n$ de forma natural, entonces vemos que $A$ domina $B$ si $B$ es un subconjunto de $A$ . El papel "Nuevos algoritmos para la consulta de subconjuntos, la coincidencia parcial, la búsqueda de rangos ortogonales y problemas relacionados" (pdf) de Charikar, Indyk y Panigrahy presenta algunos resultados de compensación de tiempo y espacio para este problema.

0voto

Harry Puntos 70

Supongo que te refieres a $a_i\in (0,1)$ no $\{0,1\}$ porque se trata de una cadena binaria. No obstante, lo que estoy pensando se aplica a ambos casos.

Como se obtienen las tuplas una a una las ordenaremos con un clasificación por inserción algoritmo un poco modificado para ordenar las tuplas lexicográficamente . Esto es como un diccionario, por ejemplo $(1, 0.5, 0.4) \geq (1, 0.6, 1)\geq(0.9, 1,0.6)$ porque: $0.5<0.6$ .

Dejando los detalles, 1) cuando una tupla se ordena en su lugar sólo puede ser idéntica a las adyacentes, lo que es fácil de comprobar. 2) Empezando por la última tupla y subiendo, comprueba si cada tupla está dominada por su anterior. Si $A$ y $B$ son dos tuplas y $A$ domina $B$ entonces seguro que $a_1\geq b_1$ y $A\geq B$ , $A$ debe ser mayor que $B$ para dominar $B$ .

El tiempo total de ordenación de la inserción es $O(n^2)$ y las comprobaciones pueden realizarse en tiempo lineal después de ordenar las entradas.

0 votos

En realidad quería decir $a_i\in\{0,1\}$ y por lo tanto $a_1a_2\ldots a_n$ es una cadena binaria. Utilizando su algoritmo, cada comprobación puede realizarse efectivamente en tiempo lineal, que podría ser de hasta $2^n$ (ya que podría haber hasta $2^n$ cadenas binarias distintas de longitud $n$ ). Mi pregunta era si podemos hacerlo mejor.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X