¿Cómo se debe comenzar a aprender Algoritmos?

Es difícil darle una respuesta dado que sabemos muy poco sobre sus antecedentes. Sin embargo, puedo decirte cómo lo hice. Para darle un poco de contexto, tengo un título en física y mi trabajo ha consistido en escribir más de 50k líneas de código C ++ para controlar instrumentos, hacer simulaciones y analizar datos. Sin embargo, nunca había estudiado CS formalmente y no tenía idea sobre algoritmos ni antecedentes matemáticos discretos (en física, al menos a nivel de pregrado, todo se basa en cálculo / álgebra o involucra grupos continuos).

Lo que hice fue comprar el libro “Algorithms” de Sedgewick, leerlo y hacer muchos de los ejercicios (también está el libro CLRS que tiene muy buena reputación). Tuve cuidado de leer un capítulo a la vez y no avanzar al siguiente tema hasta que pude completar los ejercicios sin mirar el texto. Ayuda a cumplir con un cronograma y enfocarse en completar las cosas (decir comprensión y poder implementar el montón) en lugar de pensar qué tan lejos está del final. Un período de 3 a 5 meses es bueno para revisar el libro mientras se trabaja a tiempo completo. También sugiero hacer problemas en Hackerrank (o sitio web equivalente) porque proporciona una forma gamificada e instantánea de practicar lo que estás aprendiendo.

También disfruté leyendo el “Manual de diseño de algoritmos”, que destaca algunas situaciones prácticas en las que se utilizan algoritmos para resolver problemas de la vida real, y el libro de Gayle Laakmann McDowell “Entrevista de descifrado”, que pone su conocimiento en perspectiva con lo que se pide en una entrevista de trabajo en una gran empresa.

Puedo decir que fue una experiencia muy agradable, porque me convencí de que podía aprender cosas sin tomar clases. Requiere algo de disciplina.

EDITAR: Ahora, los detalles de la pregunta indican que el autor de la pregunta está específicamente interesado en los algoritmos de clasificación de música. Esto parece ser un problema de aprendizaje automático. Hay mucha literatura específica sobre este campo (también, una búsqueda en Google Scholar de clasificación de música arroja 195k resultados). Mi respuesta original se refiere a algoritmos generales y no específicamente al aprendizaje automático. Creo que la misma filosofía se aplica al aprendizaje automático, pero dado que este es un campo en desarrollo activo, puede ser útil tener acceso a la literatura y conocer a personas del campo. Hay muchos expertos en ML en Quora, pero no estoy seguro de que encuentren la pregunta como se indicó. Una pregunta más específica sobre la clasificación de la música puede traer respuestas más específicas.

  • Comience desde lo básico. Elija un lenguaje de programación primero. Yo diría que vaya con C ++, ya que tiene las ventajas adicionales de la Biblioteca de plantillas estándar (STL) junto con su alta velocidad y menor longitud de código. Obtenga los beneficios de STL (Encienda C ++ con la Biblioteca de plantillas estándar, La Biblioteca de plantillas estándar C ++, Contenedores – C ++)
  • Practica la codificación competitiva. Sitios como HackerRank, HackerEarth ayudan mucho a conocer ciertas técnicas y algoritmos. También es posible que desee resolver los problemas de SPOJ en este orden: Juez de Esfera en línea (SPOJ)
  • También eche un vistazo a esto: estructuras de datos y algoritmos. Es una lista extensa de las estructuras de datos y algoritmos más utilizados, y algunos problemas relacionados.
  • Cuando realmente te sorprenda un determinado problema, busca la solución de otra persona. Pide su ayuda de los foros. Intenta pensar como ellos piensan. Esto mejora su enfoque ante un determinado problema en cuestión.
  • Introducción a los algoritmos (CLRS) es un libro maestro . Atraviésalo. También puede inscribirse en un curso de algoritmos de Coursera (Algoritmos, Parte I, Algoritmos, Parte II) Intente implementar los algoritmos que aprende. Como se menciona en los comentarios, Algorithms, 4th Edition de Sedgewick and Wayne también es un buen libro.
  • Aprenda manipulaciones de bits de GeeksforGeeks y practique problemas relacionados.
  • ¡Stack Overflow también viene al rescate, más a menudo de lo que piensas!

¡Sigue practicando! ¡¡Todo lo mejor!!

Gracias por A2A

Hola saubhagya

Entiendo tu entusiasmo, pero, por favor, no entres en Algoritmos de aprendizaje …

