¿Por qué debo aprender estructuras de datos y algoritmos?

Porque,

  1. No estar limitado por el lenguaje de programación para la estructura de datos.

Sin un buen conocimiento de las diversas estructuras de datos, es fácil limitarse a pensar en soluciones en términos de las estructuras de datos proporcionadas directamente por el lenguaje.

Si fuera programador de Java, probablemente estaría pensando en soluciones solo en términos de lo que se proporciona en el paquete java.lang.util.

Bueno, hay mucho más. Tomemos, por ejemplo, una necesidad simple: en un teléfono básico de gama baja, a medida que el usuario escribe algo, le gustaría presentar al usuario la función de “autocompletar”. Pensar en términos de las estructuras de datos fácilmente proporcionadas por el lenguaje / bibliotecas no ayuda mucho.

2) Mejor hardware no es una solución.

Ninguna cantidad de hardware adicional va a compensar un algoritmo ineficiente. La supercomputadora tarda 1 semana en ordenar mil millones de números usando ordenación por inserción, mientras que una computadora doméstica tarda 18 minutos en ordenar mil millones de números utilizando ordenación por fusión.

Tipo de Inserción: O (n2)

Combinar clasificación: O (n logn)

3) Encontrará formas muy interesantes y no intuitivas de resolver problemas.

Dada una matriz con n / 2 elementos distintos y n / 2 copias de otro elemento. Encuentra el elemento que falta.

Bueno, la solución normal en la que todos pensaríamos es hacer un escaneo lineal a través de la matriz y encontrar el elemento faltante después de leer los elementos n / 2 + 2 en el peor de los casos. [Peor caso = todos los n / 2 números distintos aparecen primero en la matriz y luego el número que se repite aparece n / 2 veces]

Curiosamente, esto podría resolverse más rápido de esta manera:

1

2

3

4

5

6

7

mientras que (verdadero) hacer

i = Rand.numberWithinRange (1 a n)

j = Rand.numberWithinRange (1 a n)

si (i! = j) y a [i] = a [j] entonces devuelva i;

¡Y la probabilidad de que el algoritmo no se cierre en 10 iteraciones es 0.1074!

La “aleatorización” resulta ser una forma práctica increíble de resolver una sección de problemas.

Y para dar una aplicación ish más “del mundo real” para la “aleatorización”: ¡la versión aleatoria de quicksort es uno de los algoritmos de clasificación más prácticos / eficientes!

Prepárese para ser sorprendido por un montón de maneras divertidas, no intuitivas pero increíbles de resolver problemas

4) Actualice un poco la probabilidad, el logaritmo y algunas matemáticas divertidas

Es interesante volver a algunas matemáticas, específicamente sobre probabilidad, expectativas, logaritmo …

5) Aprender algunos paradigmas de diseño interesantes.

Mientras aprendes diferentes algoritmos, también estarás captando los diferentes paradigmas de diseño de algoritmos.

(Dividir y conquistar, método codicioso, Backtracking, programación dinámica)

Cuando hay un nuevo problema que resolver, este conocimiento ayuda a encontrar una solución eficiente.

6) es una habilidad

Ciertas cosas son solo “conocimiento”, que se puede aprender a lo largo del camino cuando surge una necesidad.

Por ejemplo: no es realmente necesario conocer todos los marcos “MVC” que hay. Saber uno es suficiente. ¿Hay necesidad de usar algún otro framework MVC? Bueno, eso podría ser aprendido en el camino ..

Pero los algoritmos y las estructuras de datos no entran en esa categoría. Es una habilidad, deducir un algoritmo para un problema / Es una habilidad para analizar la complejidad y decir qué algoritmo es el mejor / Es bueno aprender con anticipación. Adquirir una habilidad es interesante, ¿verdad?

7) Complejidad cuadrática cuando existe solución O (n)

¡Sin un poco de aprendizaje de algoritmos, es muy posible que encontremos soluciones ineficientes cuando ya existe una eficiente!

8) Entendiendo que hay detrás de las herramientas cotidianas.

Casi todas las herramientas que usamos, día tras día, aplican algunos algoritmos geniales.

Los mejores cursos en línea sobre algoritmos y estructuras de datos;

  • Aprendizaje de estructuras de datos y algoritmos.
  • Estructuras de datos prácticas y algoritmos en Java + HW
  • Algoritmos y estructuras de datos en Python

