¿Qué estructuras de datos y algoritmos básicos se deben aprender antes de comenzar la programación competitiva?

Como eres estudiante de segundo año de Ciencias de la Computación, debes tener un curso de Estructuras de Datos y Algoritmos. Haga ese curso fielmente e intente resolver algunos problemas de ejercicio en Cormen.

Para comenzar con la programación competitiva, debe comprender el siguiente tema en secuencia:

  1. Algoritmos de clasificación y búsqueda: intente implementar algoritmos de búsqueda y clasificación como, búsqueda binaria, clasificación por inserción, clasificación por fusión, clasificación rápida, etc. Intente torcer estos algoritmos hasta que se dé cuenta de cómo funciona el algoritmo.
  2. Lista vinculada, pila, cola: estas estructuras de datos estándar lo ayudarán a resolver la mayoría de los problemas.
  3. Árbol binario: este es uno de los temas más importantes para la programación competitiva. Intenta resolver los problemas de árbol binario y árbol de búsqueda binaria de GeeksforGeeks | Un portal informático para geeks. Contiene casi todo tipo de problemas en el árbol. Te sentirás seguro de los problemas de los árboles si los resuelves de memoria.
  4. Programación dinámica: casi todas las empresas tienen al menos una pregunta DP en su ronda en línea. Entonces, primero lea este tema de CLRS. Luego resuelva los problemas de DP de geeksforgeeks. Practica DP tanto como puedas. Créame, la mayoría de los estudiantes encuentran el DP más difícil en la programación competitiva.
  5. Teoría de gráficos: la teoría de gráficos se elabora mejor en CLRS. Primero lea la teoría del gráfico de CLRS. Luego intente resolver de algún recurso en línea. Este tema, aunque generalmente no se pregunta en la ronda de codificación en línea, sigue siendo el tema favorito de los entrevistadores durante las entrevistas.

Con respecto a su consulta de C ++ para la programación competitiva, una cosa que debe aprender es la Biblioteca de plantillas estándar (STL). Esta biblioteca contiene funciones interesantes que harán que su codificación funcione fácilmente. Como pilas, colas, listas, etc. Puede usar directamente esta función. Lo más interesante es que puede usar STL en la ronda de codificación en línea.

Sí, la competencia en estructuras de datos y algoritmos ayuda un poco en el desarrollo web y el desarrollo de aplicaciones. No sé sobre desarrollo de juegos.

Para GSoC, ACM ICPC necesita un excelente solucionador de problemas y codificador. Ser CS Major no es obligatorio.


Espero eso ayude.

Estoy seguro de que esto te ayudará (fuente: codechef):

Búsqueda binaria: tutorial con problemas, tutorial con implementación, problema
Quicksort: tutorial con implementación, tutorial con problemas
Ordenar fusión: tutorial con implementación, tutorial con problemas
Matriz de sufijos: tutorial con implementación, tutorial con implementación, problema, problema, problema
Algoritmo de Knuth-Morris-Pratt (KMP): tutorial, tutorial con implementación, problema, problema, problema
Algoritmo Rabin-Karp: tutorial con implementación, tutorial, problema, problema
Intentos: tutorial con problemas, Tutorial: I, II, tutorial, problema, problema, problema
Profundidad Primer recorrido de un gráfico: tutorial con implementación, tutorial con problemas, problema, problema, problema
Amplitud Primero Recorrido de un gráfico: tutorial con implementación, tutorial con problemas, problema, problema, problema, Inundación
Algoritmo de Dijkstra: tutorial con problemas, problema, tutorial (codicioso), tutorial (con montón), implementación, problema, problema
Árbol indexado binario: tutorial con problemas, tutorial, papel original, tutorial, tutorial, problema, problema, problema, problema, problema, problema
Árbol de segmentos (con propagación diferida): tutorial con implementación, tutorial, tutorial con problemas e implementación, tutorial con implementación, Árbol de segmentos persistente, problemas iguales a BIT, problema
Algoritmo Z: tutorial con problema, tutorial, problemas iguales a KMP.
Algoritmo de Floyd Warshall: tutorial con implementación, problema, problema
Tabla dispersa (RMQ): tutorial con problemas, tutorial con implementación (C ++), implementación java
Heap / Priority Queue / Heapsort: se recomienda la implementación con explicación, tutorial, implementación, problema, leer el capítulo de clrs.
Inverso Multiplicativo Modular
nCr% M
Suffix Automaton: documento detallado, tutorial con implementación (I), tutorial con implementación (II), problema, problema, problema, problema, tutorial con implementación
Ancestro común más bajo: tutorial con problemas, tutorial (árbol binario) con implementación, documento detallado para LCA en DAG, problema, problema
Contar inversiones: dividir y conquistar, árbol de segmentos, árbol de Fenwick, problema
Algoritmo Extendido de Euclides
Árbol de sufijos: tutorial, tutorial, tutorial, tutorial, implementación, implementación, problema, problema, problema, problema
Programación dinámica: capítulo de clrs (esencial), tutorial con problemas, problema, problema, problema, problema, tutorial, problema, problema, problema, mayor subsecuencia creciente, bitmask dp, bitmask dp, optimización, problema, problema, problema, problema, problema, problema, problema, dp en árboles: I, II
Estructuras de datos básicas: tutorial, implementación de pila, implementación de cola y tutorial, implementación de lista vinculada
exponenciación logarítmica
Gráficos: definición, representación, definición, representación, problema, problema
Árbol de expansión mínimo: tutorial, tutorial con la implementación de kruskal, implementación de Prim, problema, problema, problema, problema, problema
Factorización Prime eficiente
Combinatoria: tutorial con problemas, problema
Conjunto Find / Disjoint de Union: tutorial, tutorial con problemas, problema, problema, problema
Problema de mochila: solución e implementación
Algoritmo de coincidencia de cadenas Aho-Corasick: tutorial, implementación, problema, problema, problema, problema
Componentes fuertemente conectados: tutorial con implementación, tutorial, problema, problema, problema
Algoritmo de Bellman Ford: tutorial con implementación, tutorial con implementación, problema, problema
Descomposición pesada: tutorial, tutorial, implementación, implementación, problema, problema, problema, problema, problema, problema, problema
Casco convexo: tutorial con implementación de algoritmo de jarvis, tutorial con escaneo de graham, tutorial, implementación, problema, problema, problema, problema
Intersección de línea: tutorial con imp., Tutorial con problemas
Tamiz de Erastothenes
Árbol de intervalos: tutorial con implementación, problema, problema, problema, problema, problema, problema, tutorial
Contando Ordenar
Las probabilidades
Construcción de la matriz de recurrencia para calcular las recurrencias en el tiempo O (logN)
Flujo de red: (Flujo máximo) Tutorial: I, II, Tutorial de flujo máximo (ford-fulkerson) con implementación, Tutorial (corte mínimo) con implementación, (Flujo de costo mínimo) Tutorial: I, II, III, Algoritmo de Dinic con implementación, Flujo máximo de Edmonds Karp con implementación, problema, problema, problema, problema, problema, problema, problema, problema, problema, problema, problema, problema, problema, problema, problema
Árbol Kd: tutorial, tutorial, implementación, problema
Deque
Árbol de búsqueda binaria: tutorial con implementación, búsqueda e inserción, eliminación
Selección rápida: implementación, implementación
Treap / Cartesian Tree: tutorial (detallado), tutorial con implementación, problema
Teoría del juego: documento detallado, tutorial con problemas, números de Grundy, tutorial con problemas de ejemplo: I, II, III, IV, tutorial con problemas, problema, problema, problema, problema, problema, problema, problema, problema, problema, problema, problema, Nim
STL (C ++): I, II, Curso intensivo
Máxima coincidencia bipartita
Algoritmo de Manacher: implementación, tutorial, tutorial con implementación, tutorial con implementación, problema, problema, problema
Prueba de primalidad de Miller-Rabin: código
Problema de matrimonio estable
Algoritmo Húngaro
Algoritmo de línea de barrido: I, II
LCP: tutorial con implementación, tutorial con implementación
Eliminación gaussiana
Factorización de Rho Pollard Integer, problema
Clasificación topológica
Detección de ciclos en un gráfico: Dirigido – I, II Sin dirigir: I
Geometría: conceptos básicos
Retroceso: problema de N reinas, Tug of War, Sudoku
Rutas eulerianas y hamiltonianas: tutorial, tutorial, implementación (ruta y ciclo euleriano), implementación (ciclo hamiltoniano)
Coloración de gráficos: tutorial con implementación
Meet in the Middle: tutorial, implementación
Entero de precisión arbitraria (BigInt), II
Clasificación de radix, clasificación de cubeta
Algoritmo de Johnson: tutorial, tutorial, implementación
Coincidencia máxima en un gráfico general: Algoritmo de Blossom / Edmond con implementación, matriz de Tutte, problema
Recursión: I, II, Torres de Hanoi con explicación
Principio de inclusión y exclusión