Digo, la mejor manera de hacerlo es aprender las estructuras de datos y la asignación de memoria dinámica como punteros (esto es muy importante cuando se trata de implementación).

*** ** Tenga una idea clara sobre los punteros y su gestión de datos *****

Luego, utilizándolos, aprenda estructuras de datos básicas como

  1. Lista enlazada (Muy muy imp, ya que le enseña la implementación)
  2. Pilas
  3. Colas, etc. primero

Impleméntelos mucho usando su idioma preferido … Impleméntelos hasta cierto punto

hasta que sienta que es un camino fácil para resolver problemas menores como el intercambio de nodos en una lista, la reversión de una lista vinculada, las inserciones, la fusión de la lista, el empuje emergente en las colas … etc …

———————————————————————————————————————————

Aquí hay un buen problema que puede resolver usando la lista vinculada

Dada una lista de números (tanto + ve como -ve) que se ordenan en absoluto

orden de valores … Ordenarlos en orden original … Solo necesita tener

conocimiento sobre punteros, estructuras, eliminación, inserción, intercambio de nodos, recorrido de una lista vinculada, etc.

Ejemplo

Lista dada ::: (1) -> (-2) -> (3) -> (4) -> (- 5) -> (5)

Lista de salida ::: (-5) -> (- 2) -> (1) -> (3) -> (4) – (5)

—————————————————————————————————————————

De aquí en adelante, le sugiero que aprenda C ++. Es un lenguaje eficiente que tiene bibliotecas incorporadas para diferentes estructuras de datos …

  • Nota :: Pero primero impleméntelos en C antes de pasar a C ++ a pesar de que C ++ proporciona plantillas predeterminadas (misma estructura de datos de pila con diferentes tipos de datos como cadenas, enteros, puntos flotantes, básicamente llamados sobrecarga)

***** La línea anterior es VV V VVV importante … ********** 8

——————————————————————————————————————————

Para las pilas puedes resolver cosas como

Supongamos que hay una secuencia de paréntesis que consta de {,} paréntesis. Debe saber si la secuencia está bien equilibrada

