Gracias por A2A
Hola saubhagya
Entiendo tu entusiasmo, pero, por favor, no entres en Algoritmos de aprendizaje …
Digo, la mejor manera de hacerlo es aprender las estructuras de datos y la asignación de memoria dinámica como punteros (esto es muy importante cuando se trata de implementación).
*** ** Tenga una idea clara sobre los punteros y su gestión de datos *****
Luego, utilizándolos, aprenda estructuras de datos básicas como
- Lista enlazada (Muy muy imp, ya que le enseña la implementación)
- Pilas
- Colas, etc. primero
Impleméntelos mucho usando su idioma preferido … Impleméntelos hasta cierto punto
hasta que sienta que es un camino fácil para resolver problemas menores como el intercambio de nodos en una lista, la reversión de una lista vinculada, las inserciones, la fusión de la lista, el empuje emergente en las colas … etc …
———————————————————————————————————————————
Aquí hay un buen problema que puede resolver usando la lista vinculada
Dada una lista de números (tanto + ve como -ve) que se ordenan en absoluto
orden de valores … Ordenarlos en orden original … Solo necesita tener
conocimiento sobre punteros, estructuras, eliminación, inserción, intercambio de nodos, recorrido de una lista vinculada, etc.
Ejemplo
Lista dada ::: (1) -> (-2) -> (3) -> (4) -> (- 5) -> (5)
Lista de salida ::: (-5) -> (- 2) -> (1) -> (3) -> (4) – (5)
—————————————————————————————————————————
De aquí en adelante, le sugiero que aprenda C ++. Es un lenguaje eficiente que tiene bibliotecas incorporadas para diferentes estructuras de datos …
- Nota :: Pero primero impleméntelos en C antes de pasar a C ++ a pesar de que C ++ proporciona plantillas predeterminadas (misma estructura de datos de pila con diferentes tipos de datos como cadenas, enteros, puntos flotantes, básicamente llamados sobrecarga)
***** La línea anterior es VV V VVV importante … ********** 8
——————————————————————————————————————————
Para las pilas puedes resolver cosas como
Supongamos que hay una secuencia de paréntesis que consta de {,} paréntesis. Debe saber si la secuencia está bien equilibrada
Por ejemplo: {{{{}}}} es una secuencia bien equilibrada mientras que} {y {{{} y {{{} {{} no lo son
Para esto, debes usar pilas de caracteres y lógica simple …
Debe ver si existe un corchete de cierre para cada corchete de apertura y que} debe estar a la derecha del {corchete ..
Ejemplo:
{{{}}} :::: Sí
{}{{ ::: No
—————————————————————————————————————————
Ahora, después de aprender esto, puede comenzar con algoritmos
Asegúrese de obtener un buen agarre de C ++ antes de esto.
———————————————————————————————————————————
Ahora te diré por qué necesitamos un algoritmo
Un algoritmo no es más que una forma que nos ayuda a resolver un problema …
Tiene dos factores clave 1) Eficiencia 2) Ahorro de memoria
Por ejemplo ,
Tiene una lista de números en orden y necesita encontrar si
existe un número particular en la lista o no
Supongamos: lista ::::: 1 2 4 5 6 9 10 15 17
Necesario encontrar: 15
Normalmente iteraríamos la lista y verificaríamos si este elemento existe o
no, así que necesitamos un ciclo que recorra toda la lista y que
los bucles se ejecutan solo (tamaño de lista) veces => O (N)
Ahora, ¿hay algún algoritmo eficiente?
Sí, por supuesto => Búsqueda binaria
Vea, teníamos este elemento del medio en la mano => list [(size / 2)],
Aquí surgen tres casos posibles
1) elemento> lista [(tamaño / 2)];
2) elemento = lista [tamaño / 2)];
3) elemento> lista [tamaño / 2];
Ahora, si sabemos que en cuyo caso el elemento encaja, podemos ignorar
la media lista en la que el elemento no encaja y sigue buscando
otro medio .
Eso significa que podemos ignorar la mitad de la lista en cada iteración y
entonces nuestro espacio de búsqueda se comprime a (tamaño) / 2
T (N) = T (N / 2) + O (1) es la relación de recurrencia
Y así, resolver esto nos da la complejidad de ser O (log (N))
que es mucho más rápido que la ingenua complejidad O (N)
es decir, el uso de este algoritmo hace que la búsqueda se limite al registro (N) veces
No te preocupes, aprenderás cosas más tarde si no entiendes …
Esto te hace entender la verdadera intención de por qué usamos
algoritmo …
Ahora comience a aprender algoritmos en este orden
Complejidad Amortizada
- Big-Oh, Big -omega, anotaciones Theta y su uso
Por ej .:
Considera este bucle
para (int i = 0; i
Este ciclo se ejecuta n veces, por lo que la Complejidad está en el orden de N => O (N)
Recuerde, implemente estas estructuras en C. Analice la complejidad y el tiempo de ejecución limpiamente …
.. Necesitará mucha ideología y lista de punteros, etc., etc., que se mencionaron anteriormente …
- Árbol binario
- Árbol de búsqueda binaria (estructuras de datos utilizadas para el almacenamiento rápido de datos)
- Árboles negros rojos
- Tablas Hash
- Muchísimo
- Colas_de prioridad
- Intentos
- Segmentar árboles
- Árboles indexados binarios
- Matriz de sufijos
Para algoritmos puedes ver
- Ventana deslizante
- Búsqueda binaria
- Ordenando como fusionar, rápido, contar, radix, cubo, inserción, burbuja …
- Codiciosos -Algoritmos
- Programación dinámica (esto es muy muy importante)
- Algoritmos gráficos como BFS, DFS, Djkstra, Prims, Kruskal, Floyd Warshallll, etc. Intenta usar Djkstra con priority_queue
- Casco convexo
—————————————————————————————————————————
Recuerde, la práctica es lo que necesita para usar estos algoritmos de manera eficiente
Entonces, mientras aprende un nuevo algoritmo, resuelva problemas relacionados con estas etiquetas en
Y para practicar problemas en estructuras de datos, puede usar
http://www.hackerrank.com/domains
Para obtener recursos, puede aprenderlos de YouTube para videos en vivo o
http://www.geeksforgeeks.org
http://www.topcoder.com
Por encima de dos son los mejores recursos utilizados actualmente y puedes aprender mucho
———————————————————————————————————————
Después de esto, puedes practicar problemas con estos jueces para
Juez en línea A2 (esto tiene problemas de temas sabios en orden de dureza)
http://www.codeforces.com
Juez Esfera Online (SPOJ)
Concurso de programación, concurso de programación, programación informática en línea
Topcoder es repetible, crowdsourcing a pedido, hecho correctamente, a escala.
————————————————————————————————————-
****** Resuelva los problemas por su cuenta, a pesar de que son difíciles …… Si no, mire los editoriales y vuélvalos a implementar (no haga Ctrl + C y Ctrl + V por favor)
Use C en el Inicio si es posible … Aprenderá mucha implementación de ellos
Esto es todo. Pero si se siente cómodo con las implementaciones, puede cambiar a C ++. Tiene nombres de biblioteca predeterminados STL (Biblioteca de plantillas estándar) …
Buena suerte 🙂