Estoy aprendiendo algoritmos, ¿para qué sirve la notación Big O?

¡También estoy aprendiendo algoritmos!

La notación Big O describe la eficiencia de los algoritmos a medida que aumenta el tamaño de la entrada. Expresa un algoritmo en términos de una función O (n). A medida que aumenta el tamaño de n, el tiempo de ejecución aumenta a una velocidad predecible, que se puede modelar como una función.

En general, hay siete funciones principales (clasificadas de la más rápida a la más lenta):

  1. O (1): una función constante que siempre se ejecuta en la misma cantidad de tiempo, independientemente del tamaño de la entrada.
  2. O (logn): una función logarítmica que reduce constantemente el tamaño de entrada en una fracción (generalmente a la mitad como en la búsqueda binaria).
  3. O (n) – Una función lineal donde el tiempo de ejecución aumenta en proporción al tamaño de la entrada.
  4. O (nlogn): esta función crece un poco más rápido que la función lineal, pero mucho menos rápido que la función cuadrática. En general, estos algoritmos combinan una operación O (n) con una operación O (logn).
  5. O (n ^ 2): una función cuadrática en la que el tiempo de ejecución aumenta exponencialmente en un factor de dos a medida que aumenta el tamaño de la entrada. Esta función se encuentra más comúnmente en bucles anidados.
  6. O (n ^ 3): una función cúbica donde el tiempo de ejecución aumenta exponencialmente en un factor de tres a medida que aumenta el tamaño de la entrada. Un ejemplo simple es un algoritmo que requiere bucles anidados triples.
  7. O (2 ^ n): una función exponencial en la que el tiempo de ejecución aumenta exponencialmente por un factor de n a medida que aumenta el tamaño de la entrada. ¡Esto es realmente malo! Un ejemplo sería usar la fuerza bruta para descifrar una contraseña generando todas las combinaciones posibles.

Es importante destacar que la notación Big O describe el peor desempeño de un algoritmo. No refleja el rendimiento del algoritmo en cada situación. Por ejemplo, agregar un elemento a una lista dinámica es O (n). En la mayoría de los casos, agregar un elemento a una lista toma O (1) tiempo al asignar el elemento a la siguiente posición no ocupada en la lista. Sin embargo, cuando una lista alcanza su capacidad total, debe cambiar su tamaño creando una nueva lista con una capacidad mayor y copiando sobre cada elemento. Por lo tanto, en el peor de los casos, agregar un elemento es O (n).

La notación Big O también generaliza la eficiencia de los algoritmos. Si un algoritmo tiene un tiempo de ejecución de O (2n), la constante se descarta para producir O (n). Del mismo modo, si un algoritmo tiene un tiempo de ejecución de O (n + logn), el término no dominante se descarta para producir O (n). Esto se debe a que la notación Big O describe la tasa de aumento en el tiempo, no necesariamente qué tan rápido se ejecuta realmente un algoritmo.

Espero que hayas aprendido algo!

Ninguna de las respuestas es lo suficientemente completa. no explican lo importante que es / por qué / cuándo.

Big-O Algorithm Complexity Cheat Sheet

Esto explicará los números básicos. eso no explica cuándo y dónde es importante.

cuando aprendes ciencias de la computación, aprendes sobre operaciones cuando comienzas con un lenguaje orientado a objetos para bebés como java, en estos días python, por alguna razón, y luego pasas a lo real. aprende binario, cómo hacer conversión binaria para dec a hexadecimal, y luego comienza a aprender lenguaje de máquina. para mí fue MIPS de 32 bits usando qtspim. todavía no necesita pensar cuántas operaciones está utilizando, pero es bueno aprender desde el principio que nunca debe usar “<=" / "> =” porque parece estúpido y aficionado; cualquier compilador ignorará el “=” porque no hay razón para hacer dos comprobaciones cada vez y simplemente hacer que su “<= 10" sea "<11" cuando se compila en código máquina.

luego, aprende C incondicional y toda la C que necesita para el resto de la informática. sin pensar en big-O en absoluto. una vez que tomas matemáticas discretas, si superas eso Y el C, ingresas a la especialización en informática. entonces se vuelve real.

tomas tu primer curso de estructuras / algoritmos discretos. AHORA todo es big-O; técnicas de clasificación, estructuras de datos, encontrar algo en ellas. n log n es un tiempo de ejecución glorioso y n ^ 2 es basura.

