¿Cómo puedo ordenar una lista de 5 enteros de modo que en el peor de los casos se necesitan 7 comparaciones? No me importa cuántas otras operaciones se realizan. No sé nada en particular sobre los enteros.
He intentado algunos enfoques diferentes de dividir y conquistar que me llevan a 8 comparaciones, como seguir un enfoque de combinación o combinar combinación con el uso de búsqueda binaria para encontrar la posición de inserción, pero cada vez que termino con 8 compara el peor de los casos .
En este momento solo estoy buscando una pista, no una solución.
algorithms
sorting
Robert S. Barnes
fuente
fuente
if(x > y)
es el mismoif((x - y) & 0x80)
que difícilmente se puede comparar. Supongo que deberíamos olvidar que los objetos son enteros y asumir que debemos usar algunacompare(x, y)
función mágica para comparar esos objetos ...Respuestas:
Solo hay una forma de comenzar este proceso (y para casi todas sus decisiones sobre qué comparar en los pasos posteriores, solo hay una correcta). Aquí se explica cómo resolverlo. Primero, tenga en cuenta que hay respuestas posibles que puede obtener para sus comparaciones, ¡y 5 ! = 120 permutaciones diferentes entre las que necesita distinguir.27 7= 128 5 ! = 120
La primera comparación es fácil: tienes que comparar dos claves, y como no sabes nada sobre ellas, todas las opciones son igualmente buenas. Así que digamos que se compara y B , y encuentra que un ≤ b . Ahora tiene 2 6 = 64 respuestas posibles restantes, y 60 permutaciones posibles restantes (ya que hemos eliminado la mitad de ellas).un si a≤b 26=64 60
A continuación, se puede comparar bien y d , o podemos comparar C a una de las claves que se utilizó en la primera comparación. Si comparamos C y D , y aprender que c ≤ d , entonces tenemos 32 respuestas restantes y 30 permutaciones posibles. Por otro lado, si comparamos c con una , y se descubre que un ≤ c , tenemos 40 posibles permutaciones restantes, porque hemos eliminado 1 / 3 de las posibles permutaciones (aquellos con c ≤c d c c d c≤d 32 30 c a a≤c 40 1/3 ). Solo tenemos 32 posibles respuestas restantes, así que no tenemos suerte.c≤a≤b 32
Entonces, ahora sabemos que tenemos que comparar las teclas primera y segunda, y las teclas tercera y cuarta. Podemos suponer que tenemos y c ≤ d . Si comparamos correo a cualquiera de estas cuatro teclas, por el mismo argumento que se utilizó en el paso anterior, podríamos eliminar solamente 1 / 3 de los restantes permutaciones, y estamos de suerte. Entonces tenemos que comparar dos de las claves a , b , c , d . Teniendo en cuenta la simetría, tenemos dos opciones, comparar a y c o comparar a y da≤b c≤d e 1/3 a,b,c,d a c a d . Un argumento espectáculos similares recuento hay que comparar y c . Podemos suponer sin pérdida de generalidad que a ≤ c , y ahora tenemos a ≤ b y a ≤ c ≤ d .a c a≤c a≤b a≤c≤d
Como me pidió una pista, no analizaré el resto del argumento. Te quedan cuatro comparaciones. Úsalos sabiamente.
fuente
fuente