Algoritmos más básicos para leer antes de comenzar la programación competitiva …

  • La función de Euler y su cálculo [TeX]
  • Exponenciación binaria en O (Log N) [TeX]
  • Algoritmo de Euclides para encontrar el MCD (máximo común divisor) [TeX]
  • Tamiz de Eratóstenes [TeX]
  • Algoritmo euclidiano avanzado [TeX]
  • Números de Fibonacci y su cálculo rápido [TeX]
  • Elemento inverso en el módulo de anillo [TeX]
  • Código gris [TeX]
  • Aritmética larga [TeX]
  • Logaritmo discreto módulo M algoritmo baby-step-giant-step Shanks para O (sqrt (M) Log M) [TeX]
  • Ecuaciones de diofantina con dos incógnitas: AX + BY = C [TeX]
  • Ecuación lineal lineal de primer orden: AX = B [TeX]
  • Teorema del resto chino. Algoritmo de Garner [TeX]
  • Encontrar divisor de potencia factorial [TeX]
  • Valor del sistema equilibrado ternario [TeX]
  • Factorial N! módulo P para O (N Log P) [TeX]
  • A través de todos estos subpatterns de máscara. Grado 3 N para el número total de todas las máscaras de subpatrones [TeX]
  • Raíz primitiva. Algoritmo para encontrar [TeX]
  • Extracto de raíz discreto [TeX]
  • Tamiz de Eratóstenes con tiempo de ejecución lineal [TeX]

Para las estructuras de datos y algoritmos más utilizados, consulte estas páginas en CodeChef …
¿Cuáles son los algoritmos “imprescindibles” para los concursos de programación en línea?

http://discuss.codechef.com/ques

¿Dónde puedo obtener una explicación de todos los algoritmos, implementación y análisis del tiempo de ejecución?

Diseño y Análisis de Algoritmos Computacionales

http://www.daqwest.com/repo/dq/a

¿Dónde puedo obtener todos los conceptos matemáticos con la explicación requerida para la programación competitiva?

http://e-maxx.ru/ – Usa Chrome para traducir esta página

¿Dónde debería practicar?
Problemas según el tema – uva.onlinejudge.org
Mayor colección de problemashttp://www.spoj.com

Para participar en la competencia de codificación –
1. http://www.codechef.com
2. http://www.codeforces.com
3. http://www.hackerrank.com
4. http://www.topcoder.com
5. http://www.hackerearth.com

Para más información, lea: Comenzando con el deporte de la programación por Vikesh Tiwari en la programación de todos los días

Editar: se agregó un nuevo sitio web
Espero que esto ayude…:)
¡Gracias!

