Sé que con O (n), generalmente tienes un solo bucle; O (n ^ 2) es un doble bucle; O (n ^ 3) es un bucle triple, etc. ¿Qué tal O (log n)?
Realmente vas por el camino equivocado aquí. Estás tratando de memorizar qué expresión big-O va con una estructura algorítmica dada, pero en realidad solo debes contar el número de operaciones que requiere el algoritmo y compararlo con el tamaño de la entrada. Un algoritmo que recorre toda su entrada tiene un rendimiento O (n) porque ejecuta el bucle n veces, no porque tenga un solo bucle. Aquí hay un bucle único con rendimiento O (log n):
for (i = 0; i < log2(input.count); i++) {
doSomething(...);
}
Entonces, cualquier algoritmo donde el número de operaciones requeridas esté en el orden del logaritmo del tamaño de la entrada es O (log n). Lo importante que le dice el análisis big-O es cómo cambia el tiempo de ejecución de un algoritmo en relación con el tamaño de la entrada: si duplica el tamaño de la entrada, ¿el algoritmo da un paso más (O (log n)) , el doble de pasos (O (n)), cuatro veces más pasos (O (n ^ 2)), etc.
¿Ayuda saber por experiencia que los algoritmos que particionan repetidamente sus entradas generalmente tienen 'log n' como componente de su desempeño? Seguro. Pero no busque la partición y llegue a la conclusión de que el rendimiento del algoritmo es O (log n); podría ser algo como O (n log n), que es bastante diferente.