Respuesta de:

La respuesta de Abdelrahman Hamdy a ¿Cuáles son los beneficios de los algoritmos de aprendizaje y las estructuras de datos en la ingeniería de datos?

Según algoritmos de aprendizaje:

Imagine que desea crear una aplicación que busque en una ciudad específica el camino más corto para llegar a un destino específico en el que llega tarde, tenga en cuenta que aquí llega tarde, lo que significa que no puede esperar, simplemente la respuesta para ese problema es eso, pruebe cada camino y minimice la longitud, finalmente diga al usuario el camino con el camino mínimo, lo que llevará mucho y mucho tiempo, y no puede esperar, por lo que necesita un método específico o “algoritmo” para haz esto rápido

Este es un ejemplo simple, muchos otros problemas pueden tardar horas o días en resolverse con la solución nativa, ¡también puede llevar años! ¡Puedes imaginar! ver este :

Según estructuras de datos:

Al igual que con los algoritmos, algunas formas de almacenar datos hacen que sea más fácil y más fácil manipularlos, que es lo que desea, por ejemplo, suponga que tiene un sistema que genera valores generosos a su relación de azúcar en la sangre, se necesita un registro por cada 0.1 segundos, y le advierte con el valor más bajo, puede implementarlo usando vector, y cada vez que agregue un registro, vaya calculando el mínimo, que lleva mucho tiempo, por otro lado puede usar la prioridad cola que mantiene el valor más bajo en sí.

Estos también pueden ayudar:
¿Por qué aprender algoritmos y estructuras de datos?
¿Debo aprender primero sobre estructuras de datos y algoritmos o sobre el lenguaje de programación Java primero?
Cómo aprender las estructuras de datos y los algoritmos te hacen un mejor desarrollador.
¿Cómo aprendo algoritmos y estructuras de datos?

La resolución de problemas es una de las partes esenciales de la ingeniería de software. Un algoritmo es un procedimiento paso a paso para realizar la tarea. Una buena habilidad para hacer algoritmos es clave para resolver los problemas de manera efectiva.

Fuente de la imagen: Wikimedia Commons.


¿Qué es la estructura de datos?

La estructura de datos es una forma de organizar y almacenar datos. El aprendizaje de las estructuras de datos nos dará una idea sobre cómo manejar los datos computacionalmente.


Las estructuras de datos definen el rendimiento de la aplicación. Implementar la estructura de datos adecuada para el problema es importante si no lo hicimos, la velocidad y la eficiencia de la memoria de la aplicación disminuirán. Al mismo tiempo, los algoritmos eficientes también son importantes.

Creo que he escrito esta respuesta antes, parece ser una pregunta común:

Comprender las estructuras de datos y los algoritmos puede parecer innecesario en una época en la que usarás las funciones de biblioteca para el 90% de tu codificación. ¿Por qué, entonces, debería molestarse en aprender la implementación, cuando la implementación está oculta de usted detrás de una abstracción?

Hay varias respuestas …

– Debe aprender las estructuras de datos y los algoritmos, de modo que entienda la lógica detrás del comportamiento de estas abstracciones. Si no lo hace, eventualmente los aplicará de una manera que le hará daño.

– La comprensión de los algoritmos le permite comprender los problemas para los cuales se diseñaron esos algoritmos. Esa comprensión lo ayudará inmensamente en su trabajo de dat-to-day, porque esos problemas son problemas básicos de lógica e informática que aparecen en todas partes, sin importar si está trabajando en software empresarial, controladores de hardware, juegos o aplicaciones móviles.

– Necesitas entender los algoritmos y las estructuras de datos porque he visto un código escrito por personas que no lo hicieron; Y confía en mí, no quieres ser ese tipo.

– Finalmente, como señala Steven de Rooij a continuación, los algoritmos son hermosos. Hay una inmensa satisfacción en trabajar para comprenderlos. Ellos son los últimos enigmas; Piezas de lógica compactas y simples que se combinan perfectamente para realizar una sola tarea.

Hay muchas cosas que puedes lograr sin aprender algoritmos.

De hecho, a medida que más y más abstracciones manejan los detalles desordenados de bajo nivel para usted, la codificación se está volviendo accesible para todos, incluso aquellos sin un título de CS.