Estructura básica de datos y algoritmos que uno debe conocer. No es así, estarías conociendo la mayoría de las estructuras de datos y algoritmos, pero hasta que comiences a codificarlos no serán de utilidad porque incluso si los conoces.
Entonces, la pregunta debería ser cómo iniciar una programación competitiva en lugar de conocer la estructura de datos y el algoritmo.
Entonces comencemos: –
La forma en que aprendimos matemáticas, física de la misma manera en que lo haríamos también.
Las matemáticas y la física son lo que hemos aprendido desde la infancia, pero la mayoría de las personas comienzan la programación informática cuando van a la ingeniería. Así que romperé la forma de aprender en 4 años.
Va de la siguiente manera: –

  1. Aprenda a trabajar con matrices y cadenas. Aprendería c o c ++ en el 1er año. Así que tienes tu verano contigo. Aprenda a ordenar la matriz y la cadena profundamente.
    Estructura de datos de matriz de origen – GeeksforGeeks
    Estructura de datos de cadena – GeeksforGeeks
    y algo que matriz también. Entonces, 2 meses dominará la matriz y las cadenas.
    Si no comprende la explicación, busque en la red, busque videos de 5 minutos que expliquen los mismos conceptos (escuela Tushar Roy y Saurabh)
  2. . En el tercer semestre, aprenda la estructura de datos y el algoritmo de cualquier libro (cormen) o cualquier libro. Los conceptos son iguales y fáciles. Puede ver videos MIT también están disponibles en su tubo.
    los conceptos que no entiendes mira videos más pequeños de 5 minutos en tu tubo, lo entenderás

    Estructuras de datos – GeeksforGeeks
    resuelve cada código aquí
    Consta de alrededor de 20 a 25 preguntas sobre cada estructura de datos.
    Apréndelos incluso si aprendes 2 de ellos en un día.
    En un mes podrás aprender perfectamente alrededor de 3 estructuras de datos.

  3. ahora ya que en 3 meses habrías aprendido la lista vinculada, la pila, la cola, el árbol binario, BST, el montón y el hash.
    Ahora es el momento para el gráfico. Pase todo su noviembre en Graph
    Estructura de datos gráficos y algoritmos – GeeksforGeeks
    .
  4. Finalmente estás listo para comenzar una programación competitiva. Así que ahora ve a codechef, codeforces, hackerrank, hackerearth. Y comienza a resolver los desafíos. Tenga en cuenta que conoce casi todos los conceptos necesarios para la programación competitiva. Así que es hora de practicar. Haga los desafíos todo el tiempo. Si no puede resolver ningún problema, piénselo durante al menos 2 días porque no habrá un concepto nuevo, solo desea aplicar lo que ha aprendido en los últimos 6 meses. Mientras tanto, en diciembre comience la programación dinámica Programación dinámica – GeeksforGeeks
    mira videos del MIT, ve por el libro de cormen
  5. Por lo tanto, tomará alrededor de 6 meses establecer una base para ello, aprender conceptos. Si comienza a codificar desde el comienzo en codechef u otra plataforma, simplemente perderá mucho tiempo sin conocer los conceptos.
  6. sí, todavía hay algunos algoritmos de clasificación, retroceso y otros, puede aprenderlos en la 5ª sem en diseño y análisis de la clase de algoritmo y algunos problemas matemáticos que puede seguir aprendiendo durante 4 años.
  7. Resumen: – Pase el primer año de verano y el tercer semestre en aprendizaje, luego pase el cuarto sem y segundo año de verano en codificación completa y participando en competencias. Le aseguro que para el comienzo del 3er año, estará muy bien en la codificación, a la par con otros e incluso mejor que ellos.
  8. Punto dorado: – Aprender que la codificación ayudará en toda la vida
    Una vez que tenga un dolor y luego obtenga frutos para el resto de la vida.
    Es como las matemáticas que mejorarás y una vez que lo aprendas te acompañarán hasta el final de tu vida.

Siempre tuve un gran interés en aprender estructuras y algoritmos de datos, no porque necesite prepararme para algunas entrevistas, eso es solo un efecto secundario, siempre me gusta ver cómo un humano puede resolver cualquier problema salvaje que tenga entre manos, eso también con Ordenadores.

No quiero compartir una lista completa de recursos “ideales” que son clásicos en CS, pero me gustaría compartir lo que hice para cumplir mi deseo de aprender estructuras y algoritmos de datos. Intenté mucho en internet encontrar buenas conferencias y libros sobre los mismos temas. Y luego elegí los que apelaron a mi entendimiento:

  1. El recurso más importante que me gustaría recomendar es “Algorithms 4th Edition” de Robert Sedgewick y Kevin Wayne. Robert Sedgewick fue alumno de Donald Knuth y su motivación detrás de este libro se relaciona exactamente con lo que siento sobre la resolución de problemas a través de la informática. Este libro es una colección de tipos de datos abstractos como Colas, Pilas, Bolsas, Árboles, Gráficos, etc. y cómo una forma de tipo de datos se convierte en otra con el uso de un enfoque API limpio. Utiliza un enfoque científico para diseñar una estructura de datos, como lo hace en ciencias naturales (escribir una hipótesis, construir un modelo, realizar experimentos y validar). Enseña un buen arte de programación, diseño de API, estilo de pensamiento y uso de Java para escribir su propia biblioteca de estructuras de datos. Además, cada capítulo consta de ejemplos del mundo real (no solo abstracciones matemáticas). Cuando comienzas a relacionar la literatura con la realidad, obtienes mejores ideas y nuevas ideas. Entonces, lo que hice, comencé a codificar estos problemas en mi propio repositorio en github – “Estructuras”. Úselo y contribuya, si lo desea.
  2. Una vez que comprenda algunos de los ADT y su estrategia de evolución, entonces ha desarrollado un patrón en la resolución de problemas que se ha utilizado en Informática. Entonces surge la pregunta natural, ¿cómo podría alguien resolver cualquier problema salvaje explicándolo a una computadora? Existen algunos patrones estándar para comenzar a resolver problemas. Estas se denominan “Técnicas de diseño de algoritmos”, como fuerza bruta, divide y vencerás, codicioso, programación dinámica, inducción matemática, etc. Para esto, remití varios materiales en Internet para desarrollar mi conocimiento. (Las conferencias de IIT Bombay en YouTube son muy útil para estos.)
  3. En tercer lugar, si solo es un principiante y tiene una buena cantidad de tiempo para invertir, puede intentar una serie completa de conferencias del “Dr. Richard Buckland” de UNSW, Australia, disponible en YouTube. La serie consta de tres hilos: COMP1917, COMP1927, COMP2911). Es una recopilación de conferencias que ha impartido durante tres años para una clase de informática de pregrado en UNSW, Australia. Cuando estaba en la universidad, solía verlo regularmente y con el tiempo, profundicé mi comprensión de la informática.

