¿Cómo debo aprender los algoritmos? Puedo resolver problemas fáciles en Codechef. Entonces, para continuar, ¿debería comenzar a resolver problemas medianos y aprender algoritmos sobre la marcha, o aprender cada algoritmo uno por uno y resolver algunos problemas para cada algoritmo?

Supongo que sabes la notación Big-Oh. Le sugiero que aprenda algoritmos y estructuras de datos conocidos y continúe con Fácil o Medio-Medio en Codechef. Hay problemas en la sección Fácil que requieren que usted conozca conceptos como Máximo flujo que está avanzado. Si estás atascado con un problema lee los editoriales.

Aprende sobre la marcha . No piense que “aprenderé todo lo que se requiere para una programación competitiva y luego comenzaré a practicar”. Vas a fallar He caminado por este camino hace algún tiempo y me di cuenta de esto de la manera más difícil.

Por estructuras de datos y algoritmos conocidos me refiero a los que están cubiertos en cada texto introductorio de algoritmos. Sugiero “Introducción a los algoritmos”, también conocido como CLRS. Supongo que eres algo bueno en matemáticas. Estudia los algoritmos, sus pruebas, resuelve algunos ejercicios antes de pasar al siguiente. Hay algunos temas como el montón de Fibonacci, el árbol de Van Emde Boas, el árbol B, los algoritmos de subprocesos múltiples, los algoritmos de completamiento y aproximación de NP, etc. que se pueden omitir por ahora. Además, no es importante conocer los detalles del árbol rojo-negro, ya que ya está en la biblioteca estándar y, tal vez, nunca los codifique en concursos. Es tedioso

Siga estos pasos para aprender cualquier estructura de datos o un algoritmo

  1. Aprende el concepto de manera intuitiva. En este paso, es importante comprender cómo funciona. Debería poder imaginar la ejecución y explicar por qué funciona de manera intuitiva.
  2. Pon en práctica lo que aprendiste. Cuando se siente a implementar, se encontrará con muchos problemas que no encontrará mientras estudia la teoría.
  3. Si es posible, practique algunos problemas que requieren que los conozca en su juez en línea favorito.
  4. Ahora que lo entiendes bastante bien, estudia sus detalles matemáticos. Es decir, estudiar el concepto con rigor. Cuando modifica un algoritmo o una estructura de datos, puede adivinar si realmente funciona o no (porque su intuición puede no ser correcta todo el tiempo).

El último paso es importante, especialmente si el algoritmo que está estudiando pertenece a la categoría de algoritmos codiciosos o programación dinámica. La solución codiciosa es fácil de pensar e implementar. ¡Es extremadamente fácil obtener una respuesta equivocada también! Las soluciones codiciosas pueden parecer intuitivas, pero pueden fallar. Me ha pasado esto.

No se desanime si le resulta difícil pensar en soluciones de programación dinámica. No es tan fácil y requiere práctica.

Finalmente, sigue mejorando tus habilidades matemáticas discretas. Abres un problema. Si no puede resolverlo durante algún tiempo, abra el editorial, consulte los requisitos previos, aprenda y aplique.

También puede probar la “Programación competitiva – 3” de Steven y Felix Halim, que está escrita específicamente para programadores competitivos.

Todo lo mejor 🙂

Recomendaría usar el libro Introduction to Algorithms de Charles E. Leiserson, Clifford Stein, Ronald Rivest y Thomas H. Cormen, que contiene una muy buena descripción de los algoritmos principales.

Otra opción es el libro Algorithms de Robert Sedgewick, que no poseo particularmente pero que oí es una muy buena compilación de algoritmos también.

Como complemento a esto, puede tomar cursos gratuitos de algoritmos de cursos como Algorithms, Part I – Princeton University | Coursera
Algoritmos, Parte II – Universidad de Princeton | Coursera

o de cualquiera de las fuentes que mencionan en las otras respuestas, como MIT Open Courseware y Udacity.

Sí, aprenda cada algoritmo relevante para el problema que está resolviendo uno por uno, hice lo mismo:

  1. Primero aprenda de Wikipedia o de un buen libro (porque puede confiar en ellos)
  2. Luego, busca en varios sitios web para entender el tema con mayor profundidad.
  1. De esta manera
  1. Puedes entender el tema mucho mejor
  2. También lo recordará mejor, porque algunas de las explicaciones, imágenes o videos tienen una buena explicación, puede ser que lea la investigación de alguien sobre un tema.

Esta comprensión y el recuerdo ayudarán a resolver otros problemas que dependen de los algoritmos ya conocidos.

Como ejemplo, entender KMP algo muy bueno, ayudará a resolver un problema relacionado como Yet Another KMP Problem, es fácil obtener una puntuación de 40 o 60, por lo que debe ver el patrón en KMP claramente para intentar problemas relacionados.