Por ejemplo: {{{{}}}} es una secuencia bien equilibrada mientras que} {y {{{} y {{{} {{} no lo son

Para esto, debes usar pilas de caracteres y lógica simple …

Debe ver si existe un corchete de cierre para cada corchete de apertura y que} debe estar a la derecha del {corchete ..

Ejemplo:

{{{}}} :::: Sí

{}{{ ::: No

—————————————————————————————————————————

Ahora, después de aprender esto, puede comenzar con algoritmos

Asegúrese de obtener un buen agarre de C ++ antes de esto.

———————————————————————————————————————————

Ahora te diré por qué necesitamos un algoritmo

Un algoritmo no es más que una forma que nos ayuda a resolver un problema …

Tiene dos factores clave 1) Eficiencia 2) Ahorro de memoria

Por ejemplo ,

Tiene una lista de números en orden y necesita encontrar si
existe un número particular en la lista o no

Supongamos: lista ::::: 1 2 4 5 6 9 10 15 17
Necesario encontrar: 15

Normalmente iteraríamos la lista y verificaríamos si este elemento existe o
no, así que necesitamos un ciclo que recorra toda la lista y que
los bucles se ejecutan solo (tamaño de lista) veces => O (N)

Ahora, ¿hay algún algoritmo eficiente?

Sí, por supuesto => Búsqueda binaria

Vea, teníamos este elemento del medio en la mano => list [(size / 2)],

Aquí surgen tres casos posibles
1) elemento> lista [(tamaño / 2)];
2) elemento = lista [tamaño / 2)];
3) elemento> lista [tamaño / 2];

Ahora, si sabemos que en cuyo caso el elemento encaja, podemos ignorar
la media lista en la que el elemento no encaja y sigue buscando
otro medio .

Eso significa que podemos ignorar la mitad de la lista en cada iteración y
entonces nuestro espacio de búsqueda se comprime a (tamaño) / 2

T (N) = T (N / 2) + O (1) es la relación de recurrencia

Y así, resolver esto nos da la complejidad de ser O (log (N))
que es mucho más rápido que la ingenua complejidad O (N)

es decir, el uso de este algoritmo hace que la búsqueda se limite al registro (N) veces

No te preocupes, aprenderás cosas más tarde si no entiendes …

Esto te hace entender la verdadera intención de por qué usamos
algoritmo …

Ahora comience a aprender algoritmos en este orden

Complejidad Amortizada

  • Big-Oh, Big -omega, anotaciones Theta y su uso

Por ej .:

Considera este bucle

para (int i = 0; i

Este ciclo se ejecuta n veces, por lo que la Complejidad está en el orden de N => O (N)

Recuerde, implemente estas estructuras en C. Analice la complejidad y el tiempo de ejecución limpiamente …

.. Necesitará mucha ideología y lista de punteros, etc., etc., que se mencionaron anteriormente …

  1. Árbol binario
  2. Árbol de búsqueda binaria (estructuras de datos utilizadas para el almacenamiento rápido de datos)
  3. Árboles negros rojos
  4. Tablas Hash
  5. Muchísimo
  6. Colas_de prioridad
  7. Intentos
  8. Segmentar árboles
  9. Árboles indexados binarios
  10. Matriz de sufijos

Para algoritmos puedes ver

  1. Ventana deslizante
  2. Búsqueda binaria
  3. Ordenando como fusionar, rápido, contar, radix, cubo, inserción, burbuja …
  4. Codiciosos -Algoritmos
  5. Programación dinámica (esto es muy muy importante)
  6. Algoritmos gráficos como BFS, DFS, Djkstra, Prims, Kruskal, Floyd Warshallll, etc. Intenta usar Djkstra con priority_queue
  7. Casco convexo

—————————————————————————————————————————

Recuerde, la práctica es lo que necesita para usar estos algoritmos de manera eficiente

Entonces, mientras aprende un nuevo algoritmo, resuelva problemas relacionados con estas etiquetas en

Y para practicar problemas en estructuras de datos, puede usar

http://www.hackerrank.com/domains

Para obtener recursos, puede aprenderlos de YouTube para videos en vivo o

http://www.geeksforgeeks.org

http://www.topcoder.com

Por encima de dos son los mejores recursos utilizados actualmente y puedes aprender mucho

———————————————————————————————————————

Después de esto, puedes practicar problemas con estos jueces para

Juez en línea A2 (esto tiene problemas de temas sabios en orden de dureza)

http://www.codeforces.com

Juez Esfera Online (SPOJ)

Concurso de programación, concurso de programación, programación informática en línea

Topcoder es repetible, crowdsourcing a pedido, hecho correctamente, a escala.

————————————————————————————————————-

****** Resuelva los problemas por su cuenta, a pesar de que son difíciles …… Si no, mire los editoriales y vuélvalos a implementar (no haga Ctrl + C y Ctrl + V por favor)

Use C en el Inicio si es posible … Aprenderá mucha implementación de ellos

Esto es todo. Pero si se siente cómodo con las implementaciones, puede cambiar a C ++. Tiene nombres de biblioteca predeterminados STL (Biblioteca de plantillas estándar) …

Buena suerte 🙂

Como usted es un programador aspirante, supongo que su objetivo es tener una base sólida en algoritmos, y no solo un interés pasajero.

El primer paso que sugeriría es tratar de comprender las razones por las que necesita métodos sofisticados para resolver problemas. De esta manera, obtendrá una mejor motivación hacia el área. Después de esta etapa, elija un libro dirigido a un curso de algoritmos de nivel universitario. Algunos de los libros más conocidos son Introducción a los algoritmos de Cormen * et al, Algorithm Design (Jon Kleinberg & Éva Tardos), The Design and Analysis of Computer Algorithms de Alfred Aho. Elija uno de ellos y comience a leer cuidadosamente algunos de los capítulos iniciales.

Presta especial atención a los temas relacionados con la complejidad del espacio y el tiempo. Son la clave en el diseño de algoritmos. De hecho, comprenderá una parte de esto mientras ve la motivación para estudiar algoritmos.

La ventaja de usar uno de los libros anteriores es que van acompañados de ejercicios. Entonces puede resolverlos para saber si su comprensión de un tema es buena.

Una vez que haya terminado con los conceptos básicos, y comprenda cómo analizar la complejidad del espacio y el tiempo, tome un capítulo y vea cuál es el problema clave que están tratando de resolver. Ahora intente pensar cuál es la mejor manera de resolverlo antes de continuar en el capítulo. De esta forma, descubrirá cuáles son los cuellos de botella en su solución y cómo la superan. La clave para aprender algoritmos como programador no es “conocer” un montón de algoritmos, sino aprender a diseñar algoritmos más nuevos.

Hacer lo anterior lo ayudará a obtener una base sólida en el diseño de algoritmos básicos.

*Profe. Thomas Cormen está realmente en quora.

Esto supone que tiene habilidades básicas de programación (si no, vea ¿Cuáles son algunas de las mejores formas de aprender programación?):

En mi experiencia como programador, el mejor enfoque para los algoritmos de aprendizaje es combinar la lectura sobre algoritmos con la resolución de problemas.

Además de Wikipedia, leer uno de los siguientes libros realmente ayudará:

Introducción a los algoritmos, tercera edición de Thomas H. Cormen

Algoritmos (4a Edición) por Robert Sedgewick

Cuando comience a leer estos libros, comience a resolver problemas de programación en línea. Mire HackerRank, LeetCode, CodeForces y encuentre los problemas que puede resolver. Comience con los más fáciles, y una vez que esté familiarizado con los algoritmos básicos, aumente gradualmente la dificultad de los problemas.

HackerRank tiene un concurso realmente bueno (para principiantes) en este momento: ’30 días de código ‘. Compruébalo – HackerRank.

Además de eso, ¡diviértete! ¡Si te diviertes, aprender algoritmos y resolver problemas será mucho más fácil!

Además de la programación, lo único que necesitaría es matemática básica, que debería cubrir la probabilidad y el conocimiento de las notaciones básicas. Lo mejor que puede hacer ahora es elegir un libro como Introducción a los algoritmos y, junto con esto, probablemente pueda usar las conferencias en video aquí: Introducción a los algoritmos (SMA 5503), otoño de 2005. El libro contiene suficientes matemáticas que necesitaría para entienda el resto del material y debería estar bien. Además, intente hacer los ejercicios al final de cada capítulo, eso debería ayudarlo a comprender mejor el tema.
Además, una buena manera de aceptar todo esto es utilizar sitios web como http://www.topcoder.com que incluye desafíos de programación y es realmente divertido practicar lo que has aprendido.
Una vez que haya terminado con esto, puede usar Quora para preguntar qué debe hacer a continuación, una vez que tenga una buena base de algoritmos básicos.

Leer.

No, de verdad, lee.

Lea todo sobre algoritmo y diseño que pueda encontrar. Hay libros fenomenales por ahí. Los libros de algoritmos de Sedgewick son buenos. El Manual de diseño de algoritmos de Skiena también es bueno. Juntos, estos libros me siguen en cada estantería en cada trabajo al que voy, junto con The Mythical Man-Month .

Entonces pregunta.

Habla con las personas que respetas. Pregúnteles qué puntos de decisión tenían y por qué tomaron las decisiones que tomaron. Los buenos siempre podrán decirte “Elegí hacer X porque es mejor que A, B de esta manera. Podría haber ido con C, pero sentí que era una mejor opción debido a esto”.

A continuación, hazlo.

Construye cosas. Construye cosas que nunca usarás. Construye cosas que nunca necesitarás. Ve a escribir un programa que resuelva un rompecabezas de Sudoku. Ahora ve a hacerlo de nuevo. Y otra vez. Construirlo de 5 maneras completamente diferentes. Crea un programa que genere rompecabezas de Sudoku y aliméntalo con los solucionadores. Encuentra qué solucionador es el más rápido. Y entonces…

Averigua porque.

El “qué” casi nunca es importante. Quiero decir, sí, es fundamental para terminar el proyecto en cuestión, pero al final si sabes el “qué” sin saber el “por qué”, entonces es mejor que nunca lo hayas hecho. Tienes una viñeta en tu currículum. Ve por una galleta y felicítate. El “por qué” es mucho más importante que el “qué”.

Y para que conste, el Sudoku fue un ejemplo. Pasé mucho tiempo libre haciendo ese ejercicio con un montón de acertijos lógicos en Kongregate y aprendí mucho en el camino.

Compre un paquete de algoritmos en C ++, partes 1-5: Fundamentos, estructuras de datos, clasificación, búsqueda y libro de algoritmos de gráficos en línea a precios bajos en India | Paquete de algoritmos en C ++, partes 1-5: fundamentos, estructuras de datos, clasificación, búsqueda y algoritmos de gráficos Comentarios y calificaciones – Amazon.es

Compre The Mythical Man-Month: Ensayos sobre ingeniería de software, libro de edición de aniversario en línea a precios bajos en India

Fuente: Preguntas frecuentes – Intercambio de pila

Lo primero que debe darse cuenta es que está haciendo la pregunta incorrecta. Empezaste a aprender algoritmos hace años. ¿Puedes hacer la cena? Una receta es un algoritmo. ¿Puedes cambiar tu aceite? Eso es un algoritmo. Los algoritmos están formados por algoritmos más pequeños (son tortugas hasta el fondo).

Si le doy una tarea compleja (preparar la cena), probablemente pueda comenzar a descubrir cómo dividirla en tareas más pequeñas (enumere los platos, luego, para cada plato, enumere los ingredientes, haga una lista de lo que no tiene en stock e ir a la tienda, etc.). Esto es algo que todo adulto hace todos los días.

Entonces, ¿qué preguntas realmente cuando dices que quieres comenzar a aprender algoritmos? Hemos superado la parte difícil, que es asumir que los algoritmos son algo especial para la programación de computadoras. No lo son Tienden a ser más rigurosos (si accidentalmente pones 1/2 taza de leche en lugar de 1/4 no es probable que arruine el plato), pero debes asumir que tienes todas las herramientas necesarias.

Por supuesto, alguien tuvo que tomarse el tiempo para enseñarle cómo preparar los platos (o tuvo que escribir las recetas que sigue) y lo mismo es cierto en la programación. A medida que comience a aprender a programar, se le darán algoritmos muy pequeños (bucle, recursión, clasificación, etc.) y luego, cuando obtenga un objetivo más grande, descubrirá cómo dividirlo en pedazos más pequeños. En algún momento, esas piezas se volverán tan pequeñas que usará métodos incorporados en cualquier idioma en el que esté trabajando. Todo lo anterior se construirá en capas hasta que haya resuelto el problema primordial.

Si lees un libro de algoritmos, claro, pero esos libros supondrán que ya tienes los algoritmos simples. La mayoría de los libros de algoritmos no están destinados a leer de principio a fin, así que lo que sugeriría sería simplemente sumergirse. Elija problemas para resolver y aprender sobre la marcha. Supongo que no estás planeando obtener una educación formal en programación, ya que si fueras básico a algoritmos avanzados es una de las cosas principales que aprenderías en la universidad. Dado el estado de la información en Internet, no estoy seguro si sugeriría alguno de los libros que tengo en mi biblioteca sobre simplemente encontrar discusiones sobre algoritmos en foros, wikis y videos de capacitación.

Por lo tanto, no me preocuparía por los “Algoritmos de aprendizaje”. Simplemente entre y aprenda a programar, los algoritmos vendrán y generalmente sabrá cuándo está listo para aprender algo nuevo; tendrás el conocimiento que necesitas para investigarlo (o preguntarle a un amigo o Quora) y agregar la nueva herramienta a tu cinturón, y seguir adelante.

Mientras me preparaba para mis propias entrevistas de trabajo, escribí una serie de ensayos titulada Algorithms & Data Structures with Swift. Visitada por miles mensualmente, la guía ofrece una mirada introductoria a los siguientes temas:

Búsqueda binaria
Tipo de inserción
Ordenamiento de burbuja
Ordenación rápida
Ordenar fusión
Genéricos
Tablas Hash
Árboles de búsqueda binaria
Intentos
Pilas y colas
Gráficos
El camino más corto de Dijkstra
Montones y operaciones de montón
Profundidad-Primera búsqueda
Búsqueda de aliento primero

También se pueden encontrar ejemplos de código actualizados en GitHub.

¡Espero que ayude!

¿Algoritmos desde cero? Entonces mejor comience con las matemáticas.
El primer algoritmo se desarrolló cuando la gente pensaba en la multiplicación. Entonces tal vez su algoritmo GCD.

Le sugiero que lea, “De las matemáticas a la programación genérica” ​​por Stepanov.

Al principio, MANTENTE LEJOS de la mayoría de los libros sugeridos “tradicionalmente” como el libro de Algoritmos de Cormen, no son más que una colección (BUENA) de herramientas profesionales de este oficio.
Pero lo que necesita primero es desarrollar su intuición sobre el tema. El libro de mención anterior debería darle un gran comienzo, y para ir más lejos puede considerar …
Diseño de algoritmo, por Tardos y …
Introducción a los algoritmos, por Udi Manber.
Programming Pearls, de Jon Bentley.

Sugeriría repasar sus Matemáticas discretas [1] antes de comenzar a sumergirse en algoritmos.

La mayoría de las pruebas en los libros de texto de algoritmos utilizan los conceptos de Matemática discreta y un fondo sólido definitivamente lo ayudará.

Aparte de eso, creo que el camino es elegir un buen libro como CLRS.

El programador más inteligente que conocí creó un sistema. Escribiría un programa cada día y organizaría ese código en una carpeta apropiada.

Comenzó a reutilizar su propio código de días anteriores mientras resolvía problemas mayores. Creo que es un gran enfoque.

Para resumir

  1. Aprende los conceptos básicos de Matemática discreta.
  2. Comprende por qué estás aprendiendo algoritmos. [2]
  3. Elige un buen libro sobre Algoritmos.
  4. Implemente un programa al día. Organice sus programas de cada día para que pueda reutilizarlos cuando los necesite más tarde.

Notas al pie

[1] Matemáticas discretas – Wikipedia

[2] ¿Por qué cada programador debería aprender a optimizar algoritmos?

Una vez que aprendió a escribir código, ya conoce algunos algoritmos.

El algoritmo en principio es simplemente una serie de instrucciones que se siguen paso a paso para resolver algún problema o hacer algo útil ( es la programación ). Tienen una entrada que pasa por una serie de cálculos y finalmente produce una salida . Incluso se podría decir que una receta de cocina es un algoritmo (este ejemplo se me menciona como estudiante de CS para presentarme el tema).

¡Vamos más profundo!

Desde conceptos muy matemáticos como ” un algoritmo que le dice si cierto número es primo o no ” hasta sistemas de inteligencia artificial como ” un algoritmo que, según las páginas que le gustan en Facebook, determina qué anuncios serían los mejores para mostrarle ” se utiliza el algoritmo. Una vez que se le ocurre el algoritmo o lo ha leído y lo ha entendido, en teoría puede implementarlo en cualquier lenguaje de programación de su elección.

¿Lo que deberías saber? Es la pregunta aquí.

entonces necesitas dominar esas cosas:

  1. Introducción a los algoritmos ( ya sabes qué es un algoritmo ).
  2. Análisis de la complejidad del tiempo.
  3. Algoritmos de búsqueda:
    – Búsqueda lineal.
    – Búsqueda binaria.
    – Límite inferior .
    – Límite superior.
    – Búsqueda secuencial.
  4. Algoritmos de clasificación:
    – OSE (selección, burbuja, inserción).
    – Combinar tipo.
    – Tipo de montón.
    – Clasificación rápida ” úsela en todas partes, funcionó bien para todos los algoritmos “.
  5. Algoritmos de búsqueda de cadenas:
    – Conceptos básicos string, string reverse, palindromesub-string, prefix, suffix, borderanagramSearching for pattern.Naive ” compara cada carácter de patrón (P) con cada carácter de texto (T) “.
    – KMP
    – Boyer Moore
    – Matriz de sufijos ” simplemente, índices de sufijos ordenados de una cadena – oh, esto es muy importante, ahorra mucho tiempo de ejecución, por lo que sus pruebas pasan fácilmente “.
    – Matriz LCP “La primera entrada no está definida, otras entradas son las longitudes de prefijo común más largas de (1er y 0º índice de la matriz de sufijos de una cadena, etc.)”.
  6. Teoría de grafos:
    – BFS
    – DFS
    – preordenar ” nodo, izquierda, luego derecha “.
    – orden posterior ” izquierda, derecha, luego nodo “.
    – en orden ” izquierda, nodo, luego derecha “.
    – Árbol binario ” max 2 nodos “.
    – Árbol de búsqueda binaria.
    – árboles.

Bueno, como señaló Ritu Garg, es genial si especifica qué tipo de algoritmo se necesita.

Bueno, lo pongo de esta manera.

Como se me pidió que respondiera, responderé de manera generalizada.

Identifique el lenguaje de programación que está utilizando.

Suponga que si desea hacer gráficos en C, usa punteros, pero en JAVA tiene un paquete llamado Graph, donde puede llamar a la clase y los métodos que contiene.

(Mi consejo personal es comenzar con C )

Ahora identifique las funciones de las clases urff módulos urff en el algoritmo, y también identifique los argumentos en él.

Le sugiero que descubra el tipo de retorno o la salida y luego considere escribir el nombre de la función con su nombre.

La mayoría de los algoritmos necesitan el uso de conceptos y bucles de asignación de memoria dinámica para perfeccionarse.

Ahora intente definir Pseudocódigos para el algoritmo dado.

Si la pregunta se menciona con anotaciones, sería genial.

Creo que debes pasar un tiempo simplificando, implementando y jugando con estos algoritmos en tu cabeza. Probablemente pases demasiado tiempo leyendo teoría y no lo practiques o experimentes lo suficiente. Estos conceptos son realmente difíciles de aprender para algunos de nosotros, pero una vez que la idea hace clic, se siente muy simple o fácil en su mente.

Estos algoritmos que no puedes escribir de inmediato, debes practicarlos y practicarlos diariamente hasta que puedas. Al principio puede parecer una tarea desalentadora, y al principio puede llevarle algo de tiempo, pero conocerlos bien lo ayudará a pensar en ciertos patrones útiles y le proporcionará herramientas para resolver problemas más difíciles. Si tiene dificultades para sentarse durante mucho tiempo tratando de comprender un concepto, le sugiero que haga ejercicio y meditación con regularidad y, si es necesario, toque música que no distraiga mientras trabaja en ellos. (Algunas listas de reproducción de http://www.musicforprograming.net funcionan bien para mí cuando estoy aburrida y quiero obligarme a estudiar)

No es tan difícil como crees. Por ejemplo, aquí están DFS y BFS (que crees que está fuera de discusión) en sus formas más simples que puedo pensar en este momento (en C ++):

// líneas totales de código 4
nulo DFS (Nodo * A) {
if (A == NULL || A-> Visited) return;
A-> visitado = verdadero;
para (nodo automático: A-> Nodos)
DFS (nodo);
}

// líneas totales de código 9
BFS nulo (Nodo * A) {

queue node_queue;
nodo_queue.push (A);
Nodo * temp_node;

while (! node_queue.empty ()) {
temp_node = node_queue.front (); node_queue.pop ();
temp_node-> Visited = true;

para (nodo automático: temp_node-> Nodes)
if (! temp_node-> Visited)
node_queue.push (nodo);

}
}

// para los algoritmos anteriores, suponga que Node es la siguiente estructura

Nodo de estructura {
datos int;
bool visitado = falso;
vector Nodos;
};

Por lo tanto, eliminar 4 o 9 líneas de código de la memoria no debería ser tan difícil como para estar fuera de la cuestión, ¿verdad? El problema que veo con algunos libros de texto es el exceso de formalidad (desafortunadamente necesaria) que puede obstaculizar su comprensión de los conceptos que está estudiando.

Para aliviar el dolor, experimente con los algoritmos. Escríbalos, intente simplificarlos, dibuje cómo funcionan, impleméntelos en su IDE y ejecute algunas muestras, hágalo divertido, sin presión, y no permita que su ego se interponga en el camino (es decir: no puede hacerlo así significa que no soy lo suficientemente bueno, etc.). Véalo desde el punto de vista de jugar, no competir. Necesita pasar un tiempo con estos conceptos para que finalmente hagan clic. Pero una vez que hacen clic, todo tiene sentido.

Espero eso ayude.

Para aprender la estructura de datos y los algoritmos, uno necesita comenzar desde lo básico.
Sugeriría un libro: (Introducción a los algoritmos)
Introducción a los algoritmos | The MIT Press
Léalo y aprenda lo básico, mientras aprende a implementar todas las cosas en su idioma preferido. Si tiene alguna duda, consulte el libro y publíquelo en varios foros.

En caso de que los conceptos básicos sean claros, busque problemas relacionados con DS y algoritmos
en la página en geeksforgeeks.org y Preguntas de la entrevista de programación | CareerCup, únete a hackerearth / topcoder / codechef para las competiciones de codificación en línea.
Use el juez en línea LeetCode para practicar y enviar soluciones.
Discuta con sus amigos y resuelva problemas, esa es la mejor manera de aprender.

Espero que ayude, feliz aprendizaje.

La mejor manera de aprender, IMO, es hacer / practicar.
Por lo tanto, le sugiero que vaya a la biblioteca de su universidad, saque estos libros y, léalos, escriba sus programas y resuelva sus ejercicios:

  • Introducción a los algoritmos: Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein: 9780262033848
  • Algoritmos y estructuras de datos: Niklaus Wirth: 9780130220059
  • Algoritmos (4a edición): Robert Sedgewick, Kevin Wayne: 8601400041420

Se recomienda lo siguiente si es parcial con Python:

  • Algoritmos de Python: Dominar algoritmos básicos en el lenguaje Python: Magnus Lie Hetland: 9781430232377
  • Estructuras de datos y algoritmos en Python: 9781118290279
  • Estructura de datos y pensamiento algorítmico con Python: Estructura de datos y acertijos algorítmicos: Narasimha Karumanchi: 9788192107592

Una vez que domine lo anterior, lo siguiente sería útil:

  • Manual de Algoritmos Aplicados: Resolviendo Problemas Científicos, de Ingeniería y Prácticos: 9780470044926
  • Algoritmos: Técnicas de diseño y análisis: MH ALSUWAIYEL: 9789810237400
  • Introducción al diseño y análisis de algoritmos: 9780132316811
  • Algoritmos en pocas palabras: una guía práctica: George T. Heineman, Gary Pollice, Stanley Selkow: 9781491948927

Supongo que acabas de empezar a codificar.

He estado enseñando programación de computadora básica a tiempo parcial a personas por algún tiempo. Cuando se trata de algoritmos, la primera pregunta que me hacen es, ¿por qué implementar algoritmos? No parece hacer mucha diferencia. Así que comencé a presentarles la importancia de los algoritmos a través de un ejemplo, donde su uso marcaba una diferencia notable.

Creo que el problema del MCD (divisor común más grande) es un buen punto de partida. Si intenta usar un bucle simple para encontrar el MCD de dos números, encontrará que su programa se ejecuta muy lento para grandes números.

Entonces, ¿cuál es la solución? Use el algoritmo GCD de Euclides y experimente la diferencia en el tiempo de ejecución.

Ahora piense en problemas similares (como generar primos hasta n) e intente implementar algoritmos para mejorarlo.

Siga encontrando más y más problemas, y con el tiempo, se encontrará con una amplia variedad de algoritmos y aprenderá cómo implementarlos.

Esto debería ayudarlo y, con suerte, no habrá vuelta atrás.

¡Hola!

Déjame decirte lo que los mejores en el campo tienen que decir! El equipo de la Escuela Holberton presenta un enfoque innovador de Educación Progresiva en su sistema para inculcar mejor las habilidades de programación de computadoras en sus estudiantes. ¡Es una escuela sin maestros formales o conferencias! Se centran no solo en los mejores métodos de habilidades de aprendizaje, sino también en combinarlos con lo que la industria del software requiere hoy en día.

Sylvain Kalache, cofundador de la Escuela de Ingeniería de Software Holberton en San Francisco, da los siguientes consejos:

  • Encuentra un mentor: El mundo del software es grande y, con tanta información disponible en Internet, es fácil perderse y no saber por dónde empezar o qué explorar. Encuentre a alguien que haya estado en la industria por un tiempo y que se mantenga actualizado. Defina un plan con esta persona sobre lo que debe estudiar
  • Obtenga un código revisado : la mejor manera de acelerar el aprendizaje y mejorar es consultar a su mentor. Revise su trabajo y asegúrese de ir en la dirección correcta. Internet tiene muchos recursos, pero están lejos de ser perfectos. Su mentor sabrá mejor qué es lo que más le conviene.
  • Aprende haciendo: leer libros y tutoriales es bueno, pero hacerlo es el rey. El software es como un oficio, es practicando que lo dominarás. Al hacerlo, puedes convertirte en un buen desarrollador, pero para ser realmente bueno, necesitarás 3 habilidades: Tener un conocimiento de la pila completa Ser capaz de aprender por ti mismo Habilidades suaves Visita la escuela Holberton y ve de qué se trata en Holberton School of Software Ingeniería en San Francisco

Le deseo todo lo mejor en sus futuros emprendimientos.

Para comenzar a usar Algoritmos, primero debe comprender las matemáticas básicas discretas. En el curso se cubren muchos temas: Matemáticas para ciencias de la computación, otoño de 2010. Si comprende algo como lógica formal, pruebas, notación asintótica, teoría básica de conjuntos, teoría básica de grafos, teoría básica de probabilidad, etc., podrá desgarrar mejor a través de un libro como “Introducción a los algoritmos”. No estoy seguro de que el conocimiento de programación sea necesario ya que esencialmente puede escribir pseudocódigo para comprender algoritmos.

Primero asegúrese de que su ESTRUCTURA DE DATOS sea sólida.

Entonces sugeriría simplemente comprar este libro: –

Introducción a los algoritmos

Por –
Thomas H. Cormen
Charles E. Leiserson
Ronald L. Rivest
Clifford Stein

Puede comprar el libro o simplemente descargar el pdf desde: – http: // (PDF) Introducción a Alg …

¡Simplemente lea, comprenda, haga dudas, resuelva los problemas de este libro y estará entre los mejores!

¡Y sí, agradéceme si esto ayuda!

🙂