Por último, conoce los recursos que te enseñan como una obra de teatro. Algunas personas están demasiado inclinadas matemáticamente a que las derivaciones y símbolos matemáticos son como un juego para ellos, por lo que se refieren a libros matemáticamente intensivos. Si no perteneces a este género, ¡reúne esos recursos relacionados con tu estilo de aprendizaje!

Feliz codificación y aprendizaje.

En mi opinión, no es una muy buena idea aprender algoritmos antes de comenzar la programación competitiva. La mejor manera de convertirse en un buen programador competitivo es resolver muchos problemas. Período.

Por supuesto, no es muy inteligente resolver cualquier problema (no mejorará si resuelve A + B miles de veces). Un enfoque que he leído en alguna parte es el siguiente:

  1. Elija un juez en línea (personalmente, me gusta codeforces.com)
  2. Ir al archivo
  3. Ordenar todos los problemas por dificultad
  4. Comience a resolver.
  5. Si cree que los problemas son demasiado fáciles (resuelve la mayoría de inmediato), omita un par de páginas. Si cree que son demasiado difíciles, retroceda un par de páginas. Repita hasta encontrar el nivel correcto de problemas. De manera óptima, podría resolver aproximadamente la mitad de los problemas que intenta.
  6. Como dije antes, no deberías poder resolver todos los problemas. En este caso, intente durante un tiempo (por ejemplo, una hora o hasta que se le acaben las ideas), luego vaya a leer el editorial (las fuerzas de código también son buenas aquí, porque la mayoría de los problemas tienen editoriales). La solución puede incluir algunos algoritmos que aún no conoce. Aquí es exactamente donde debes aprenderlos.
  7. Después de tener una solución (ya sea que se le ocurrió la suya o leyó el editorial), es muy importante implementarla y lograr que sea aceptada.
  8. Después de eso, también puede ver las soluciones de otras personas para ver cómo se podría implementar de manera más corta / más rápida / más eficiente / …

¡Buena suerte!

Estás de suerte. Hay muchos recursos.

Sugeriría comenzar con USACO Training Gateway (Página sobre Delos). Es una compilación de cientos de problemas y tutoriales destinados a ayudar a las personas a capacitarse para USACO. Pero, uno podría usarlo para entrenar esencialmente para cualquier competencia de programación. Puede comenzar como algo bastante básico para usted, pero tan pronto como ingrese a la parte posterior del Capítulo 1 y al Capítulo 2, cubrirá algunos conceptos de teoría de grafos, así como la Programación dinámica. Probablemente sea uno de los mejores recursos para comenzar a entrenar para competiciones.

Otro conjunto de tutoriales que sugiero son los tutoriales de TopCoder (Tutoriales de algoritmos). Creo que estos tutoriales son mejores que los tutoriales que ofrece USACO. Sin embargo, los problemas que proporcionan los tutoriales de TopCoder no son tan buenos como los problemas de USACO.

Aquí tengo más detalles: ¿cómo puede un principiante aprender a programar? La primera respuesta es mía.

En cuanto a algoritmos y técnicas específicas, sería difícil proporcionar una lista completa de todo. Uno de los primeros tutoriales en USACO Gateway proporciona una breve lista de los tipos de problemas que es probable que vea en una competencia de programación, pero en realidad no ofrece una lista de algoritmos.

Algunos algoritmos / técnicas básicas que todo programador competitivo exitoso tiene en su arsenal son:

1. Búsqueda de profundidad primero (búsqueda de gráficos)
2. Búsqueda de amplitud primero (búsqueda de gráficos) (incluido el relleno de inundación)
3. Algoritmo de Dijkstra (camino más corto)
4. Algoritmo de Floyd-Warshall (camino más corto)
5. Algoritmo de Bellman-Ford (camino más corto)
6. Algoritmos codiciosos
7. Programación dinámica (incluidos problemas de mochila)
8. Recursion
9. Árboles de expansión mínima
10. Búsqueda binaria y lineal
11. Algunos combinatoria básica y teoría de números.

También necesitaría algunas estructuras de datos:

1. Pila
2. Cola
3. Tabla hash
4. montón
5. Bolsa (tal vez. No he visto esto usado en competencias de programación a menudo)