Lo más importante en el aprendizaje de algoritmos que siento es, debemos entender, cómo funciona una búsqueda binaria, en profundidad, y cómo puede aplicarse a diversos problemas, en diferentes situaciones:

  • Esta es la clave para obtener su algoritmo de O (N) o mayor complejidad a solo O (registro N), es clave para eliminar su TLE (límite de tiempo excedido) en casi todos los problemas.
  • No he dominado la técnica, pero entendí lo suficiente como para obtener al menos el 40% de mi puntaje, lo cual también es una razón por la que casi no tuve ningún TLE relativamente (haga clic en la pestaña “stats”, consulte “TimeOut – Need optimization”) en Top100_practice_hackerrank .com_stats_16_sep_2016, son muy pocos, en otras palabras, en teoría, si sé responder, pasará el desafío tarde o temprano en la práctica, lo que es un gran sentimiento tener.
  • Entonces, la comprensión de la búsqueda binaria y sus aplicaciones , es realmente importante.
  • Una vez que lo hagas, verás la técnica relacionada con la búsqueda binaria en todos los temas también, y tu puntaje en la resolución de problemas aumentará muy rápidamente.

Hay esencialmente dos partes para escribir código para problemas algorítmicos:

  1. Piense en la estructura de datos y las operaciones correctas para resolver el problema especificado. Esto en sí consta de dos partes:
  1. Conozca las estructuras de datos básicas, como cadenas, matrices, listas enlazadas, tablas hash, árboles binarios, árboles binarios de búsqueda, gráficos, etc .; Tiempo y espacio complejidad de sus operaciones y algoritmos subyacentes. Aunque no es fácil, uno puede dominarlos con estudio y perseverancia.
  2. Aplica estos para resolver los problemas. Esta parte requiere trabajar con una gran cantidad de problemas e identificar patrones.
  • Escribe el código de trabajo. Esto podría ser no trivial incluso si conoce la solución algorítmica. El desafío es asegurarse de que el código se encargue de los casos de esquina y esté bien organizado. Esta es una habilidad en sí misma y requiere mucha práctica.
  • Aunque uno podría elegir un tema, diga árboles binarios y siga los pasos 1a, 1b y 2, pero eso solo funciona para problemas de medianos a pequeños. Mi recomendación es pasar rápidamente por el paso 1a para todos los temas, resolver problemas específicos y luego pasar la mayor parte del tiempo practicando 1b y 2.

    El libro que recomendaría para las partes 1a y 1b es Elementos de las entrevistas de programación. Cubre todos los temas con muchos problemas con soluciones y código de trabajo C ++ y Java. La mejor parte es la descripción conceptual de soluciones con análisis de tiempo / complejidad. Muchos de estos problemas están disponibles en LeetCode Online Judge y usted podría practicar su habilidad de codificación allí. Siempre es mejor pasar algo de tiempo, por ejemplo 15 a 30 minutos, pensando en un problema y tratando de encontrar una solución algorítmica en su cabeza que mirar la solución. Además, no es conveniente iniciar la codificación a menos que tenga un alto nivel de comprensión de la solución.

    Creo que primero debes completar algunos cursos de programación y luego debes comenzar con java. Y después de completar estos, obtendrás una visión clara de los temas importantes que deberías aprender para convertirte en un programador. Después de eso, comenzar con java y también realizar una programación competitiva paralela. Para aclarar tus conceptos. Y sigue esto: Y deberías aprender de esta manera:

    Lista completa de estructuras de datos y algoritmos: Mi plan para hacer código: Libros para DS y Algo:

    Y la mejor de las suertes para la codificación ………………… ..

    A continuación: la respuesta de Dharmpal Chaudhary a soy un principiante de Java. ¿Debo comprar la edición de perlas de programación 1 para aprender a programar mejor?

    Hola amigo, las habilidades de escritura de algoritmos son muy similares a las matemáticas, sin embargo, conceptualmente hay diferencias. Puede leer libros y hay muchos recursos disponibles en línea, que puede seguir para comprender todo el negocio. Al final del día, necesita a alguien que pueda verificar su trabajo para que sepa dónde está cometiendo errores.

    Hay muchas maneras de resolver problemas individuales. No necesariamente todos los métodos son correctos, aunque obtuviste el resultado. Piensa en preparar un té, que puedes hacer de muchas maneras. No necesariamente, cada receta te dará el mejor sabor.

    Hay ciertas cosas que siempre se deben tener en cuenta al escribir algoritmos correctos: código corto (línea de código menor), mayor rendimiento y menor tiempo de ejecución, sin oportunidad de error, comprensible, simple y orientado a resultados.

    Lee y escribe el código tanto como puedas. Comenzar desde problemas simples. Si necesita más ayuda, hágamelo saber.

    Curso Link – Estructuras de datos prácticas y algoritmos en Java + HW: Aprenda en profundidad las estructuras de datos más populares y los algoritmos de búsqueda

    ¡Mantenlo práctico! Aprende en profundidad las estructuras de datos y los algoritmos de búsqueda más populares.

    Descripción del curso por instructor

    Si tuviera que elegir el tema más importante en el desarrollo de software, serían las estructuras de datos y los algoritmos. Piense en ello como las herramientas fundamentales disponibles para todos los programadores de computadoras. Cuanto mejor consigas con estas herramientas, más seguro se volverá un programador. El desarrollo de software es un vasto campo que requiere todo tipo de conjuntos de habilidades, pero ser bueno en este tema único es un gran avance en su viaje de programación y sin duda allanará el camino para una carrera de programación exitosa.

    Los temas de este curso cubrirán estructuras de datos como listas, pilas, colas, árboles y algunos de los algoritmos de clasificación, búsqueda y gráficos más potentes que han revolucionado el campo de la computación. A lo largo del curso, mantengo las cosas prácticas y proporciono ejemplos de la vida real de cómo funcionan todos estos algoritmos y cuándo y dónde se pueden aplicar para escribir programas informáticos eficientes.

    Me moveré a un ritmo lento y constante introduciendo cada tema seguido de una asignación de programación PRÁCTICA para que pueda aplicar inmediatamente lo que aprendió. Todas las tareas asignadas en el curso se acompañarán con videos de soluciones paso a paso que desmitificarán cada problema a medida que codifico las soluciones. Mi objetivo es asegurarme de que, después de completar este curso, se sienta completamente seguro de participar en una entrevista de codificación porque habrá construido una base sólida en la programación de computadoras. Así que adelante, apúntate y te veré en el curso.

    ¿Quién es el público objetivo?

    • Si está harto de los cursos centrados en la academia sobre Estructuras de datos y algoritmos, y quiere comprender de manera intuitiva y práctica cómo implementar y los algoritmos y estructuras de datos más populares en software.
    • Si no le gustan las matemáticas y desea aprender algoritmos y estructuras de datos populares a un nivel profundo

    ¿Qué aprenderé?

    • Obtener confianza para codificar entrevistas
    • Aprenda las estructuras de datos y los algoritmos más prácticos y populares en profundidad en lugar de un curso apresurado de informática.
    • Practique la traducción de sudo code y la implementación de algoritmos con Asignaciones y Soluciones
    • Obtenga una comprensión intuitiva de cómo se comportan muchos de los algoritmos y estructuras de datos populares

    Requerimientos

    • Los conceptos básicos de la programación, como sentencias if / else, bucles y métodos en algunos lenguajes de programación

    Curso Link – Estructuras de datos prácticas y algoritmos en Java + HW: Aprenda en profundidad las estructuras de datos más populares y los algoritmos de búsqueda

    Aprenda algoritmos y estructuras de datos lado a lado consecutivamente,

    por ejemplo, cuando se aprende una nueva estructura de datos, como un “montón”, aprenda los diversos algoritmos que están conectados a montones, básicamente como Heapsort, etc.

    Ahora, para aprender y practicar los algoritmos, codifíquelos y finalmente, resuelva los problemas basados ​​en heapsort,

    Codechef es un buen sitio web para la programación competitiva, pero si quieres ser serio, dirígete a nuestra causa para hackersearth,

    • Puede resolver preguntas selectivas basadas en problemas en algoritmos, estructuras de datos, matemáticas avanzadas, etc.
    • Puede participar en muchas de las bases de la programación de sus nuevas versiones que se agregan todos los días.

    ¡Buena suerte!

    Creo que deberías ver las clases de algoritmos del MIT Courseware para algoritmos y comprar el libro INTRODUCCIÓN A LOS ALGORITMOS POR CLRS.

    vaya a este enlace:

    simplemente lea el libro después de cada conferencia y comprenderá cada una de sus líneas. También puede visitar http://geeksforgeeks.com para conocer mejor los algoritmos.

    No puedo decir que haciendo todo esto, serás un gran programador, pero aún así definitivamente te ayudará.

    Esta respuesta responderá a su pregunta de la mejor manera:

    La respuesta de Ankita Duggal a ¿Cuáles son las mejores y más eficientes formas de aprender algoritmos para principiantes?

    Por favor revise el enlace. Vale la pena.

    Feliz codificacion !!!

    Aprender teóricamente podría ser difícil.

    Pero me encontré con esto y fue un salvador de vida. Casi todos los algos importantes se enseñan de una manera sorprendente. Gracias a los Tutoriales de última hora.

    ¡¡Buena suerte mi amigo!!

    Oye, lo que puedes hacer es ir a este sitio → ¡Todas tus asignaciones de laboratorio en una sola parada!

    Encontrarás las tareas de laboratorio de la universidad resueltas, aquí!