¿Cuáles son los beneficios de los algoritmos? No los encuentro importantes.

Imagina por un segundo que tienes dos cubos de Rubik sentados frente a ti. Uno de ellos puede usar algoritmos (como cuántas veces o en qué dirección girar una cara), y el otro tiene que encontrar su propio camino.

¿Qué camino será más rápido?

Casi seguro que la primera manera. Ya hay cientos de algoritmos bien establecidos para resolver un cubo de Rubik, y tratar de inventar su propio método para resolverlo llevará mucho más tiempo que utilizar los actuales. Peor que eso, es muy probable que el método que elija sea menos eficiente y más lento que los métodos que ya existen. E incluso peor que eso, el método que invente probablemente solo funcione para su configuración específica del cubo de Rubik, y teniendo en cuenta que hay 43 configuraciones quintilianas diferentes, su método no hará el trabajo si algo cambia.

En términos informáticos, los algoritmos le dan al programador el poder de implementar código eficiente, confiable y rápido en un período de tiempo más corto. Sabes que funcionará porque ha sido probado en batalla en aplicaciones reales. Y, lo mejor de todo, no importa cuál sea la configuración del cubo de Rubik (es decir, su idioma, su arquitectura, su estilo de codificación), sabe que siempre funcionará.

Estudiar algoritmos generalmente se reduce a dos elementos esenciales: una encuesta de algoritmos diferentes, y un estudio de las matemáticas detrás de derivar la complejidad de tiempo y espacio de cualquier algoritmo dado.

¿Porque es esto importante? La primera parte que debe considerar como caja de herramientas: un conjunto de soluciones ya conocidas a los problemas que probablemente encuentre como desarrollador. Es posible que no siempre implemente estos algoritmos usted mismo, pero conocer sus nombres y su funcionamiento le permite reconocer cuándo un problema al que se enfrenta ya se ha resuelto y elegir una solución adecuada.

La segunda parte, la complejidad, lo ayudará a comprender cómo modificar los algoritmos existentes o nuevos para satisfacer sus necesidades específicas. Por ejemplo, se le puede asignar la tarea de escribir una estructura de datos que permita la recuperación de sus valores mínimos y máximos, así como la inserción. Si necesita insertar 1000 veces por segundo, pero solo obtiene el mínimo / máximo una vez al día, comprender cómo leer la complejidad lo ayudará a optimizar su algoritmo para priorizar el método de inserción. Si, por otro lado, debe insertar solo una vez al día pero obtener los valores mínimo y máximo mil veces por segundo, entonces cualquiera que comprenda la complejidad de todos los algoritmos involucrados en el almacén de datos sabrá exactamente cómo modificarlo para que se priorice la recuperación min-max.

Nuevamente, muchos algoritmos pueden optimizarse para consumir menos tiempo o consumir menos memoria. Encontrar el equilibrio correcto puede ser crucial para ciertas aplicaciones y entornos. Para este fin es importante estudiarlo.

También hay una tercera cosa que no he mencionado: ¡estudiar algoritmos te ayuda a pensar! Al pensar en los algoritmos y su funcionamiento, mejorará en el diseño de los nuevos usted mismo, mejorará en la identificación de algunos tipos de olores de código antes de que sucedan, y se convertirá en un mejor programador en general, incluso si nunca implementa uno solo. ¡ellos!

A sabiendas o sin saberlo, está utilizando algoritmos todo el tiempo mientras está programando. Ni siquiera eso, los usas antes de realizar cualquier tarea. Es posible que no los escriba porque lo está haciendo mentalmente.

Cuando intentas resolver un rompecabezas o un problema, piensas muchos escenarios mentalmente. Elige el mejor o “el indicado” y luego lo ejecuta.

Algoritmos en términos simples son los pasos dados para hacer cualquier cosa. No son útiles si los asaltas. Te enseñan esos para que tu mente se acostumbre a una determinada forma de pensar.

Una parte importante de la resolución de problemas no es solo resolverlos correctamente, sino también resolverlos de manera eficiente.

Imagine que le piden que clasifique 10 cajas según su tamaño. Es bastante fácil: solo son 10, es factible en poco tiempo. Pero imagine que hay 100, 1000, 10000 cajas. ¿Puede aplicar las mismas tácticas que usó con diez cuadros a un problema mayor o buscará una solución diferente? Pero, ¿por qué debería haber una solución diferente? ¿No podemos encontrar solo uno que se aplique a todos los tamaños del problema?

Los algoritmos son conjuntos de pasos que deben realizarse para llegar a la solución de un problema dado. Si comienza a buscar no una solución, sino un método específico para llegar a la solución, se encontrará resolviendo muchos problemas una sola vez y adquiriendo experiencia para resolver los siguientes de manera más eficiente y rápida.

Si tiene que dirigir a alguien a un lugar en particular y no habla su idioma. ¿Como lo harias?

Usaría las señales de sus manos para decirle que vaya en línea recta, izquierda, derecha, etc. De manera similar, el algoritmo es una forma de explicar a las personas cómo resolver un problema independientemente del lenguaje de programación.

Digamos que tiene que explicar el codificador de script java que no conoce Java sobre un problema que tiene que resolver y usted, por otro lado, es un codificador Java. Una forma es escribir un código en java y mostrarle. Cuando vea el código, se confundirá porque verá todas las declaraciones de variables, el formato, etc. La otra forma es que puede explicarlo en inglés simple usando solo variables con la definición de su tipo. Podrá digerirlo más rápidamente.

Supongo que te refieres a los algoritmos conocidos (por ejemplo, clasificación de burbujas, clasificación rápida, clasificación de montón, etc.), y no los pasos del algoritmo en sí. En caso afirmativo, depende de su fase en la programación.

Cuando recién esté comenzando a programar, necesitará familiarizarse con el algoritmo (las instrucciones paso a paso) para resolver problemas. Inicialmente, lo más probable es que cree soluciones de trabajo, aunque no eficientes. Los algoritmos conocidos generalmente proporcionarán mejores enfoques para estos problemas, pero a menudo no son sencillos y funcionan mejor para cada caso específico. A partir de estas experiencias, su cerebro comenzará a adaptarse a este tipo de pensamiento, es decir, para cada problema, hay varias soluciones posibles, la mejor solución puede no ser sencilla y posiblemente haya una mejor solución.

Cuando comience a implementar un sistema de la vida real, dependerá de en qué esté trabajando. Si está trabajando en soluciones de bajo nivel y la eficiencia es la n. ° 1, estos algoritmos conocidos actuarán como atajos para sus problemas. Son solo atajos, ya que lo más probable es que necesites adaptarlos a tus necesidades específicas. Para las aplicaciones promedio, rara vez se utilizarán, e incluso cuando lo necesite, puede estar seguro de que otra persona ya lo ha implementado. La ventaja de estar familiarizado con estos algoritmos, en este caso, es que conoce el mejor para su caso.

¿Sabes cómo hacer una taza de té? Si es así, ha implementado un algoritmo.

Si tú y yo jugáramos un juego de recolección 52 (búscalo) e hicieras todas las recogidas, tendrías que poner todas las cartas orientadas de la misma manera y alineadas correctamente en un mazo. Ese proceso se basa en un algoritmo similar al siguiente:

1 Recoge una tarjeta

2 Colóquelo en su otra mano

3 Recoge una tarjeta

4 Míralo y determina hacia dónde se enfrenta

5 Alinéalo con la (s) tarjeta (s) en tu otra mano y enfréntalo de la misma manera

6 Si hay más cartas en el piso Vaya al paso 3, de lo contrario habrá terminado