Nuevamente, estos son los conceptos básicos. Si desea conocer conceptos más avanzados, no dude en leer cosas en línea o libros. Sugiero Introducción a Algoritmos de Cormen y Algoritmos de Sedgewick. Introducción a los algoritmos abarca mucho, pero está mucho más orientado a las matemáticas. Algorithms by Sedgewick es más práctico ya que proporciona código Java, mientras que Introduction to Algorithms proporciona pseudocódigo.

  1. Establecimientos de datos básicos (matrices, colas, listas vinculadas, etc.).
  2. Manipulación de bits.
  3. Estructuras de datos avanzadas:
    a. Conjuntos disjuntos de unión-búsqueda.
    si. Segmento de árbol.
    do. Árbol indexado binario (también conocido como árbol Fenwik).
    re. Grafico.
    mi. Treap
    F. Saltar listas.
    mi. Algunos árboles de búsqueda binaria autoequilibrados (por ejemplo, árboles negros rojos)
  4. Fuerza bruta y sus trucos y técnicas avanzadas (como poda, máscaras de bits, encuentro en el medio, profundización iterativa, etc.)
  5. Búsqueda binaria (no solo el código básico).
  6. Codicioso.
  7. Programación dinámica y sus trucos y optimizaciones (optimización de Knuth, optimización de casco convexo, máscaras de bits, etc.).
  8. Algoritmos gráficos:
    a. Algoritmos transversales (DFS y BFS) y cómo usarlos.
    si. Encontrar componentes conectados.
    do. Relleno de inundación.
    re. Clasificación topológica (el famoso algoritmo usa DFS pero también debe conocer el algoritmo de Kahn que usa BFS ya que tiene muchas aplicaciones).
    mi. Cheque bipartito.
    re. Encontrar componentes fuertemente conectados.
    F. Los algoritmos de Kruskal y Prim para encontrar el árbol de expansión mínima de un gráfico y las variantes del problema.
    sol. Algoritmo de Dijkstra para resolver el problema de la ruta más corta de fuente única (SSSP) sin ciclos negativos.
    h. Algoritmo de Bellman-Ford para resolver el problema de SSSP con ciclos negativos.
    yo. El algoritmo de Floyd-Warshall para resolver el problema de la ruta más corta de todos los pares (APSP) y sus variantes.
    j. Problema de flujo de red (todos sus algoritmos, variantes y problemas reducibles).
  9. Matemáticas:
    a. Debe estar familiarizado con la clase BigInteger en Java (tal vez escriba la suya si está enamorado de C ++).
    si. Algunos combinatorios.
    do. Teoría de números (todo lo que puedes aprender al respecto).
    re. Teoría de probabilidad.
    mi. Algoritmo de detección de ciclo de Floyd.
    F. Teoría de juegos (especialmente juegos imparciales y Teorema de Sprague-Grundy).
  10. Instrumentos de cuerda:
    a. Manipulación Básica.
    si. Algoritmo Z para encontrar un patrón en un texto.
    do. Algoritmo de Knuth-Morris-Pratt para encontrar un patrón en un texto.
    re. Hashing y Rabin-Karp Algorithm para encontrar un patrón en un texto.
    mi. Estructura de datos de Trie.
    F. Algoritmo Aho-Corasick para encontrar múltiples patrones en un texto.
    sol. Estructura de datos de matriz de sufijos.
    h. Sufijo Estructura de datos del autómata.
  11. Algoritmos de Geometría Computacional.

Esos son la mayoría de los algoritmos que he estudiado y utilizado para la programación competitiva.

Probablemente no debería pensar en ningún algoritmo o estructura de datos antes de entrar en la programación competitiva. Lo único que tiene que hacer es elegir un idioma y comenzar. Todo lo que necesita saber sobre el lenguaje son algunos conceptos básicos como variables, matriz (muy, muy importante), declaraciones condicionales y bucles. Un conocimiento básico de algunas bibliotecas básicas de ese idioma también es igualmente importante.

Luego, abra cualquier sitio web como CodeChef o Hackerrank y comience a pensar y resolver los problemas de principiante, que no requieren el conocimiento de ningún algoritmo o estructura de datos. Una vez que comience a resolver problemas, podrá saber qué tipo de lógica, algoritmos y estructuras de datos se utilizan. Durante los primeros 2–3 días, continúe resolviendo estos problemas muy básicos de sitios web de programación competitivos, luego vaya y busque – GeeksforGeeks | Un portal informático para geeks. Este es un sitio de ensueño para todos los programadores competitivos. Casi todos los algoritmos y estructuras de datos se explican de una manera muy simple aquí.

Siga una técnica mientras hace esto: 1) Primero aprenda un algoritmo o estructura de datos. 2) Una vez que lo aprenda muy bien, vaya a Google y busque: ‘problemas xyz ‘.

No se confunda, por ejemplo, si aprendió el algoritmo Búsqueda binaria, vaya a Google y busque ‘Problemas de búsqueda binaria’. Intente resolver todos los problemas y obtenga una solución eficiente. Si no puede resolver ninguno de ellos, no dude en consultar su editorial, leerlo detenidamente, comprender la lógica utilizada y finalmente intentar implementarlo usted mismo.

Sigue participando en concursos a pequeña escala organizados por CodeChef, CodeForces, Hackerrank, etc. Llegarás a saber lo diferente que eres de los demás. Una vez finalizado el concurso, lea el código de solución de muchas personas que han enviado las respuestas con éxito. Llegará a saber cómo diferentes personas resuelven el mismo problema en diferentes técnicas. Incluso revise las personas que acaban de perder la respuesta, por ejemplo, las personas que obtienen 8 de 10, o 9 de 10. Intente depurar su código y descubra qué errores han cometido.

¡Ve en orden! Debe tener un mínimo de 2 meses de experiencia con programación competitiva para aprender programación dinámica o teoría de gráficos. Estos son temas realmente difíciles de abordar, pero una vez que los conoce, se vuelve fácil. Tales temas necesitan la máxima práctica.

Ahora, si analizamos la implementación de estos algoritmos, tome pequeños proyectos mientras realiza una programación competitiva. Esto puede ayudarlo a implementar estos algoritmos utilizando su propia lógica. Pase el mismo tiempo en proyectos y en programas competitivos.

¡Gracias! ¡Espero que esto ayude!

Los algoritmos son soluciones a los problemas. Hay muchas formas de resolver todo tipo de problemas. Cuando habla de ellos en el contexto de la informática, está hablando de la forma en que resolvemos un problema mediante programación. Estas soluciones usan lógica básica.

Si es A, entonces haz B.

Si no es A, entonces haz C.

Esta es una lógica extremadamente simple y no está escrita en un lenguaje de programación (aunque muchos lenguajes se parecen a esto), pero un algoritmo podría ser así de simple. Esta es una forma de resolver un problema que una computadora entiende.

