Déjame responder esta pregunta desde otro lado, principalmente mi propia opinión
¿Por qué es importante el algoritmo?
De hecho, todo en el mundo digital es algorítmico, todo lo que crees también será algorítmico. ¿AI? sí, algoritmo, teoría en este caso, se te ocurre que la implementación decide qué hacer después. Incluso, los números aleatorios son algorítmicos, lo que significa que no existe dicha aleatorización en el mundo digital.
Probablemente, algunos de los programadores de nivel de aplicación autoaprendidos todavía no se dan cuenta de la grandeza del algoritmo. Es porque están haciendo / implementando algoritmos demasiado básicos. Por ejemplo, supongamos que un programador tiene que hacer un formulario de inicio de sesión. Todo lo que tiene que hacer es llamar, una de las funciones ya implementadas con la ayuda de lenguajes de programación de alto nivel, un par de campos de entrada, obtener el valor y verificar si las entradas coinciden con uno de los datos del usuario. Eso es. Pero, de hecho, el algoritmo todavía se está utilizando aquí.
Veamos otro ejemplo simple con respecto a un mejor algoritmo es mejor.
tarea: encontrar la suma de los primeros N enteros positivos.
- Si sabemos cómo funciona un algoritmo de hash de contraseña en particular, ¿por qué no podemos simplemente crear una contraseña que genere el mismo hash?
- ¿Cuáles son los trabajos orientados a la lógica pura para los programadores?
- ¿Cuáles son algunas de las lagunas en el algoritmo de reserva de entradas de irctc?
- ¿Cómo funciona el algoritmo de estimulación del presupuesto publicitario de Facebook?
- ¿Cuáles son algunas aplicaciones del mundo real en las que es útil el aprendizaje incremental de algoritmos (aprendizaje automático)? ¿Se prefieren las SVM para tales aplicaciones?
Una solución / algoritmo natural simple sería el siguiente:
suma -> 0;
i = 1..N:
suma = suma + i;
imprimir suma;
Arriba, el primer paso fue encontrar el algoritmo. El algoritmo era simple, uno sin problemas, iterar a través de todos los números del 1 al N y aumentar la suma por el número de iteración actual. Esto toma asintóticamente el tiempo O (N).
Solución 2: ¿qué pasa si uno conoce una fórmula matemática para que el algoritmo consista en un solo comando como “sum = (n * n + n) / 2”. Esta solución funciona como si fuera solo un comando que asintóticamente O (1), cantidad de tiempo constante. Esta solución también es eficiente en memoria.
Si tiene suficiente práctica para resolver problemas diseñando un algoritmo apropiado, no importa qué lenguaje de programación use para implementar. Como puede ver ahora, el lenguaje de programación es solo, quizás no solo, un aspecto tecnológico de una tarea / proyecto en particular.
Entonces, si eres un estudiante, este es el derecho para que practiques / aprendas el algoritmo. Si está planeando / pensando aprender un algoritmo mientras trabaja, eso no va a funcionar. Al menos, esto hace que tengas tiempo para terminar el proyecto el tiempo suficiente como para hacerte sentir como un fracaso.
Es por eso que creo que su profesor le dijo que no se preocupe por un lenguaje de programación y se centre en el algoritmo.
¿Qué pasa con la estructura de datos?
¿Qué es una estructura de datos? ¿Qué es un dato?
En el mundo digital, todo lo que guardas son datos. La “estructura de datos” son los datos y su estructura.
Vamos a verlo en un ejemplo simple. Digamos que ahora tiene una lista de números y puede insertarle un número y también, si se le solicita, debería poder eliminar el número más pequeño de la lista.
Solución 1:
Sin embargo, todavía se trata del algoritmo. Vamos a usar una matriz simple.
* Para insertar un número, simplemente podemos ponerlo al final de la matriz.
* Para encontrar el número más pequeño, supongamos que el primer número de la matriz es el más pequeño y compárelo con el siguiente número y, si es más pequeño, nuestro número más pequeño, recójalo e itere al siguiente hasta el final de la matriz. Eso llevaría tiempo O (N), porque en el peor de los casos, el más pequeño sería al final de la matriz.
* ahora para eliminar el elemento más pequeño, ya que estamos usando la eliminación de matriz significa poner todo el número en la matriz adelante en una posición. Entonces, el peor de los casos sería eliminar el primer elemento de la matriz que despierta el tiempo O (N).
Esa solución está bien cuando el tamaño de la matriz es pequeño, pero tomaría una elegante cantidad de tiempo si el número es alto.
Solución 2:
Supongamos que ahora ha encontrado una manera de estructurar los datos para que pueda encontrar el número más pequeño de la lista de números en O (1) cantidad de tiempo constante y eliminar el número más pequeño en O (logN) e insertar un número en la lista en O (LogN).
Esa solución sería mucho mejor tanto en el sentido de la memoria como en la velocidad.
¿Quieres aprender y quieres que lo hagas tú mismo? Es por eso que debe estudiar la estructura de datos. Para su información, esa estructura de datos utilizada en la solución 2 es, montón mínimo / cola de prioridad.
Ahora con respecto a C ++
Bueno, puedes encontrar muchas respuestas de quora o google. Tal vez solo busque “por qué c ++”. Soy un poco reacio, aunque vago.
Bien, desde mi propia experiencia obtuve toda la práctica en algoritmo, estructura de datos y c ++ en jueces en línea como www.spoj.pl, www.topcoder.com, codeforces.com. También considere hacer una competencia de programación ACM / ICPC en su escuela.
Gracias por hacer una pregunta y lo siento si tomó demasiado tiempo terminar toda la lectura larga.