¿Cuáles son algunos algoritmos que usamos a diario que tienen complejidades O (1), O (n log n) y O (log n)?
¿Cuáles son algunos algoritmos que usamos a diario que tienen complejidades O (1), O (n log n) y O (log n)?
Respuestas:
Si desea ejemplos de algoritmos / grupos de declaraciones con complejidad de tiempo como se indica en la pregunta, aquí hay una pequeña lista:
O(1)
horaO(n)
horaEn pocas palabras, todos los algoritmos de fuerza bruta, o los de Noob que requieren linealidad, se basan en la complejidad del tiempo O (n).
O(log n)
horaO(n log n)
horaEl factor de 'log n' se introduce considerando Divide y Conquista. Algunos de estos algoritmos son los mejor optimizados y se utilizan con frecuencia.
O(n^2)
horaSe supone que estos son los algoritmos menos eficientes si están presentes sus contrapartes O (nlogn). La aplicación general puede ser Brute Force aquí.
O(log n)
lista para que esté antes de la O(n)
lista para que la lista esté en orden de mejor a peor. jaja :)
Un ejemplo simple de O(1)
podría ser return 23;
: cualquiera que sea la entrada, volverá en un tiempo fijo y finito.
Un ejemplo típico de O(N log N)
sería ordenar una matriz de entrada con un buen algoritmo (por ejemplo, mergesort).
Un ejemplo típico O(log N)
sería buscar un valor en una matriz de entrada ordenada por bisección.
O (1) - la mayoría de los procedimientos de cocción son O (1), es decir, lleva una cantidad constante de tiempo incluso si hay más personas para cocinar (hasta cierto punto, porque podría quedarse sin espacio en sus ollas / sartenes y necesito dividir la cocción)
O (logn): encontrar algo en su directorio telefónico. Piense en la búsqueda binaria.
O (n): leer un libro, donde n es el número de páginas. Es la cantidad mínima de tiempo que se necesita para leer un libro.
O (nlogn): no puedo pensar inmediatamente en algo que uno pueda hacer todos los días que sea nlogn ... ¡a menos que clasifique las tarjetas fusionando o clasificando rápidamente!
Puedo ofrecerte algunos algoritmos generales ...
Estas serían las respuestas instintivas, ya que esto suena como una pregunta tipo tarea / entrevista. Si está buscando algo más concreto, es un poco más difícil, ya que el público en general no tendría idea de la implementación subyacente (código abierto, por supuesto) de una aplicación popular, ni el concepto en general se aplica a una "aplicación".
O (1): encontrar el mejor próximo movimiento en el ajedrez (o, para el caso, ir). Como el número de estados del juego es finito, es solo O (1) :-)
O(1)
nanosegundos, y seguramente sabes qué O(1)
ocurrirá primero ...
La complejidad de la aplicación de software no se mide y no se escribe en notación de O grande. Solo es útil para medir la complejidad del algoritmo y comparar algoritmos en el mismo dominio. Lo más probable es que cuando decimos O (n), queremos decir que se trata de "O (n) comparaciones " u "O (n) operaciones aritméticas". Eso significa que no puede comparar ningún par de algoritmos o aplicaciones.
0 (logn) -Búsqueda binaria, elemento pico en una matriz (puede haber más de un pico) 0 (1) -en Python calculando la longitud de una lista o una cadena. La función len () tarda 0 (1) tiempo. Acceder a un elemento en una matriz toma 0 (1) tiempo. La operación de inserción en una pila toma 0 (1) tiempo. 0 (nlogn) -Merge sort. ordenar en Python toma tiempo nlogn. así que cuando usas listname.sort () toma nlogn tiempo.
La búsqueda de notas en una tabla hash a veces lleva más de un tiempo constante debido a las colisiones.
O (2 N )
O (2 N ) denota un algoritmo cuyo crecimiento se duplica con cada adición al conjunto de datos de entrada. La curva de crecimiento de una función O (2 N ) es exponencial: comienza muy poco profunda y luego aumenta de manera meteórica. Un ejemplo de una función O (2 N ) es el cálculo recursivo de números de Fibonacci:
int Fibonacci (int number)
{
if (number <= 1) return number;
return Fibonacci(number - 2) + Fibonacci(number - 1);
}
Tower of Hanoi
hubiera sido un mejor ejemplo.