Porque,
- 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.
- ¿Es posible que un ingeniero mecánico de BITS-Pilani, India, continúe con el aprendizaje automático después de graduarse?
- ¿Cómo controlar el estrés? Estoy en el 10mo estándar
- Ya no voy a la escuela después de abandonar el último año de secundaria. ¿Cómo puedo obtener conocimiento?
- Soy un estudiante promedio. Obtuve un 8.2 CGPA en 10, un 76% en 12 y un 65% en B.Sc. ¿Estas marcas hacen alguna diferencia cuando se trata de conseguir un trabajo en el futuro?
- ¿Qué hace retomar una clase universitaria que previamente dejaste con una F?
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