2011-12-31 12 views
7

Bueno, hice una pregunta sobre la clasificación hace unos días. Descubrí cómo demostrar que el menor número de comparaciones ordenando 8 elementos es 16 y entendí por qué. Pero mi algoritmo de ordenación por fusión cuenta 17 comparaciones y en mi caso es correcto. Para unir dos matrices ordenadas con longitud xey, necesitamos comparaciones (x + y) -1, de modo que en el orden de fusión obtenemos 17 comparaciones. Pero debe ser posible con 16 comparaciones, entonces ... ¿cómo? donde puedo guardar esa 1 comparación).¿Cómo podemos llevar a cabo una combinación de 8 elementos con solo 16 comparaciones?

aquí es una imagen:

enter image description here

http://oeis.org/A001768

Gracias!

+1

Y esta es esa [pregunta anterior] (http://stackoverflow.com/q/8673860/60761) –

+0

Usted afirma que ya sabe "cómo demostrar que ... es 16". Su prueba debería ser capaz de responder esta pregunta. –

+0

quiero decir que espero que teóricamente sea posible – nakajuice

Respuesta

5

OP contiene una prueba clara de que fusión tipo de 8 elementos no es posible con menos de 17 comparaciones. Todavía es posible ordenar 8 elementos en 16 comparaciones con otro algoritmo. El algoritmo se describe en "El arte de la programación de computadoras" de D.Knuth, Vol.3, capítulo 5.3.1. Se llama merge insert.

El menor número de comparaciones no hace que este algoritmo sea el más rápido. Por ejemplo, Batcher odd–even mergesort con 19 comparaciones supera fácilmente a merge insert porque realiza la mayoría de las comparaciones en paralelo.

+0

muy buena respuesta .. hay un párrafo completo para mi problema con "el mejor peor de los casos" para el número de comparaciones. – nakajuice

3

Solo puede obtener la menor solución cuando tiene que ordenar una cantidad impar de números.

+1

¿Cómo es eso? No es obvio para mi – Dialecticus

+1

Porque en el nivel más bajo guarda una comparación. Su base sería como 2 - 2 - 2 - 1 con 7 elementos. Por lo tanto, no tendrá que comparar la última pareja (ya que no es una pareja). – ChristopherS

1

Puede probar que 16 comparaciones no son suficientes probando todos los algoritmos posibles. Necesitaría un "algoritmo de generación de algoritmos" para esto.

Cuestiones relacionadas