tl; dr no necesita preocuparse por ello a menos que se haya convertido en un verdadero “científico de la computación” y no lo haga a menos que demuestre su valía con orientación básica a objetos, ensamblaje, toda la C que necesita y matemática discreta. muchos lo intentarán, la mayoría fracasará, y si llegas allí, en la especialidad, puedes comenzar a preguntarte y aplicarlo.

En resumen, la notación Big O es una forma conveniente de expresar el peor escenario computacional de un algoritmo.

n = número de elementos.

Si digo que un algoritmo tiene una puntuación O de n ^ 2 (O (n ^ 2)), entonces el peor de los casos del rendimiento de este algoritmo es el número de elementos * número de elementos. Un ejemplo específico ampliamente conocido de O (n ^ 2) es el tipo de burbuja. También hay varios niveles diferentes de complejidad que incluyen O (n), O (n!), O (log (n)), etc.

Big O también se puede utilizar para referirse a la complejidad del espacio y al tiempo. Así que no te preocupes si lo ves por uno u otro.

En general, describe el tiempo necesario para realizar un algoritmo. Existen numerosas clases de complejidad (es decir, clasificaciones de tiempo de ejecución).

O (1) es similar a buscar el contenido de una ubicación de memoria.

O (Log2N): búsqueda binaria o búsqueda en un árbol de búsqueda binaria

O (n): encontrar un valor en una lista o matriz sin clasificar.

O (NLogN): el algoritmo MergeSort o QuickSort.

O (n ^ 2): BubbleSort o matrices multiplicadoras para matemática de precisión múltiple

O (n ^ 3): multiplicación de matrices.

En una nota al margen, algunos pero no todos los algoritmos O (n ^ 2) se pueden reducir a O (NLogN)

Big O da una idea de cuánto tiempo puede durar el tiempo de ejecución de un algoritmo en el peor de los casos en función del número [o la longitud] de las entradas. Está allí como una especie de índice para algoritmos, por lo que puede compararlos de un vistazo.

La notación Big-O te dice la complejidad del peor de los casos de un algoritmo.

Esto le indica qué tan rápido puede terminar un algoritmo en relación con el número de bits de entrada ‘N’ dentro de su conjunto de datos en función de su complejidad asintótica. Dado que el número de elementos sobre los que está actuando mantiene una relación lineal pequeña constante con el número real total de bits, esto se simplifica coloquialmente de ‘ relativo al número de bits ‘ a ‘ relativo al número de elementos ‘ desde este cambio en definición tendrá consecuencias sin importancia en la complejidad.

La notación Big-O no es útil para proporcionar una estimación de tiempo precisa para la finalización algorítmica, es útil para proporcionar una base intuitiva para comprender cuánto tiempo puede tomar un algoritmo y para comparar la velocidad esperada de 2 algoritmos diferentes.

Se utiliza para estimar la eficiencia de su programa. Por lo general, hay muchas formas de resolver un mismo problema. Por ejemplo, cuando tiene un problema que puede resolverse mediante la fuerza bruta en O (n ^ 2) o un algoritmo codicioso en O (n), se favorece la forma O (n).

More Interesting

¿Cómo ordena Quora los elementos que aparecen en la secuencia de un usuario?

¿Cómo se determina la longitud de una matriz en C?

¿Por qué necesitamos el algoritmo de derivación de porter en Python?

¿Cuáles son algunos algoritmos para el comercio de acciones automatizado?

Para verificar que la lista vinculada es circular, ¿cuál será la condición del bucle? Conozco un proceso adicional como tomar dos punteros. Por favor sugiérame

¿Qué papel juega la comprensión de los algoritmos y las estructuras de datos en la construcción de proyectos, conseguir un trabajo y hacer su trabajo?

¿Cómo debo comenzar a aprender sobre estructura de datos y algoritmos?

Cómo maximizar el XOR entre un número constante y múltiples matrices con un solo trie si los elementos de la matriz pueden ser comunes

¿Cuál es la diferencia entre la estructura de datos y la base de datos para almacenar datos?

¿Cuáles son las mejores prácticas para acelerar el pensamiento de mi algoritmo?

¿Qué es el algoritmo TDIDT?

¿Cuáles son las aplicaciones de la estructura de datos en C?

¿Por qué mi solución C ++ al problema SPOJ.com - Problema DIVSUM2 muestra un error?

En Python, dada la siguiente permutación de a, b, c, d, e, f, g, h, i, j, ¿cuál es la próxima permutación en el orden lexicográfico (diccionario)?

¿Cuál es el problema si clasificamos los intervalos según su tiempo de finalización como el problema de programación de intervalos? ¿Por qué es necesario ordenar según la hora de inicio en el problema de partición de intervalos?