¿Por qué estudiar los algoritmos?

Respondido por Cormen, Leiserson, Rivest y Stein:
“Supongamos que las computadoras son infinitamente rápidas y que la memoria de la computadora es gratuita.
¿Tienes alguna razón para estudiar algoritmos? La respuesta es sí, si no por otra razón.
aún así, le gustaría demostrar que su método de solución termina
Y lo hace con la respuesta correcta.
Si las computadoras fueran infinitamente rápidas, cualquier método correcto para resolver un problema
haría. Probablemente querrás que tu implementación esté dentro de los límites
de buenas prácticas de ingeniería de software (por ejemplo, su implementación debería
estar bien diseñado y documentado), pero lo más a menudo usarías cualquiera
El método fue el más fácil de implementar.
Por supuesto, las computadoras pueden ser rápidas, pero no son infinitamente rápidas. Y la memoria
Puede ser barato, pero no es gratis. El tiempo de computación es por lo tanto un límite.
recurso, y así es el espacio en la memoria. Debes usar estos recursos sabiamente, y
Los algoritmos que son eficientes en términos de tiempo o espacio te ayudarán a hacerlo.
Deberíamos considerar los algoritmos, como el hardware de una computadora, como una tecnología. El rendimiento total del sistema depende de la elección de algoritmos eficientes tanto como de la elección de hardware rápido. Del mismo modo que se están realizando rápidos avances en otras tecnologías informáticas, también se están realizando en algoritmos.
Podría preguntarse si los algoritmos son realmente tan importantes en la actualidad.
computadoras a la luz de otras tecnologías avanzadas, tales como

– arquitecturas informáticas avanzadas y tecnologías de fabricación,
– interfaces gráficas de usuario (GUI) intuitivas y fáciles de usar,
– sistemas orientados a objetos,
– tecnologías web integradas, y
– Red rápida, tanto cableada como inalámbrica.

La respuesta es sí. Aunque algunas aplicaciones no requieren explícitamente algoritmos
contenido de micrófono en el nivel de la aplicación (como algunas aplicaciones simples basadas en la Web),
muchos hacen. Por ejemplo, considere un servicio basado en la web que determina cómo viajar
de un lugar a otro. Su implementación dependería de hardware rápido, un
interfaz gráfica de usuario, redes de área amplia, y también posiblemente en ori-
entación Sin embargo, también requeriría algoritmos para ciertas operaciones, tales como
como rutas de búsqueda (probablemente utilizando un algoritmo de ruta más corta), representando mapas y
direcciones de interpolación.
Además, incluso una aplicación que no requiere contenido algorítmico en el
El nivel de aplicación se basa en gran medida en los algoritmos. ¿La aplicación confía en rápido
¿hardware? El diseño de hardware utiliza algoritmos. ¿La aplicación se basa en
interfaces gráficas de usuario? El diseño de cualquier GUI se basa en algoritmos. Hace el
¿La aplicación depende de la red? El enrutamiento en redes se basa en gran medida en los algoritmos.
¿Se escribió la solicitud en un idioma distinto del código de máquina? Entonces fue
procesado por un compilador, intérprete o ensamblador, todos los cuales hacen uso extensivo
de algoritmos. Los algoritmos son el núcleo de la mayoría de las tecnologías utilizadas en la contemplación
computadoras rarias
Además, con las capacidades cada vez mayores de las computadoras, las usamos para
Resuelve problemas más grandes que nunca. Como vimos en la comparación anterior,
entre la ordenación por inserción y la ordenación por fusión, es en los problemas de mayor tamaño que las diferencias
En eficiencia entre algoritmos se vuelven particularmente prominentes.
Tener una base sólida de conocimiento y técnica algorítmica es una característica
Eso separa a los programadores verdaderamente expertos de los novatos. Con modernas com
Al poner tecnología, puedes realizar algunas tareas sin saber mucho sobre
algoritmos, pero con una buena base en algoritmos, puede hacer mucho, mucho
Más.”
From Introduction to Algorithms – 3rd Edition – Sep 2010. MIT PRESS.