Los algoritmos se vuelven mucho más complejos que esto, pero en esencia, se ensamblan utilizando series de enunciados lógicos básicos.

La mejor manera de comenzar es aprender un lenguaje de programación. Recomiendo C. Encontré que comenzar con un lenguaje de procedimiento es una buena manera de aprender la estructura básica de un programa de computadora que me permitió pasar a los lenguajes orientados a objetos.

También recomiendo aprender sobre estructuras de datos utilizándolas con un lenguaje de programación. Tomé estructuras de datos con C ++ y con Java. Java fue más fácil para mí y aprendí más. Las estructuras de datos son en su mayoría las mismas de un idioma a otro. Se utilizan para almacenar datos dentro de programas de computadora.

Otras personas escribieron sobre los tipos de algoritmos que puedes aprender y qué estructuras de datos existen, pero parece que si haces la pregunta en primer lugar y no tienes experiencia en informática, es posible que aún no entiendas los conceptos. Realmente necesita comprender qué es lo que está tratando de aprender antes de entrar en detalles.

La programación de algoritmos es una habilidad fundamental como las matemáticas. Empiezas con una simple suma y luego avanzas hacia el cálculo. Realmente no hay forma de evitar aprender cómo crear un programa que simplemente imprima “hello world” en la pantalla antes de aprender cómo calcular la distancia de conducción más corta entre dos ubicaciones (lo que puede ser un problema muy difícil).

A medida que aprenda a programar, llegará al punto en el que necesita estructuras de datos para que sean parte integral de la programación.

Espero que esto ayude.

Así es como me preparé en estructuras de datos y algoritmos para la programación competitiva.