Pero eso no significa que las estructuras de datos y los algoritmos no sean importantes. Cuando aprendes algoritmos, aprendes formas de resolver problemas comunes.

Estas soluciones siempre te ayudarán a resolver nuevos problemas a medida que surjan. Comprenderá por qué algunos problemas son más difíciles que otros y si un problema puede resolverse.

Pero lo más importante para mí es que necesitas conocer un algoritmo para saber si puedes usarlo en una situación.

por ejemplo, si está tratando de encontrar una solución optimizada y no conoce la sintaxis de uno de los pasos, siempre puede buscarla.

Pero si no tienes un conocimiento profundo de los algoritmos, no sabrás las opciones que tienes para la optimización. [1]

Notas al pie

[1] Por qué todo programador debería aprender a optimizar algoritmos

Eso depende de tus metas. Las estructuras de datos y los algoritmos me parecen fascinantes, así que aprendo sobre ellos porque me interesan. Por ejemplo, creo que es sorprendente que haya una serie de métodos para clasificar una lista que son fundamentalmente diferentes, pero igualmente hermosos y elegantes: ¿quién lo hubiera pensado?

Entender cómo se pueden resolver los problemas fundamentales parece dar una comprensión más profunda de la naturaleza del problema y, por lo tanto, una mejor comprensión del mundo. Por ejemplo, si un buen matemático o científico de la computación ve una bandada de pájaros, puede preguntarse sobre el algoritmo que usan los pájaros para determinar dónde volar. ¿Es suficiente para que el ave solo mire a las aves vecinas o tiene que hacer una planificación complicada? Si puede comprender el algoritmo que describe su comportamiento, esto ayuda a comprender las aves a un nivel más profundo que simplemente “el rebaño parece estar unido”. En realidad te ayuda a entender la cognición de las aves.

De manera similar, aprender acerca de los algoritmos evolutivos te hace pensar más claramente acerca de la teoría de la selección natural de Darwin. Aprender acerca de la compresión y representación de datos le informa sobre cómo se pueden codificar los rasgos de una planta en su ADN; aprender sobre recursión y fractales le ayuda a comprender cómo la planta crece en formas tan complejas … ¡y así sucesivamente!

Pero, por supuesto, también puede aprender sobre ellos si desea mejorar sus habilidades de programación o aprobar algún grado u otro. Esas son las razones aburridas, ¡pero pueden ser igualmente válidas!

Las estructuras de datos son una formación importante para mantener los datos. En informática, hay estructuras simples a complejas que pueden contener datos en diferentes formatos. Por ejemplo, desde una matriz simple hasta estructuras complejas como los árboles B +. Es importante estudiar estas estructuras porque en problemas de computación complejos como búsqueda, clasificación, hash, etc., se utilizan muchas de estas estructuras.

Los algoritmos son una forma de procesar los datos. Mientras que las estructuras de datos definen cómo almacenar los datos, los algoritmos representan cómo procesar los datos.

La totalidad de los problemas informáticos evolucionan en torno al diseño e implementación de estructuras de datos y algoritmos de tal manera que los datos se procesan y se accede a ellos en un mínimo espacio y tiempo de complejidad.

Es primordial estudiar tanto las cosas para embarcarse en el viaje hacia el estudio de la informática.

Las estructuras de datos y los algoritmos desempeñan un gran papel en la programación, pero solo si se sabe realmente cómo escribir un programa. Después de aprender la programación de Basic C, generalmente se recomienda aprender Estructuras de datos y algoritmos, ya que es muy útil para resolver un solo programa con diferentes métodos y, en ocasiones, las estructuras de datos también desempeñan un papel importante en la resolución de problemas, algunas veces los arreglos funcionan, a veces las listas enlazadas y algunas veces los árboles y las tablas hash funcionan, pero para convertirse en un buen programador, debe aprender las estructuras de datos y le ayudará a resolver problemas en la mayoría de los sitios web de codificación en línea como Codechef, topcoder, etc.

No necesitas estructura de datos y algoritmos para aprender programación. Aprender programación es simplemente aprender un nuevo lenguaje. Primero debe aprender el idioma y sus diversas funciones y, después de hablarlo con fluidez, puede comenzar a resolver problemas relacionados con la estructura de datos, etc.