Muchos programadores jóvenes recorren la web tratando de encontrar respuestas a esta pregunta: ¿Cómo estudiar el algoritmo y la estructura de datos? Ciertamente, es un buen lugar para comenzar … Pero creo que una pregunta más relevante sería esta: ¿Qué son los algoritmos y las estructuras de datos, y por qué debería estudiarlos?

Algoritmo + Estructura de datos = Programa

La programación tiene que ver con estructuras de datos y algoritmos.

¿Qué es un algoritmo?

Wikipedia dice que “un algoritmo es un conjunto de operaciones paso a paso autónomo que deben realizarse. Los algoritmos realizan las tareas de cálculo, procesamiento de datos y / o razonamiento automatizado “.

No hay necesidad de entrar en pánico mirando estas palabras rígidas unidas. Tengo algunos ejemplos para ayudarte a entender. Y fácilmente también.

Tomemos un ejemplo simple.

Cuando estaba en segundo grado, aprendió el algoritmo para la suma de dos números. Tal vez su profesor no lo hubiera llamado algoritmo, pero aprendió reglas definidas para transformar la entrada, es decir, dos números, en la salida, que es la suma. Algunos algoritmos como la aritmética que acabas de ver son aprendidos. Algunos necesitan ser instrucciones escritas, diga una receta para cocinar una hamburguesa. Y algunos otros, puedes imaginarte como buscar una dirección en un directorio.

Echemos otro vistazo a los diferentes algoritmos.

Tiene una hoja de ruta y necesita encontrar la ruta más corta desde el origen hasta el destino. Se utiliza el algoritmo de “ruta más corta”. ( Puedes usar Google para leer más sobre el algoritmo de Dijkstra ) .

¿Qué pasa si necesita ordenar una gran cantidad de datos? Usted podría utilizar cualquiera de varios algoritmos de clasificación.

Cuando se enfrenta a un gran problema, a menudo se divide el problema en partes, es decir, se deconstruye y luego se trabaja en él. Eso es codicioso algoritmo para ti. Aquí, usted elige la opción más prometedora en ese http://moment.En estos casos, a sabiendas o sin saberlo, utilizó su sentido común para encontrar la solución más optimizada mediante un método que aprendió durante un período de tiempo. A diferencia de un programa que es un método específico, un algoritmo es un método general.

Aquí hay otro uso en la vida real de un algoritmo. (Sé que ya tienes la idea. Pero no puedo evitarlo. Simplemente lo encuentro muy emocionante).

Supongamos que sabes que Clark Kent es de hecho Superman. También sabes que estudia en tu universidad. Necesitas encontrarlo.

Puede hacer lo siguiente para hacer esto.

  1. Puede usar el método de fuerza bruta para ir a cada persona en el campus y preguntar si alguno de ellos es Clark Kent.
  2. Revisa los datos de la universidad (que alguien ha recopilado utilizando el algoritmo anterior) y mira cada nombre en el directorio hasta que encuentres el nombre y la dirección correctos.
  3. Encontrará una lista de datos ordenados o un directorio, la dividirá en dos partes y buscará el nombre en la parte que probablemente contenga el nombre y obtenga la información de contacto.

Mientras que el primer método le tomó un período de tiempo indefinido, el segundo estaba mejor organizado y tomó menos tiempo. El tercer método casi no lleva tiempo. Fue bastante fácil encontrar a Clark Kent y decirle que sabes que es Superman.

¿Cómo se desarrollan los algoritmos?

Entonces, cuando creas un algoritmo, a continuación están las preguntas que tu algoritmo debería responder:

  • ¿Es mi algoritmo útil y resuelve el propósito?
  • ¿Usará los recursos eficientemente?

