¿Cómo debería uno comenzar a aprender Algoritmos?

Es difícil darte una respuesta ya que sabemos muy poco acerca de tus antecedentes. Sin embargo, puedo decirte cómo lo hice. Para darle un poco de contexto, tengo un título de física y mi trabajo incluyó escribir más de 50 mil 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 ni idea de algoritmos ni antecedentes matemáticos discretos (en física, al menos a nivel de pregrado, todo está basado 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 una 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 seguir un programa y centrarse en completar cosas (decir comprensión y ser capaz de implementar heapsort) en lugar de pensar qué tan lejos está del final. Un período de 3-5 meses es bueno para leer el libro mientras se tiene un trabajo de 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 donde se utilizan algoritmos para resolver problemas de la vida real, y el libro de Gayle Laakmann McDowell “Entrevista sobre la codificación”, que pone su conocimiento en perspectiva con lo que se pregunta sobre una Entrevista de trabajo en una gran empresa.

Puedo decir que fue una experiencia muy agradable, porque me convencí a mí misma 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 para este campo (también, una búsqueda de 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 LD en Quora, pero no estoy seguro de que encuentren la pregunta tal como está. Una pregunta más específica sobre clasificación de 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 añadidas de la Biblioteca de plantillas estándar (STL) junto con su velocidad rápida y longitud de código más corta. Obtenga los beneficios de la STL (Encienda C ++ con la Biblioteca de plantillas estándar, La Biblioteca de plantillas estándar de C ++, Contenedores – C ++)
  • Practicar la codificación competitiva. Sitios como HackerRank, HackerEarth ayudan mucho a conocer ciertas técnicas y algoritmos. También es posible que desee resolver problemas de SPOJ en este orden: Sphere Online Judge (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 golpea un determinado problema, ve a buscar la solución de otra persona. Pida su ayuda en los foros. Intenta pensar como ellos piensan. Esto mejora su enfoque a un cierto problema en cuestión.
  • Introduction to Algorithms (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 mencionó en los comentarios, Algorithms, 4th Edition by Sedgewick and Wayne también es un buen libro.
  • Aprenda las 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 te lances a los algoritmos de aprendizaje …

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

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

Siguiente Usándolos aprende estructuras básicas de datos como

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

Implementalos mucho usando tu idioma preferido … Implementalos hasta cierto punto

hasta que sienta que es un camino fácil para resolver problemas menores como intercambiar nodos en una lista, anular una lista vinculada, inserciones, fusionar listas, empujar pop en colas … etc …

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

Aquí hay un buen problema que puedes resolver usando la lista enlazada

Dada una lista de números (tanto + ve como -ve) que están ordenados en absoluto

Orden de valores. Clasifíquelos en orden original. Solo necesita tener

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

Ejemplo

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

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

A partir de aquí, le sugiero que aprenda C ++. Es un lenguaje eficiente que tiene bibliotecas integradas para diferentes Estructuras de datos …

  • Nota: pero primero implementelas en C antes de continuar con C ++, aunque C ++ proporciona plantillas predeterminadas (la misma estructura de datos de la pila con diferentes tipos de datos como cadenas, enteros, puntos flotantes, básicamente llamada sobrecarga)

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

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

Para pilas puedes resolver cosas como

Supongamos que hay una secuencia de corchetes que consta de {,} corchetes … Debe saber si la secuencia está bien equilibrada

Por ejemplo: {{{{}}}} es una secuencia bien equilibrada, mientras que} {y {{{} y {{{} {{} no están

Para esto necesitas ir usando pilas de caracteres y lógica simple …

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

Ejemplo:

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

{}{{ ::: No

Ahora, después de aprender esto, puedes 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 manera 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 ordenados y debe buscar si
un número particular existe en la lista o no

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

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

Ahora hay algún algoritmo eficiente

Sí, por supuesto => Búsqueda binaria

Mira, teníamos este elemento intermedio en la mano => lista [(tamaño / 2)],

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

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

Eso significa que podemos ignorar la mitad de la lista en cada iteración y
por lo que 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 complejidad ingenua O (N)

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

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

Así que esto te hace entender la verdadera intención de por qué usamos
algoritmo …

Ahora empieza a aprender algoritmos en este orden

Complejidad Amortizada

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

Por ejemplo:

Considera este bucle

para (int i = 0; i

Este bucle se ejecuta n veces y, por lo tanto, 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á una gran cantidad de ideología y lista de punteros, etc., que se mencionaron anteriormente …

  1. Árbol binario
  2. Árbol de búsqueda binario (estructuras de datos utilizadas para el almacenamiento rápido de datos)
  3. Arbol negro rojo
  4. Hash -Tablas
  5. Muchísimo
  6. Priority_queues
  7. Intentos
  8. Segmentar arboles
  9. Árboles indexados binarios
  10. Matriz de sufijo

Para los algoritmos puedes ver

  1. Ventana de deslizamiento
  2. Búsqueda binaria
  3. Ordenar como fusionar, rápido, contar, radix, bucket, inserción, burbuja …
  4. Codiciosos -Algoritmos
  5. Programación dinámica (esto es muy importante)
  6. Algoritmos de gráficos como BFS, DFS, Djkstra, Prims, Kruskal, Floyd Warshallll, etc. Trate de usar Djkstra con prioridad_cinta
  7. Convexo- casco

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

Así que mientras aprendes un nuevo algoritmo, resuelve problemas relacionados con estas etiquetas en

Y para practicar problemas en estructuras de datos, puede usar

http://www.hackerrank.com/domains

Para recursos, puedes 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 en estos jueces en orden.

A2 Juez en línea (Esto tiene problemas con los temas en orden de dureza ordenados)

http://www.codeforces.com

Juez de Esfera Online (SPOJ)

Concurso de Programación, Concurso de Programación, Programación Informática Online.

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

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

****** Resuelva los problemas por su cuenta, aunque sean difíciles, …… Si no mira los editoriales y vuelva a implementarlos (No presione Ctrl + C y Ctrl + V por favor)

Use C en el Inicio si es posible … Aprenderás mucho de la 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 🙂

Dado que usted es un programador aspirante, asumo 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 probar y comprender las razones por las que necesita métodos sofisticados para resolver problemas. De esta manera, obtendrás una mejor motivación hacia el área. Después de esta etapa, elija un libro dirigido a un curso de algoritmos de nivel de pregrado. Algunos de los libros más conocidos son Introducción a los algoritmos de Cormen * et al, Diseño de algoritmos (Jon Kleinberg y Éva Tardos), El diseño y análisis de algoritmos informáticos de Alfred Aho. Elige uno de ellos y comienza a leer cuidadosamente algunos de los capítulos iniciales.

Preste especial atención a los temas que tratan sobre la complejidad del espacio y el tiempo. Son la clave en el diseño de algoritmos. De hecho, comprenderá una parte de ella mientras ve la motivación para estudiar algoritmos.

La ventaja de utilizar uno de los libros anteriores es que están acompañados de ejercicios. Así que puede resolverlos para saber si su comprensión de un tema es buena.

Una vez que haya terminado con lo básico, y entienda 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 manera, realmente descubrirá cuáles son los cuellos de botella en su solución y cómo los superará. 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 le ayudará a obtener una base sólida en el diseño de algoritmos básicos.

*Profe. Thomas Cormen está en realidad en quora.

Esto es asumiendo que usted tiene habilidades básicas de programación (si no es así, vea ¿Cuáles son algunas de las mejores maneras de aprender a programar?):

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

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

Introducción a los algoritmos, 3ª edición por Thomas H. Cormen

Algoritmos (4ª edición) por Robert Sedgewick

Cuando comience a leer estos libros, comience a hacer problemas de programación en línea. Mire HackerRank, LeetCode, CodeForces y encuentre los problemas que puede abordar. 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) que se está llevando a cabo en este momento: “30 días de código”. Échale un vistazo – HackerRank.

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

Aparte 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 Introduction To Algorithms y, junto con esto, probablemente pueda usar las conferencias de video aquí: Introduction to Algorithms (SMA 5503), otoño de 2005. El libro contiene suficientes datos matemáticos que necesitaría Entiende el resto del material y deberías estar bien. Además, intente hacer los ejercicios al final de cada capítulo, que le ayudarán a comprender mejor el tema.
Además, una buena manera de acompañar todo esto es hacer uso de sitios web como http://www.topcoder.com, que incluyen desafíos de programación y es realmente divertido practicar lo que aprendió.
Una vez que haya terminado con esto, podría usar Quora para preguntar qué debería hacer a continuación, una vez que tenga una fuerte retención de algoritmos básicos.

Leer.

No, en serio, lee.

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

Entonces pregunta.

Hable con las personas que respeta. Pregúnteles qué puntos de decisión tuvieron 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 optado por C, pero sentí que esta era una mejor opción debido a esto”.

A continuación, haz.

Construir 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 y hazlo de nuevo. Y otra vez. Constrúyelo de 5 maneras completamente diferentes. Crea un programa que genere rompecabezas de Sudoku y aliméntalo en 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 un punto de bala en tu currículum. Ve a buscar una galleta y felicítate. El “por qué” es mucho más importante que el “qué”.

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

Compre Bundle of Algorithms in C ++, Partes 1-5: Fundamentos, estructuras de datos, clasificación, búsqueda y algoritmos de gráficos Reserve 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. Opiniones y clasificaciones – Amazon.in

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

Fuente: Hot Questions – Stack Exchange

Lo primero que debes comprender es que estás 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 compuestos de algoritmos más pequeños (son tortugas hasta el fondo).

Si te doy una tarea compleja (preparar la cena), probablemente puedas comenzar a descubrir cómo dividirla en tareas más pequeñas (enumerar los platos, luego, para cada plato, enumerar los ingredientes, hacer una lista de lo que no tienes en stock) e ir a la tienda, etc.). Esto es algo que todos los adultos hacen todos los días.

Entonces, ¿qué es lo que realmente preguntas cuando dices que quieres comenzar a aprender algoritmos? Hemos superado la parte difícil, que es suponiendo que los algoritmos son algo especial para la programación de computadoras. No son Suelen ser más rigurosos (si pones accidentalmente 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ñarte cómo hacer los platos (o tuvo que escribir las recetas que sigues) y lo mismo es cierto en la programación. Cuando empiece a aprender a programar, se le asignarán algoritmos muy pequeños (bucle, recursión, clasificación, etc.) y luego, cuando obtenga un objetivo mayor, descubrirá cómo dividirlo en partes más pequeñas. En algún momento, esas piezas se volverán tan pequeñas que utilizarás los métodos incorporados en cualquier idioma en el que estés trabajando. Todo lo que hay arriba se construirá en capas hasta que hayas resuelto el problema principal.

Debería leer un libro de algoritmos, seguro, pero esos libros asumirán que ya tiene los algoritmos simples abajo. De todos modos, la mayoría de los libros de algoritmos no tienen la intención de leer de principio a fin, por lo que sugeriría que sea simplemente sumergirse. Elija problemas para resolver y aprenda sobre la marcha. Supongo que no planeas obtener una educación formal en programación, ya que si fueras algoritmos básicos a avanzados es una de las principales cosas que aprenderías en la universidad. Dado el estado de la información en Internet, no estoy seguro de que sugiera alguno de los libros que tengo en mi biblioteca simplemente por encontrar discusiones de algoritmos en foros, wikis y capacitación en video.

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

Preparándome para mis propias entrevistas de trabajo, escribí una serie de ensayos titulada Algorithms & Data Structures con Swift. Visitada por miles de personas cada mes, 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
Fusionar clasificación
Genéricos
Tablas de hash
Árboles binarios de búsqueda
Intentos
Pilas y colas
Graficas
El camino más corto de Dijkstra
Montones y operaciones de Heapsort
Búsqueda en profundidad
La primera búsqueda

Los ejemplos de códigos actualizados también se pueden encontrar en GitHub.

¡Espero que ayude!

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

Le sugiero que lea “De Matemáticas a la Programación Genérica” ​​por Stepanov.

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

Yo 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áticas discretas y un sólido historial definitivamente te ayudará.

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

El programador más inteligente que conocí hizo 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 más grandes. Creo que es un gran enfoque.

Para resumir

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

Notas al pie

[1] Matemáticas discretas – Wikipedia

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

Una vez que aprendiste a escribir código ya conoces 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 que me presente el tema).

¡Vamos más allá!

Desde conceptos muy matemáticos como ” un algoritmo que le dice si un cierto número es primo o no ” a 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 crea el algoritmo o lo ha leído y lo ha comprendido, en teoría, puede implementarlo en cualquier lenguaje de programación de su elección.

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

así que necesitas dominar esas cosas:

  1. Introducción a los algoritmos ( ya sabes lo que es un algoritmo ).
  2. Análisis de complejidad de tiempo
  3. Algoritmos de búsqueda:
    – Búsqueda lineal.
    – Búsqueda binaria.
    – Límite inferior .
    – Límite superior.
    – Búsqueda secuencial.
  4. Clasificación de los algoritmos:
    – SBI (selección, burbuja, inserción).
    – Combinar la clasificación.
    – Clases de pila.
    – Ordenación rápida ” utilícelo en todas partes, funcionó bien para todos los algoritmos “.
  5. Algoritmos de búsqueda de cadenas:
    – Conceptos básicos. string, string reverse, palindromesub-string, prefijo, sufijo, borderanagramSearching for pattern.Naive ” compare cada carácter del patrón (P) con cada carácter del 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 comunes más largas (los índices 1 y 0 de la matriz de sufijo de una cadena, etc.)”.
  6. Teoría de grafos:
    – BFS
    – DFS
    – Pedido anticipado ” nodo, izquierda, luego derecha “.
    – Orden posterior ” izquierda, derecha, luego nodo “.
    – en orden ” izquierda, nodo, luego derecha “.
    – Árbol binario ” max 2 nodos “.
    – Árbol binario de búsqueda.
    – Árboles.

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

Pues lo pongo de esta manera.

Como se le pidió que contestara, responderé de manera generalizada.

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

Supongamos que si desea Gráficos en C, use punteros, pero en JAVA tiene un paquete llamado Gráfico, donde puede llamar a la clase y los métodos que contiene.

(Mi consejo personal es, comienza con C )

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

Mejor sugiero que averigües el tipo de retorno o la salida y luego consideres escribir el nombre de la función con tu nombre.

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

Ahora trata de definir los pseudocódigos para el algoritmo dado.

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

Creo que necesitas pasar un tiempo simplificando, implementando y jugando con estos algoritmos en tu cabeza. Probablemente pasas demasiado tiempo leyendo teoría y no lo suficiente practicándola o experimentándola. 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 puede escribir de inmediato, debe practicarlos y perforarlos diariamente hasta que pueda. Puede parecer una tarea desalentadora al principio, y al principio puede llevarte algo de tiempo, pero conocerlos bien te ayudará a pensar en ciertos patrones útiles y te proporcionará herramientas para resolver problemas más difíciles. Si tiene dificultades para sentarse durante un largo tiempo tratando de entender un concepto, sugiero que el ejercicio y la meditación sean un hábito 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 aburrido y quiero hacerme un estudio)

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

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

// líneas totales del código 9
BFS vacío (Nodo * A) {

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

while (! node_queue.empty ()) {
temp_node = node_queue.front (); node_queue.pop ();
temp_node-> Visitó = verdadero;

para (auto nodo: temp_node-> Nodos)
if (! temp_node-> Visitó)
node_queue.push (node);

}
}

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

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

Entonces, sacar de la memoria 4 o 9 líneas de código no debería ser tan difícil como para estar fuera de la cuestión, ¿no? El problema que veo con algunos libros de texto es el exceso de formalidad (desafortunadamente necesario) que puede interponerse en su camino para comprender realmente los conceptos que está estudiando.

Para aliviar el dolor, experimenta con los algoritmos. Escríbalos, intente simplificarlos, dibuje cómo funcionan, implementelos en su IDE y ejecute algunas muestras, haga que sea divertido, sin presiones, y no permita que su ego se interponga en el camino (es decir, no puede hacerlo). significa que no soy lo suficientemente bueno, etc.) Véalo desde el punto de vista del juego, no compitiendo. Necesitas 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, hay que comenzar desde lo básico.
Sugeriría un libro: (Introducción a los algoritmos)
Introducción a los algoritmos | La prensa del MIT
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 lo básico sea claro, entonces encuentre problemas relacionados con DS y algoritmos
en la página en geeksforgeeks.org y preguntas de la entrevista de programación | CareerCup, únase a hackerearth / topcoder / codechef para competiciones de codificación en línea.
Utilice el juez en línea LeetCode para practicar y enviar soluciones.
Discute con tus amigos y resuelve problemas, esa es la mejor manera de aprender.

Espero que ayude, feliz aprendizaje.

La mejor manera de aprender, OMI, es hacer / practicar.
Por lo tanto, le sugiero que vaya a la biblioteca de su universidad, revise 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 (4ª edición): Robert Sedgewick, Kevin Wayne: 8601400041420

Se recomienda lo siguiente si eres parcial a Python:

  • Algoritmos de Python: Dominio de los 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 rompecabezas algorítmicos: Narasimha Karumanchi: 9788192107592

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

  • Manual de algoritmos aplicados: resolución de 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 programar.

He estado enseñando a tiempo parcial, programación básica de computador para personas desde hace algún tiempo. Cuando se trata de algoritmos, la primera pregunta que me hacen es: ¿por qué implementar algoritmos? No parece hacer una gran diferencia. Así que empecé a presentarles la importancia de los algoritmos a través de un ejemplo, donde usarlos hizo una notable diferencia.

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

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

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

Sigue encontrando más y más problemas, y con el tiempo, te encontrarás con una gran variedad de algoritmos y aprenderás cómo implementarlos.

Esto debería ponerte en marcha y, con suerte, no habrá vuelta atrás.

¡Hola!

Déjame decirte lo que tiene que decir el mejor en el campo! El equipo de Holberton School presenta un enfoque innovador de Progressive Education en su sistema para inculcar mejor las habilidades de programación de computadoras en sus estudiantes. ¡Es una escuela sin profesores formales ni conferencias! Se centran no solo en los mejores métodos de aprendizaje, sino que también los relacionan con lo que la industria del software requiere en la actualidad.

El co-fundador de la Escuela de Ingeniería de Software Holberton en San Francisco, Sylvain Kalache 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é hacer para explorar. Encuentre a alguien que haya estado en la industria por un tiempo y que se mantenga actualizado. Define un plan con esta persona sobre lo que debes estudiar
  • Obtenga el código revisado : la mejor manera de acelerar el aprendizaje y mejorar es referirse a su mentor. Revisa tu trabajo y asegúrate de que vas en la dirección correcta. Internet tiene muchos recursos pero están lejos de ser perfectos. Tu mentor sabrá mejor lo que mejor se adapte a ti.
  • Aprender haciendo: leer libros y tutoriales es bueno, pero hacer es 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 genial, necesitarás 3 habilidades: Tener un conocimiento completo de la pilaSer capaz de aprender por ti mismoHabilidades suaves¿Echa un vistazo a la escuela Holberton y descubre de qué se trata en Holberton School of Software? Ingeniería en San Francisco

Te deseo lo mejor en tus futuros proyectos.

Para comenzar con los algoritmos, primero debes entender 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 entiendes algo como lógica formal, pruebas, notación asintótica, teoría de conjuntos básicos, teoría de grafos básica, teoría de probabilidad básica, etc. 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 básicamente puedes escribir pseudocódigo para entender los algoritmos.

Primero asegúrese de que su estructura de datos es fuerte.

Entonces sugeriría 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 preguntas, resuelva los problemas de este libro y estará entre los mejores.

Y tú, ¡dame las gracias si esto ayuda!

🙂