Lamentablemente, los “pasos” son muy imprecisos, pero la situación no es tan desesperada como sugieren algunas de las otras respuestas. Podemos instrumentar una implementación de ordenamiento dinámico para contar explícitamente el número de comparaciones o intercambios (o cualquier otro “paso” que desee contar) y buscar en todas las permutaciones uno con el recuento deseado. Es posible que no exista, porque el límite puede estar desactivado por un factor constante. Pero al menos podemos mirar.
Tomé la implementación de Python aquí: Heap Sort – GeeksforGeeks y la instrumenté para contar:
- Siempre que se compararon dos valores de entrada (es decir, no conté las comparaciones de límites).
- Cada vez que se intercambian dos valores en la matriz.
Ejecutar esto en todas las permutaciones de longitud 4 da:
- Quiero ser excelente en matemáticas y programación, pero no tengo tiempo para ambos. ¿Cúal?
- ¿Cuáles son algunas de las aplicaciones comunes de Machine Learning?
- ¿Qué tiene de malo este algoritmo 3SAT?
- ¿Cuál es el mejor menor para una especialización en informática? ¿Un menor le dará una 'ventaja' en la fuerza laboral?
- ¿De qué se trata más la computación cuántica: Computadoras o Física y Matemáticas?
permutación de permutación de comps
7 8 (1, 2, 3, 4)
6 7 (1, 2, 4, 3)
7 7 (1, 3, 2, 4)
6 6 (1, 3, 4, 2)
7 6 (1, 4, 2, 3)
7 7 (1, 4, 3, 2)
7 7 (2, 1, 3, 4)
6 6 (2, 1, 4, 3)
7 8 (2, 3, 1, 4)
6 5 (2, 3, 4, 1)
7 7 (2, 4, 1, 3)
7 6 (2, 4, 3, 1)
7 6 (3, 1, 2, 4)
6 7 (3, 1, 4, 2)
7 7 (3, 2, 1, 4)
6 6 (3, 2, 4, 1)
7 6 (3, 4, 1, 2)
7 5 (3, 4, 2, 1)
6 5 (4, 1, 2, 3)
6 6 (4, 1, 3, 2)
6 6 (4, 2, 1, 3)
6 5 (4, 2, 3, 1)
6 5 (4, 3, 1, 2)
6 4 (4, 3, 2, 1)
[matemáticas] 4 \ log_2 4 = 8 [/ matemáticas]. Podemos ver que no hay ejemplos que requieran 8 comparaciones, pero sí hay ejemplos que requieren exactamente 8 intercambios.
La próxima vez que [math] \ log_2 n [/ math] sea un número entero es 8, que es mucho más permutaciones para buscar, pero podemos encontrar ejemplos que requieren exactamente [math] 8 \ log_2 8 = 24 [/ math] comparaciones o intercambios:
permutación de permutación de comps
28 24 (1, 2, 3, 5, 4, 7, 6, 8)
24 20 (1, 2, 4, 3, 8, 5, 6, 7)
29 24 (2, 5, 3, 6, 4, 1, 7, 8)
24 16 (8, 7, 6, 5, 4, 3, 2, 1)
Lamentablemente, [math] 16! [/ Math] es demasiadas posibilidades para examinar por fuerza bruta, y la lista ordenada requiere 85 comparaciones y 58 intercambios, por lo que no tenemos una respuesta fácil en este caso.
Debe tener en cuenta que el número de comparaciones es proporcional a [matemáticas] N + N \ log N [/ matemáticas], por lo que no deberíamos esperar ver un factor constante de ‘1’. Podemos ver cuánto tiempo lleva esta implementación de ordenamiento dinámico ordenar la lista ya ordenada:
n comps swaps n log n
2 1 2 2
4 7 8 8
8 27 22 24
16 85 58 64
32 231 146 160
64 593 362 384
128 1459 850 896
256 3452 1972 2048
512 7958 4464 4608
1024 18060 9968 10240
2048 40204 21864 22528
4096 88835 48360 49152
8192 194316 105306 106496
16384 421566 226058 229376
32768 908636 483628 491520
65536 1948406 1034492 1048576
131072 4162037 2206510 2228224
262144 8849195 4664612 4718592
524288 18755632 9834698 9961472
Esta tabla muestra que el número de intercambios es ligeramente menor que [math] N \ log_2 N [/ math], y el número de comparaciones es de [math] 2N \ log_2 N [/ math]. Esto sugiere (pero no prueba) que no podremos encontrar ejemplos más grandes donde el número de operaciones sea exacto.