La gente aprende observando, también los programadores. Aprendemos mirando la solución de otro o resolviendo el problema nosotros mismos. A través de la experiencia, encontramos un patrón definido para resolver cualquier problema en particular. La gente se da cuenta de que el proceso para resolver tareas similares es siempre el mismo. Y se acepta el que sea más eficiente y óptimo. Un conjunto de operaciones definidas por un procedimiento paso a paso para llegar a la mejor solución se denomina algoritmo.

Al estar expuestos a diversas técnicas y algoritmos de resolución de problemas, tendemos a identificar el patrón algorítmico de resolver un problema y percibir la mejor solución, o usamos un algoritmo conocido previamente para resolverlo, y de ese modo utilizar nuestros recursos de manera eficiente.

Finalmente, un algoritmo le indica cómo operar y resolver un problema.

Siempre es importante entender cómo un algoritmo resuelve un problema. De lo contrario, nunca puedes verlo desde una perspectiva más amplia. Todos los algoritmos no están destinados a todos los datos. Es decir, los datos para un “algoritmo de árbol” pueden verse diferentes a los de un “algoritmo gráfico”.

Para asegurarse de que un programador encuentre los datos correctos, debe comprender qué es la estructura de datos.

¿Qué es la estructura de datos y por qué estudiarla?

Una computadora es un conjunto de reglas lógicas. Estas reglas pueden denominarse un algoritmo, pero las reglas solas son inútiles hasta que tienen datos a los que se pueden aplicar.

La estructura de datos es una forma de almacenar y organizar los datos en la memoria para que puedan recuperarse y utilizarse de manera eficiente cuando sea necesario. Varias estructuras de datos se usan en diferentes aplicaciones y algunas están diseñadas para ser utilizadas solo para una tarea específica.

Para administrar todos los datos y lidiar con la complejidad de un problema, los científicos de computación utilizan la técnica del Tipo de datos abstractos (ADT) para ver el panorama general en lugar de solo la salida. Al crear modelos abstractos de datos, los científicos pueden usar formas mejores y más eficientes para resolver un problema en particular, en lugar de preocuparse por la información irrelevante.

ADT es un modelo matemático donde los datos se ordenan según el comportamiento del usuario. El modelo ADT no toma en consideración la implementación de esta información o la construcción final. Al proporcionar la abstracción, resumimos los datos que luego se procesan para un mejor uso.

Las estructuras de datos que tienen operaciones definidas para ser implementadas son ADT.

Elegir el conjunto correcto de estructuras de datos de cualquier base de datos para implementar un algoritmo es un componente clave para resolver un problema, sin el cual la información será incompleta o irracional.

Sin el conocimiento de la estructura de datos, no podrá organizar sus datos en un formato adecuado y eficiente. Sin el conocimiento de la estructura de datos, se sentirá confundido acerca de qué estructura de datos usar, como si usar una matriz o una lista vinculada para un problema dado. Comprender las estructuras de datos y los algoritmos a veces se siente innecesario cuando usa las funciones de la biblioteca. Pero cuando empiezas a lidiar con nuevos problemas, se vuelve imperativo.

Si revisas este increíble artículo, puedes aprender a codificar mediante programación competitiva. Le indica por qué necesita aprender conceptos de estructura de datos y algoritmo para obtener mejores resultados y comprender el problema rápidamente.

También puede leer cómo los algoritmos están dominando nuestro mundo y saber qué tan importante es entenderlos y aprenderlos.

Solo para reiterar, no puede hacer una casa simplemente colocando un ladrillo sobre otro: necesita tener un entendimiento de un problema, su solución proyectada y una percepción de cómo lo va a resolver.

Puedes leer otros blogs sobre algoritmos aquí: Archivos de algoritmos | HackerEarth Blog

La primera razón por la que le insto a que estudie algoritmos es porque muchos de ellos son bastante generales y la necesidad de un determinado puede surgir muchas veces a lo largo de su carrera (si elige ser, o es, algún tipo de desarrollador). Si está atascado en un problema, podría haber un algoritmo publicado que podría ayudarlo; sin embargo, si no los ha estudiado demasiado y, por lo tanto, no sabe que existe el que necesita, va a perder el tiempo pensando en cómo manejar la situación, y luego probablemente escriba una solución subóptima al problema. también.

