Fusionar listas de objetos frágiles


19

Antecedentes: Chao Xu publicó la siguiente pregunta hace algún tiempo: " ¿Hay algún algoritmo de clasificación de comparación conocido que no se reduzca a redes de clasificación, de modo que cada elemento se compare veces?O(logn) ". Parece que estamos un poco atascados con el problema; He discutido el mismo problema con Valentin Polishchuk en 2009, y no llegamos a ningún lado.

Para obtener algunas ideas nuevas, traté de hacer la pregunta más simple posible que tenga un sabor similar y no sea completamente trivial. De ahí la siguiente pregunta.


Pregunta: Se le dan dos listas ordenadas, cada una de ellas con elementos. ¿Puedes fusionar las listas para que cada elemento solo se compare veces?nO(1)

Naturalmente, la salida debe ser una lista ordenada que contenga todos los elementos .2n

[Esto resultó ser trivial, la respuesta es "no".]


Pregunta 2: Se le dan dos listas ordenadas, cada una de ellas con elementos. ¿Puedes fusionar las listas para que cada elemento solo se compare veces, si puedes descartar una pequeña fracción de elementos ?nO(1)

Más precisamente, el resultado debe ser una lista ordenada que contenga elementos y una "papelera" que contenga elementos . ¿Qué tan pequeño puede hacer el valor ? Obtener es trivial. Algo como debería ser factible de una manera directa. Pero, ¿puedes obtener ?T ( n ) T ( n ) T ( n ) = n T ( n ) = n / 100 T ( n ) = o ( n )2nT(n)T(n)T(n)T(n)=nT(n)=n/100T(n)=o(n)


Notas:

  • Usamos el modelo de comparación aquí. Solo algoritmos deterministas, estamos interesados ​​en las garantías del peor de los casos.

  • Tenga en cuenta que ambas listas tienen exactamente elementos. Si teníamos una lista con elementos y otra con elemento, la respuesta es claramente "no"; sin embargo, si ambas listas son largas, parece que uno podría hacer algo de "equilibrio de carga".n 1nn1

  • Esta vez, cualquier tipo de algoritmo es válido. Si su algoritmo usa redes de clasificación como un bloque de construcción, está perfectamente bien.

  • Como punto de partida, aquí hay un algoritmo simple que compara cada elemento como máximo 200 veces: solo use el algoritmo de fusión estándar, pero mantenga los contadores para los encabezados de las listas. Una vez que alcances 200, descarta el elemento. Ahora, por cada elemento que descarte, ha colocado con éxito 200 elementos en su matriz de salida. Por lo tanto, ha logrado .T(n)=n/100


8
Dijiste que "Si tuviéramos una lista con n elementos y otra con 1 elemento, la respuesta es claramente no". ¿No es el caso con n elementos en cada lista un problema más general? Por ejemplo, si se nos promete que todos los elementos en la segunda lista, excepto el primer elemento, son mucho más grandes que todos los elementos en la primera lista, ¿no se reduce esto al primer problema?
Robin Kothari

@Robin: Correcto, así que no pude formular una pregunta no trivial, gracias. Su observación parece dar un límite inferior si insistimos en ordenar todos los elementos. Permítanme aumentar ligeramente la pregunta ...Ω(logn)
Jukka Suomela

Y en caso de que alguien se pregunte cuál es el punto de la definición aparentemente extraña en la pregunta 2: si podemos hacer que muy pequeña, tal vez podríamos usar algo así como un tipo de fusión para resolver casi el problema original, y preocuparnos por una pequeña fracción de elementos en la papelera más tarde. T(n)
Jukka Suomela

Respuestas:


5

No, dicho algoritmo no puede existir.

t

2t2t+1t+1

nn/2tn/2t

to(n)

En una nota al margen, parece que es posible hacer coincidir esto limitado por un algoritmo donde cada elemento se compara con aproximadamente el registro del tamaño de la parte circundante de la otra lista. Si esto es de interés, intentaré resolver los detalles.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.