Mi suposición educada sobre el umbral de profundidad es la siguiente:
- Si quicksort se ejecuta normalmente, alcanzará una profundidad de aproximadamente [math] \ log_2 n [/ math] en promedio. No queremos cambiar a heapsort a menos que quicksort realmente no funcione correctamente, por lo que tenemos que esperar al menos [math] \ log_2 n [/ math] antes de cambiar; El umbral que se utiliza realmente proporciona cierto margen de error.
- Por otro lado, si esperamos mucho más tiempo que [math] O (\ log n) [/ math], entonces, en casos desafortunados, la fase de clasificación rápida de la clasificación puede dominar el tiempo de ejecución. Digamos que esperamos hasta que la profundidad sea [math] \ sqrt {n} [/ math], entonces la cantidad de tiempo invertido en la fase de clasificación rápida puede ser hasta [math] O (n \ sqrt {n}) [/ math] , y el peor de los casos se arruina.
Para equilibrar estos dos problemas, el umbral está en la profundidad correcta, aunque el número 2 es algo arbitrario. Podría haber sido 1.8 o 3. Tal vez el valor 2 se elige en base a pruebas empíricas.
- ¿Resolver todos los problemas en Project Euler facilita la resolución de problemas en Topcoder?
- ¿Cuál es el problema de partición y cómo lo resolvemos?
- ¿Cómo se implementa la cola prioritaria en C ++? ¿Cómo se hace usando STL?
- ¿Crees que la programación no es para mí?
- ¿Qué debo hacer para autoaprendizaje de ciencias de la computación con interés en inteligencia artificial y ciencias de la computación teóricas?