La segunda razón es que aumentará sus habilidades de resolución de problemas y de lógica, por lo que significa que estudiarlas le beneficiará incluso si nunca necesita implementar ninguna de las que leyó en toda su vida. Steve Jobs dijo una vez que pensaba que todos deberían aprender a programar una computadora porque le enseña a pensar. Estoy completamente de acuerdo con esta afirmación, y los algoritmos de aprendizaje lo llevan aún más lejos. Si estudia y comprende por qué los problemas se han resuelto de ciertas maneras, tendrá un efecto masivamente positivo en la forma en que abordará los problemas en el futuro, tanto en el desarrollo de software como en otras áreas de la vida.

La tercera razón es que muchas entrevistas con desarrolladores son de naturaleza técnica, por lo que es probable que se le interrogue sobre algoritmos, estructuras de datos, etc., si esa es su industria.

Debido a que el algoritmo es muy útil, podemos verlo en todas partes (búsqueda web, publicidad, recomendación de artículos en la tienda en línea …). Podemos aprender algoritmos para resolver problemas y mejorarlos para resolver problemas de manera más eficiente. Dicho de otra manera, Algoritmo + Estructuras de datos = Programación, debe aprender algoritmos si desea aprender programación.

Por ejemplo, todos sabemos cómo determinar si un número [math] n [/ math] es primo al tratar de dividir de 2 a [math] n – 1 [/ math]. También podemos reducir el límite superior a [math] \ sqrt n [/ math]. Y podemos usar otro algoritmo que llame a Solovay – Strassen_primality_test. La complejidad de este algoritmo de tres es: [math] O (n), O (\ sqrt n), (O (k * log (n) ^ 3)) [/ math]. ¿Qué significa la complejidad del algoritmo y cómo se importa para mejorar la complejidad del algoritmo? Puedes aprenderlo leyendo este enlace.

Este es un ejemplo simple para expresar un uso de algoritmo. El algoritmo está en todas partes en nuestra vida, por favor disfrútalo y aprendelo.

Algunos enlaces para ayudarlo a saber más sobre el uso del algoritmo: vida en el algoritmo, estructuras de datos base y algoritmo en el kernel de Linux.

Un ejemplo muy simple. Digamos que tienes un millón de números ordenados de menor a mayor. 1,3,10,15,18,19,21 …… .. Usted quiere encontrar el índice de un número, por ejemplo 554963

Podría decir que las computadoras son rápidas, por lo que simplemente verifique desde el primer número hasta el último, si encuentra uno que coincida con el número 554963, devuelva el índice. Sí, esto funcionará, si el número se encuentra en la posición 400,000, habría comparado todos los números del índice 0 a 400,000 solo para obtener un solo número …

Y ahora si usas esta técnica.
Verifique el número del medio, que está en el índice 500,000 si es> su número, luego divida a la mitad de 0 a 500,000, compare nuevamente el número del medio, es decir, en el índice 250,000, si es menor que su número, divídalo nuevamente, pero esta vez del índice 250,000 a 500,000. Sigue dividiendo hasta llegar al número de 400,000. Si tiene un millón de números, le tomaría aproximadamente (registro 2 ^ 20), lo que equivale a unos 20 pasos …

Así que la primera técnica te hizo comparar 400,000 números, la segunda que comparaste solo 20 números. ¿Cuál será más rápido?

Si esa no es una razón suficiente para estudiar algoritmos, entonces no sé qué haré. Por la forma en que esta segunda técnica se llama búsqueda binaria, le sugiero que lea sobre ella.