Fundamentos sólidos: puede utilizar Introducción a los algoritmos de Cormen. Concéntrese en estos capítulos:

    • Clasificación
    • Pilas y colas
    • Árboles (puede evitar AVL, árboles rojo-negros)
    • Gráficos
    • Programas dinámicos y codiciosos.

    Ensuciarse las manos: no solo mire algoritmos. Practica en tu editor de idiomas favorito. Asegúrese de poder escribir código que maneje con éxito todos los casos de esquina. Con el tiempo, desarrollará la capacidad de simular código mentalmente para detectar errores en él.

    Practique la programación competitiva: resuelva los desafíos de programación. Puede registrarse en varios sitios web de programación competitivos. Vea ¿Cuáles son algunos buenos sitios de competencia / práctica de codificación? para una buena lista de dichos sitios web.

    ¡Todo lo mejor!

    Deberias aprender

    1.Lista enlazada

    La estructura de datos de la lista vinculada proporciona una mejor gestión de la memoria que las matrices. Como a la lista vinculada se le asigna memoria en tiempo de ejecución, no hay desperdicio de memoria. La lista vinculada de rendimiento inteligente es más lenta que la matriz porque no hay acceso directo a los elementos de la lista vinculada.

    Se demuestra que la lista vinculada es una estructura de datos útil cuando el número de elementos a almacenar no se conoce con anticipación.

    Verá muchos tipos de listas vinculadas: lineal, circular, doble y doblemente circular.

    2 pila

    Stack es una estructura de datos de estrategia de último en entrar, primero en salir; Esto significa que el elemento almacenado en el último se eliminará primero. Stack tiene aplicaciones específicas pero muy útiles; algunos de ellos son los siguientes:

    • Resolución de recursión: las llamadas recursivas se colocan en una pila y se eliminan de allí una vez que se procesan.
    • Evaluación de expresiones posteriores al arreglo
    • Resolviendo torres de Hanoi
    • Retroceso
    • Búsqueda de profundidad primero
    • Convertir un número decimal en un número binario
    • 3.Queue

    La cola es una estructura de datos primero en entrar, primero en salir. El elemento que se agrega primero a la estructura de datos de la cola se eliminará primero de la cola. La cola, la cola prioritaria y la cola circular son las variantes de la estructura de datos de la cola. Queue tiene los siguientes usos de la aplicación:

    • Acceso a recursos compartidos (p. Ej., Impresora)
    • Multiprogramación
    • Cola de mensajes

    4 árboles

    El árbol es una estructura de datos jerárquica. El elemento superior de un árbol se llama la raíz del árbol. Excepto el elemento raíz, cada elemento en un árbol tiene un elemento primario y cero o más elementos secundarios. Todos los elementos en el subárbol izquierdo van antes de la raíz en orden de clasificación, y todos los del subárbol derecho van después de la raíz.

    El árbol es la estructura de datos más útil cuando tiene información jerárquica para almacenar. Por ejemplo, la estructura de directorios de un sistema de archivos; Hay muchas variantes de árbol que encontrarás. Algunos de ellos son árbol rojo-negro, árbol binario roscado, árbol AVL, etc.

    5 montón

    El montón es un árbol binario que almacena una colección de claves al satisfacer la propiedad del montón. El almacenamiento dinámico máximo y el almacenamiento dinámico mínimo son dos tipos de estructura de datos de almacenamiento dinámico. La propiedad de almacenamiento dinámico para el almacenamiento dinámico máximo es: cada nodo debe ser mayor o igual que cada uno de sus hijos. Mientras, para el montón mínimo es: cada nodo debe ser más pequeño o igual a cada uno de sus hijos. La estructura de datos del montón se usa generalmente para implementar colas prioritarias.

    6.Diccionario

    El diccionario es una estructura de datos que mantiene un conjunto de elementos indexados en base a claves. El diccionario almacena datos en forma de pares clave-elemento.

    7.Hash Table

    Hash Table es nuevamente una estructura de datos que almacena datos en forma de pares clave-elemento. Una clave es un valor no nulo que se asigna a un elemento. Y, se accede al elemento en función de la clave asociada a él. La tabla hash es una estructura de datos útil para implementar el diccionario.

    8 gráfico

    Graph es una estructura de datos en red que conecta una colección de nodos llamados vértices, por conexiones, llamados bordes. Un borde puede verse como una ruta o enlace de comunicación entre dos nodos. Estos bordes pueden ser dirigidos o no dirigidos. Si se dirige un camino, puede moverse solo en una dirección, mientras que en un camino no dirigido el movimiento es posible en ambas direcciones.

    • Hola amigo como estudiante universitario, debes aprender al menos estos temas en las estructuras de datos
    • incluso puedes comprar un libro sobre este, incluso un libro simple como
    • ESTRUCTURAS DE DATOS A TRAVÉS DE C POR GS BALUJA
    • ESTRUCTURAS DE DATOS A TRAVÉS DE C POR YASHWANT KANETKAR

    Ok, la forma más sencilla de ingresar al ingeniero de software es aprender lo siguiente:

    • Máquinas: aprenda y comprenda el hardware y el software en profundidad, qué es y cómo funciona,
    • Aprenda programación estructurada, no necesita usar un lenguaje complejo y elegante, Pascal lo hará bien, por ejemplo,
    • Aprenda las estructuras de datos que ingresará en la organización de archivos y, posteriormente, en RDBMS (mal conocidas como bases de datos)
    • RDBMS lee sobre diferentes tipos, encontrará muchos, pero solo los modelos relacionales y nuevos le darán trabajo con seguridad,
    • Salte a la programación orientada a objetos y aprenda sus conceptos,
    • Ahora, aborde cualquier lenguaje de programación orientado a proporcionar soluciones orientadas a la Web,
    • Diré que esta lista no es exhaustiva, para el momento en que se quede sin aliento, habrá otra lista de cosas nuevas que aprender.
    • Mi recomendación final, y esto por experiencia, es. Elija un área para aprender y crecer, pero considere esto, debe ser estable y acumulativo como inversión de aprendizaje. Los programadores de COBOL, por ejemplo, fueron probablemente uno de los profesionales de TI más exitosos en ese sentido. Su vida útil fue increíblemente larga y próspera (juego de palabras), casi todo lo que han aprendido todavía era válido en su último día. No puedo decir lo mismo para Foxpro, Basic, Delphi, PowerBuilder, Otros.
    • Buena suerte

    Para abarcar mi respuesta en resumen. Me gustaría enumerar algunos puntos.

    1.) Introducción a los algoritmos por Cormen, Lieserson, Stein y Rivest es uno de los libros aclamados internacionalmente. Es la Biblia de los algoritmos. Tiene algunos ejercicios estimulantes junto con una buena explicación de todos y cada uno de los aspectos. Es un libro de lectura obligada!

    2.) @http: //www.geeksforgeeks.org/ tiene algunos problemas increíbles para rascarte el cerebro. ¡Practícalo!

    3.) http://www.stackoverflow.com tiene una gran comunidad que te ayudaría a alcanzar grandes niveles. Esos programadores están más allá de nuestra imaginación.

    4.) Practique esos algoritmos en un lenguaje de programación de su elección.

    5.) Por último, pero no menos importante, encuentre algunas aplicaciones increíbles de algunos de los algoritmos y estructuras de datos para mantener vivo su entusiasmo y fascinación. Por ejemplo, BFS se utiliza en rastreadores web. Los gráficos se usan en Facebook, etc.

    Mucha suerte para tu viaje 🙂

    La clasificación es el concepto más estudiado en informática. La idea es organizar los elementos de una lista en un orden específico. Aunque todos los lenguajes de programación principales tienen bibliotecas de clasificación incorporadas, resulta útil si sabe cómo funcionan. Dependiendo de los requisitos, es posible que desee utilizar cualquiera de estos.

    • Ordenar fusión
    • Ordenación rápida
    • Clasificación de cubo
    • Heap Sort
    • Contando Ordenar

    Más importante aún, uno debe saber usarlos. Algunos ejemplos en los que puede encontrar la aplicación directa de las técnicas de clasificación incluyen:

    • Ordenar por precio, popularidad, etc. en sitios web de comercio electrónico
    • posiciones en la tabla de líderes en cualquier concurso

    Algoritmos de búsqueda:

    • Búsqueda binaria
    • Profundidad / amplitud Primera búsqueda

    Aplicaciones:

    • Utilizado por los motores de búsqueda para el rastreo web
    • Utilizado en inteligencia artificial para construir bots, por ejemplo, un bot de ajedrez
    • Encontrar el camino más corto entre dos ciudades en un mapa y muchas otras aplicaciones similares

    Hashing:

    La búsqueda de hash es actualmente la técnica más utilizada para encontrar datos apropiados por clave o ID. Accedemos a los datos por su índice. Anteriormente confiamos en Ordenar + Búsqueda binaria para buscar el índice, mientras que ahora usamos hashing.

    La estructura de datos se conoce como Hash-Map o Hash-Table o Dictionary que asigna claves a valores de manera eficiente. Podemos realizar búsquedas de valor utilizando claves. La idea es usar una función hash apropiada que haga la asignación de clave -> valor. Elegir una buena función hash depende del escenario.

    Coincidencia de cadenas y análisis

    La coincidencia / búsqueda de patrones es uno de los problemas más importantes en informática. Se han realizado muchas investigaciones sobre el tema, pero enlistaremos solo dos necesidades básicas para cualquier programador.

    Algoritmo KMP (coincidencia de cadenas)

    El algoritmo Knuth-Morris-Pratt se usa en casos en los que tenemos que hacer coincidir un patrón corto en una cadena larga. Por ejemplo, cuando Ctrl + F una palabra clave en un documento, realizamos la coincidencia de patrones en todo el documento.

    Expresión regular (análisis de cadenas)

    Muchas veces tenemos que validar una cadena analizando una restricción predefinida. Se usa mucho en el desarrollo web para el análisis y la coincidencia de URL.

    Programación dinámica

    La programación dinámica (DP) es un método para resolver un problema complejo dividiéndolo en subproblemas más simples. Resolvemos los subproblemas, recordamos sus resultados y usándolos hacemos nuestro camino para resolver el problema complejo, rápidamente.

    Aplicaciones:

    • Hay muchos algoritmos y aplicaciones DP, pero yo nombraría uno y te dejará boquiabierto, método de Duckworth-Lewis en el cricket.

    Intenta aprender lo siguiente

    Estructuras de datos

    1. Lista enlazada:
    2. Apilar:
    1. Usar matrices
    2. Usando LL
  • Cola:
    1. Usar matrices
    2. Usando LL
  • Arboles:
  • Gráficos
  • Algoritmos

    1. Algoritmo codicioso
    2. Hashing
    3. Búsqueda lineal
    4. Búsqueda binaria
    5. Ordenamiento de burbuja
    6. Tipo de concha
    7. Tipo de inserción
    8. Ordenación rápida
    9. Ordenar fusión
    10. Tipo de montón

    Recomendar libros:

    • Para algoritmos, use Introducción a los algoritmos de Thomas Cormen
    • Amazon EE. UU .: Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein: 9780262033848: Amazon.com: Libros
    • Amazon India: Introducción a Algoritmos: Amazon: Libros
  • Para estructura de datos
    • Amazon India: Estructura de datos y acertijos algorítmicos: Amazon: Libros
    • Amazon EE. UU .: estructuras de datos y algoritmos más fáciles: estructura de datos y acertijos algorítmicos, segunda edición (9781468108866): Narasimha Karumanchi: libro

    definitivamente porque ds y algo desarrollan tu lógica.

    njjnjnsomewhere dentro de un método.

    Comenzando: Comenzando con el deporte de la programación competitiva: Triveni Mahatha, la respuesta de Gaurav Chandak a ¿Cómo me uno a CodeChef? , La respuesta de Ashish Gaur a ¿Cuáles son los mejores sitios web que debe visitar un programador?

    Tutoriales: Inicie sesión en Facebook | Facebook

    Preguntas temáticas: Inicie sesión en Facebook | Facebook

    Libro de estructuras de datos (debe tener): estructuras de datos y algoritmos fáciles: estructura de datos y algoritmos algorítmicos (inglés) – Compre estructuras de datos y algoritmos fáciles: estructura de datos y algoritmos algorítmicos (inglés) en línea a los mejores precios en India – Flipkart.com

    Preparación de la entrevista: Codificación La preparación de la entrevista es fácil, http://geeksforgeeks.com , Inicie sesión en Facebook | Facebook

    Consejo:

    La respuesta de Anudeep Nekkanti a ¿Cómo Anudeep Nekkanti se volvió tan bueno en la programación competitiva? , Inicia sesión en Facebook | Facebook, inicie sesión en Facebook | Facebook, inicie sesión en Facebook | Facebook

    Blogs de Sanu Gupta: estructuras de datos y algoritmos con “saanc”

    Publicaciones del blog de Abdur Rahman: Blog de Abdur 🙂

    Preguntas de concursos realizados por RECursion: Inicie sesión en Facebook | Facebook

    Diapositivas de las clases realizadas hasta ahora: Diapositivas

    Github: RECursion-NITD / ClassLectures

    Codeblocks: Descargar binario

    DevCpp: Dev-C ++

    Sitios web de visualización de DS y algo.

    https://www.cs.usfca.edu/~gal…/v…

    visualizar estructuras de datos y algoritmos a través de animaciones

    Comience con estos

    1. Divide y conquistaras,
    2. programación dinámica: es un algoritmo imprescindible, ya que la mayoría de los problemas necesitan su conocimiento (conocimiento completo).
    3. método codicioso,
    4. programación lineal,
    5. El algoritmo de Dijkstra, el algoritmo de Floyd-Warshall y el algoritmo de Kruskal o Prim
    6. Búsqueda binaria y algoritmos de clasificación,
    7. Gráficos, Árboles,
    8. Pila, cola y vectores
    9. Primera búsqueda de amplitud (BFS) / Primera búsqueda de profundidad (DFS).
    10. Matriz de sufijo

    Aprenda todo esto de TopCoder, GeeksForGeeks o Tutoriales de estructuras de datos y algoritmos (compilaron maravillosamente todos los algoritmos importantes de TopCoder y GeeksForGeeks)

    Nota: tienes que aprender mucho más que estos 10. Pueden ayudarte, pero para ser eficiente, necesitas mucho más que esto.
    Nota: las matemáticas también son necesarias, así que conviértete en eficiente también en matemáticas.

    Lo más importante: necesita pasión, perseverancia y sed de conocimiento.

    Aprenda los conceptos básicos de un lenguaje de programación, intente elegir lenguajes OOP como java, c ++, python, etc.

    y solo aprenda sobre la entrada, primero salga y luego siga:

    Programación competitiva

    http://www.geeksforgeeks.org/how…

    http://www.geeksforgeeks.org/how…

    http://www.geeksforgeeks.org/top

    Y practique en http://www.practice.geeksforgeeks.org

    Repase todos los conceptos y resuelva problemas relacionados con esos conceptos.

    Participe en competencias de codificación, no espere hasta completar cada tema.

    Puedes elegir otras plataformas también

    https://www.codechef.com

    http://www.spoj.com

    https://www.topcoder.com

    Feliz codificación Hermano,

    No se confunda solo siga y comience porque muchas personas pierden el tiempo solo para buscar cómo hacerlo

    La programación y el aprendizaje pueden ir uno al lado del otro. No piense en aprender todos los algoritmos y luego resolver problemas. Sugiero que elija un problema y luego aprenda y codifique.

    Para aprender, comience con SPOJ o Codechef problemas fáciles.

    Este tipo de preguntas ya ha sido respondida, como

    ¿Cuáles son los algoritmos “imprescindibles” para los concursos de programación en línea?

    Estructuras de datos y algoritmos

    Happy Coding 🙂