Aquí está el truco … Big-O está bien y es bueno, y puede ayudarlo a diseñar un algoritmo. Sin embargo, se reduce principalmente a unas pocas cosas, como “comparar cada cosa con todas las demás es [matemáticas] O (N ^ 2) [/ matemáticas]” … “hacer algo con cada cosa es [matemáticas] O (N ) [/ math] ”…“ realiza un cálculo una vez que es [math] O (1) [/ math] ”, el árbol es [math] O (log_2 N) [/ math], y así sucesivamente.
Entonces, en su mayor parte, puede escapar sin conocer la notación o el análisis estricto de O si sabe lo que está haciendo. Solo tiene un modelo en su cabeza de lo que es rápido o lento para cualquier situación, y lo reconoce por tipo.
Tendría que buscar la notación Big-O para hacerlo bien en estos días; Soy autodidacta. Sin embargo, también soy un especialista en optimización, lo que puede hacer que te preguntes cómo diablos puedo hacer eso sin conocer a Big-O como el dorso de mi mano.
- Cómo garantizar un resultado devuelto de la función que llamamos (en sí mismo) es correcto en la recursividad
- ¿De qué juez en línea puedo aprender algoritmos estándar y estructuras de datos?
- ¿Cuál es el algoritmo más eficiente en el tiempo para encontrar el número de divisores de un número?
- ¿Cuáles son las cosas básicas en estructuras de datos y algoritmos que debo saber para las ubicaciones en el campus?
- Cómo ordenar diagonales de una matriz 2D de manera eficiente
La respuesta es simple: conozco las heurísticas anteriores.
También sé algo más que no te enseñarán en los sistemas Big-O. Es decir, que la notación O es inútil en algunas circunstancias, porque ignora por completo las características del hardware y los cuellos de botella.
Es por eso que en algunas situaciones (pequeña N, por ejemplo), la ordenación de burbujas es más rápida que la ordenación rápida. La búsqueda lineal es mejor que una búsqueda de árbol binario, o incluso una tabla hash. Las listas con enlaces dobles y enlaces individuales son más lentas que las matrices desordenadas.
Se trata de la memoria caché y la memoria principal, que es el mayor cuello de botella que enfrentan la mayoría de los sistemas además de los tiempos de almacenamiento, aunque incluso el almacenamiento está comenzando a acercarse al punto en el que puede considerarlo similar a una memoria caché L3 o L4 lenta.