La vida se trata de resolver problemas. Llegar al fondo de un tema generalmente crea dos nuevos, pero esto es lo que hace que la vida sea tan especial. Algunos problemas afectan a todos: administrar un presupuesto familiar, encontrar la ruta más corta a un destino o clasificar la lavandería. Afortunadamente, con la ayuda de algoritmos y una buena dosis de creatividad, las actividades cotidianas pueden convertirse en algo más emocionante que su entretenimiento habitual. ¿No lo suficientemente convincente? Lea más argumentos en el artículo: Algoritmos: por qué cada desarrollador debe conocerlos. Espero que te sea de utilidad.

Estudias algoritmos para aprender cómo hacer que tus programas sean eficientes.

Por ejemplo: digamos que estás haciendo una simulación de naves espaciales de carreras. Hay un algoritmo de búsqueda de caminos para controlar las naves espaciales, un algoritmo de detección de colisiones para detectar si las naves espaciales están chocando entre sí o con asteroides, y un algoritmo de clasificación para acelerar la detección de colisiones. Queremos mantener el juego a menos de 60 fps, y algoritmos eficientes es la forma en que se logra esta eficiencia.

Saber las compensaciones de qué algoritmo usar e incluso saber cómo implementarlas resultará ser muy útil en el futuro.

La idea de estudiar algoritmos es ayudarlo a aprender a PENSAR como un programador.

Escribir y diseñar software requiere poder pensar y codificar pasos individuales para lograr los resultados deseados.

Si bien es posible que nunca aprendas los algoritmos que aprendes en la escuela, RECORDARÁS el proceso mediante el cual los desarrollas.

Y eso es lo que necesitas aprender!

La definición estándar de algoritmo es:

Un algoritmo es cualquier procedimiento computacional bien definido que toma algún valor, o conjunto de valores, como entrada y produce algún valor, o conjunto de valores como salida.

En otras palabras, define un proceso paso a paso para resolver un problema en particular.

Ahora vamos a su pregunta, al estudiar los algoritmos, podrá encontrar el mejor algoritmo para su problema (ya que existen múltiples algoritmos para un problema).

Al estudiar los algoritmos, puede diferenciar dos o más algoritmos en función de la eficiencia, la utilización de los recursos, el tiempo para resolver problemas y la precisión.

¡Espero que esto ayude!

Bueno, son importantes especialmente en cualquier campo de la ciencia y la ingeniería y, básicamente, sin algoritmos casi no se hacen, un algoritmo es un paradigma de resolución de problemas y, si conoce los algoritmos, puede resolver diferentes tipos de problemas de manera correcta y eficiente.

Los algoritmos son lo más importante en la programación. Solíamos estudiar varios algoritmos escritos por algunos grandes y explorarlos desde el punto de vista de la optimización para desarrollar nuestra comprensión de cómo abordar un problema de una manera más integral. En la vida práctica, estás escribiendo algoritmos para tus problemas diariamente. Por lo tanto, debe tener un conocimiento sólido de cómo se escribe un buen algoritmo, cómo funciona y cómo debe optimizarse.

Inicialmente, cuando me enteré de los algoritmos, descubrí que se trataba de un estúpido proceso de pérdida de tiempo. Entonces pensé que si podía programar directamente, ¿por qué debería perder mi tiempo en algoritmos?
Pero más tarde, cuando las cosas se pusieron más complejas, me di cuenta de que era mucho más esencial analizar primero el algoritmo del programa. Cuando mis amigos y yo nos reunimos, nunca discutimos las sintaxis de los programas, sino los algoritmos. Era mucho más fácil comunicarse utilizando algoritmos porque cada uno de nosotros pertenecía a tecnologías diferentes.
Además, no todos pueden entender un programa, pero la mayoría de las veces todos entienden un algoritmo y es por eso que son esenciales para estudiar.

Para que pueda escribir un motor de búsqueda que emita resultados como estos: https://www.quora.com/search?q=w

Oye, sigue el enlace al post en mi blog donde explico la razón detrás de estudiar algoritmos. ¿Por qué necesitamos estudiar algoritmos?