Por otro lado, la estructura de datos y el algoritmo es un concepto diferente.

Porque son herramientas útiles.
Eventualmente se encontrará con un problema en el que conocer el algoritmo correcto proporcionará una solución inmediata al problema existente, o podrá crear su propia solución más rápido haciendo uso de la estructura de datos correcta.

La optimización de sus soluciones es otro factor: las soluciones ingenuas a menudo son menos que óptimas, y una solución optimizada puede ser órdenes de magnitud más rápida que una subóptima.

Para ser honesto, estos dos son preocupaciones separadas para mí. El pensamiento algorítmico es importante ya que define su enfoque. La programación es solo una forma de decirle a la computadora qué hacer en un lenguaje específico. Hoy programas en C ++, mañana lo harás en Java o puede ser algún otro lenguaje.

Gracias por A2A

Supongamos que quieres aprender a andar en bicicleta, ¿te preguntarás por qué deberías saber sobre los engranajes y los frenos?

Definitivamente no, porque no son diferentes entre sí y los engranajes y los frenos son lo básico para andar en bicicleta de una manera mucho mejor …

Similar es el caso de las estructuras de datos y algoritmos, que no son diferentes de la programación sino que son conceptos de construir un programa de manera eficiente …

Esos son los conceptos que permiten que el código se ejecute de la forma en que se utilizan; …

Similar a andar en bicicleta, la aplicación de engranajes y frenos será la raíz para mostrar las habilidades, las estructuras de datos y los algoritmos son la raíz para mostrar las habilidades de programación sin saber cuál es el conocimiento del lenguaje de programación sin valor …

Puede haber múltiples razones. Pienso lo siguiente

  1. Las cosas fundamentales no se pueden cambiar. Las tecnologías siempre cambian el período de tiempo .eg java implementa la estructura de datos propia y python, c ++.
  2. Si eres fuerte con el algoritmo y la estructura de datos, puedes aprender cualquier tecnología nueva muy rápido.
  3. y también obtendrá un trabajo mejor pagado.

Debido a que la estructura de datos es una forma efectiva / eficiente de organizar los datos para que puedan acceder de manera muy eficiente y podamos ordenar la gran cantidad de listas / datos utilizando la estructura de datos y también podemos vincular un dato con otro dato, resolver un gran gráfico problema por lista enlazada

Hey, siga el enlace al post en mi blog donde explico la razón por la que estudiamos los algoritmos. ¿Por qué necesitamos estudiar los algoritmos?

Porque ayuda enormemente a resolver problemas que una persona que no conoce de DS y algos tendría un tiempo realmente difícil de resolver.

More Interesting

¿Es importante tener un título de doctorado para convertirse en un profesor universitario de biología?

¿UIUC solo solicita la hoja de la décima nota a los estudiantes indios para la admisión de estudiantes universitarios?

¿Por qué debería tratar de obtener más del 94% de A?

¿Cómo puedo sacar el máximo provecho de mi beca de investigación de pregrado?

Estoy en el tercer año de ingeniería informática (Universidad de Mumbai). Tengo unas vacaciones de un mes. ¿Qué debo hacer durante este mes para mejorar mi currículum?

Quiero especializarme en biología en USF, ¿qué debo hacer en HS para prepararme?

¿Cuál es el mejor programa para elegir en NIFT?

¿Cuáles son algunos consejos para equilibrar mi vida universitaria entre la diversión (fiestas, pasatiempos, etc.) y mi rendimiento académico real, especialmente estudiando en el extranjero?

¿Qué debo hacer durante mi internado?

No quiero volver a ser un mal estudiante. ¿Que puedo hacer?

Tengo la oportunidad de estudiar en el extranjero, pero podría hacer que mis padres sean pobres. ¿Qué sugieres que haga?

Cómo obtener las transcripciones de la Universidad de Osmania

Soy un estudiante de primer año de B.Tech y quiero hacer un MBA después de UG. ¿Cuál es el momento adecuado para empezar a preparar? ¿Es recomendable unirse a MBA directamente?

Estoy en la clase 11 y me estoy preparando para los NEET y AIIMS. ¿Cuál debería ser la estrategia básica para romper el examen?

Acabo de llegar a 10 grado. ¿Qué puedo hacer en esta clase para NDA para estar un paso adelante?