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
- Lista enlazada (muy, muy imp, ya que te enseña la implementación)
- Pilas
- 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 …
- Árbol binario
- Árbol de búsqueda binario (estructuras de datos utilizadas para el almacenamiento rápido de datos)
- Arbol negro rojo
- Hash -Tablas
- Muchísimo
- Priority_queues
- Intentos
- Segmentar arboles
- Árboles indexados binarios
- Matriz de sufijo
Para los algoritmos puedes ver
- Ventana de deslizamiento
- Búsqueda binaria
- Ordenar como fusionar, rápido, contar, radix, bucket, inserción, burbuja …
- Codiciosos -Algoritmos
- Programación dinámica (esto es muy importante)
- Algoritmos de gráficos como BFS, DFS, Djkstra, Prims, Kruskal, Floyd Warshallll, etc. Trate de usar Djkstra con prioridad_cinta
- 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 🙂