¿Cuál es el mejor enfoque para resolver estructuras de datos y problemas de algoritmos?

Cuando escribes programas por el simple hecho de hacerlo, ¡solo harás mucho bien!

Primero entienda que está aprendiendo Algoritmos y Estructuras de Datos para resolver un problema mayor. ¡Serán engranajes, ruedas, cojinetes y tornillos en una máquina más grande y compleja (me refiero al software 🙂) y no sirven de nada por sí solos! Bueno, ¡casi ninguno de ellos lo es! ¡Principalmente!

Solo te daré algunas instancias en las que si te acercas al problema más grande con una vista de pájaro, puedes “localizar” dónde encajará tu pieza de rompecabezas en particular. Usaré C como mi lenguaje de referencia aquí.

Uso de matrices : las matrices son la primera estructura de datos que cualquier estudiante de programación aprendería, incluso sin saberlo. En realidad, vamos a aprender sobre las matrices como “Colecciones de tipos de datos similares”, como se da en la mayoría de los libros, ¡vamos a seguir pensando en ellas como algo aislado de los demás!

    • Piense en ellos como una lista de elementos en los que se deben realizar operaciones similares y, por lo tanto, deben tener el mismo tipo de datos. Por ejemplo, todas las variables como edad, puntaje, distancia en metros, etc. se almacenan como enteros. pero no dividimos las edades por puntaje ni multiplicamos dos distancias. Tampoco vamos a encontrar promedios de edades + puntajes + distancia (¡lógicamente hablando!). Entonces, aunque son del mismo tipo de datos, pertenecerían a diferentes matrices.
    • En segundo lugar, como una lista de comestibles, necesitamos eliminar los artículos que ya hemos comprado. Pero, con una excepción, es erróneo e ineficiente mantener huecos dentro de una matriz almacenada digitalmente. Por lo tanto, cada operación de eliminación requiere elementos, después del que se va a eliminar, para moverse hacia el comienzo de la matriz en un lugar.
    • De manera similar, a diferencia de una lista en papel, no podemos usar una inserción “in situ” de un nuevo elemento sin sobreescribir otro. Por lo tanto, para preservar los elementos existentes, necesitamos mover todos los elementos, comenzando desde el anterior antes del cual tendría lugar una nueva inserción, hacia el final de la matriz.
    • Una vez más, cuando hacemos las operaciones anteriores, debemos ocuparnos de las limitaciones “físicas” del tamaño de la matriz y el número actual de elementos legales en ella. No es trivial expandir una matriz más allá de su capacidad y es erróneo (al menos lógicamente) eliminar más elementos de los que estaban presentes.
    • Ahora hacia la idoneidad de las matrices (y algoritmos relacionados) en un esquema más amplio de cosas. Si ha estudiado sobre estructuras y matrices de estructuras en C (que supongo que tiene), considérelas como sus registros. Y conjuntos de registros como tablas / listas de datos. Puede ver / estudiar algoritmos de clasificación y búsqueda principalmente en int sy a veces en cadenas s. El único campo (conjunto de) del registro que podemos usar para ordenar / buscar todos los registros, se tratará como su clave y se usará como criterio para ordenar / buscar en la lista de datos. La lógica seguirá siendo la misma, pero la variable escalar será reemplazada por un campo de un registro.

Graduarse a listaso listas de Me gusta – Debido a los problemas en la inserción y eliminación de datos y la limitación de un espacio de almacenamiento casi fijo, las listas dinámicas se crean con estructuras autorreferenciales . Implican un poco de sobrecarga en términos de espacio adicional y limitan el acceso aleatorio a cualquier elemento de la lista (lo que podría afectar), pero son más adecuados para las tablas de datos que son de naturaleza transaccional con inserciones y eliminaciones frecuentes en cualquier lugar. Las diferentes formas de la lista vinculada proporcionan diferentes “actualizaciones” sobre la base: la lista de encabezados se puede usar para almacenar metadatos, las listas doblemente enlazadas se pueden usar para una enumeración más rápida en ambas direcciones, y así sucesivamente.

Las pilas y Ques son listas : son listas especiales con cierta disciplina impuesta: LIFO para la pila y FIFO para la cola.

  • Una pila se puede considerar como un lugar de descanso temporal para atender algo más urgente o en la cadena de acciones. Almacena nuestra historia local de movimientos que se pueden rastrear (rastrear hacia atrás). Por ejemplo, cuando hace clic en el botón de notificaciones en la aplicación Quora, las notificaciones aparecen sobre la pantalla de inicio. Cuando hace clic en una notificación específica, aparecen sus detalles. Pero, cuando presiona el botón ‘atrás’ en su teléfono móvil de la flecha hacia atrás (<-) en la aplicación, vuelve a aparecer la pantalla anterior. Además, la visualización visual / gráfica de la notificación recién abierta también cambia para indicar que se ha leído. Esta es una pila de trabajo aquí con el seguimiento hacia atrás (retrocediendo en secuencia de acciones) y el valor de retorno (indicado por el cambio en la apariencia visual de las notificaciones que acaban de leer).
  • Del mismo modo, una cola se puede utilizar como área de espera temporal para acciones que se tomarán una tras otra. De nuevo toma el acase de

El conocimiento no es poder. La aplicación de ese conocimiento es

Cuando estaba en la universidad y preparándome para las principales empresas, tuve problemas para resolver problemas a pesar de tener una buena comprensión de las estructuras de datos. Podría escribir programas estándar como crear Lista enlazada, Árbol, Pila, Cola, etc. Cuando comencé a practicar muchos problemas y comencé a participar en la Programación Competitiva (aunque no participé mucho en ella), comencé a ver patrones. Muchos problemas fueron solo las variaciones de problemas que resolví en el pasado. Solo necesitaba ajustar sus soluciones, cambiar algunas cosas aquí y allá, ¡y listo!

Lo que quiero decir es que no existe un mejor enfoque. Debe comprender los conceptos básicos y los algoritmos estándar (como BFS y la clasificación topológica) y luego practicar muchos problemas.

Te pueden gustar mis otras publicaciones:

  • Viaje de un niño de un pueblo pequeño a Microsoft: una historia no contada Parte 1
  • La vida de un ingeniero de Microsoft
  • ¿Cómo prepararse para las principales empresas multinacionales?
  • Friki en la cima – Aashish Barnwal | Acostúmbrese a escribir código limpio, legible, flexible y robusto – GeeksforGeeks

Escribo sobre programación y experiencias de la vida. Si me sigues, no te decepcionaré. Aashish Barnwal

¿Alguna vez has pensado “cómo funciona netflix” o “cómo funciona la búsqueda de google”.

La respuesta es el algoritmo. En el mundo real utilizamos algoritmos para técnicas de resolución de problemas. La importancia del algoritmo no puede ser socavada. El algoritmo es el único responsable de impulsar la revolución técnica en la última década. El algoritmo depende de la complejidad del tiempo y el espacio. Los buenos algoritmos requieren menos tiempo y memoria para realizar una tarea.

En caso de que necesite crear su propio algoritmo, puede usar estas cinco técnicas de resolución de problemas.

1. Ejemplo: crear el ejemplo del algoritmo

Antes de pensar en la lógica del algoritmo, debemos entender la pregunta con claridad. Escriba al menos dos ejemplos, indicando entrada y salida. Este trabajo inicial de dos minutos eliminará la incertidumbre de malinterpretar la pregunta y pensar en la dirección equivocada.

  • Por ejemplo ,

La pregunta es encontrar el primer carácter no repetido en la cadena

Luego, antes de escribir el algoritmo, siga estos pasos

Ejemplo 1 :
Entrada: AliveIsAwesome
Salida: l (pequeña L)

Ejemplo 2
Entrada: LoveYourself
Salida: v

Esta es una de las técnicas de resolución de problemas más utilizadas para algoritmos.

2. Coincidencia de patrones

Tenemos que considerar a qué problemas es similar el algoritmo, tenemos que averiguar si podemos modificar la solución para desarrollar un algoritmo para el problema dado.

  • Por ejemplo :

Pregunta: Se ha girado una matriz ordenada para que los elementos puedan aparecer en el orden 3 4 5 6 7 1 2. ¿Cómo encontraríamos el elemento mínimo?

Problemas similares

1.Encuentre el elemento mínimo en una matriz.
2.Encuentre un elemento particular en una matriz (por ejemplo, búsqueda binaria).

Es poco probable que encontrar el elemento mínimo en una matriz sea útil aquí, ya que no utiliza la información proporcionada (que la matriz está ordenada).
La búsqueda binaria podría ser muy útil. Sabemos que la matriz está ordenada, pero rotada. Por lo tanto, debe proceder en un orden creciente, luego reiniciar y aumentar nuevamente. El elemento mínimo es el punto de “reinicio”.

Comparando el primer elemento y el medio (3 y 6), sabemos que el rango sigue aumentando. Indica que el punto de reinicio debe ser posterior al 6 (o 3 es el elemento mínimo y la matriz nunca se rotó). Podemos continuar aplicando las lecciones de la búsqueda binaria para identificar este punto de reinicio, buscando rangos donde IZQUIERDA> DERECHA. Es decir, para un punto en particular, si IZQUIERDA DERECHA, entonces lo hace.

A menudo practicamos para escribir algoritmos. Si escribimos algoritmo, entonces no podemos tener algoritmo

3. Simplifica y generaliza

Cambiar la restricción (por ejemplo, tamaño, longitud, tipo de datos) para simplificar el problema. Por ejemplo, cambiar el tipo de datos de doble a int, reducir el problema. Escriba el algoritmo para el tipo de datos int y luego generalice para el doble.

  • Por ejemplo ,

La pregunta es recortar los espacios en blanco en la cadena de contraseña o apretar la cadena

Resuelve así

1. moldura izquierda (eliminar espacios en blanco del extremo izquierdo)
2. moldura derecha (eliminar espacios en blanco de la extrema derecha)
3. eliminar espacios en blanco entre la cadena

4. Caso base y construcción

Este enfoque se usa más ampliamente en el algoritmo recursivo.
Resuelva el algoritmo primero para un caso base (por ejemplo, solo un elemento). Luego, intente resolverlo para los elementos uno y dos, suponiendo que tengamos la respuesta para el elemento uno. Luego, intente resolverlo para los elementos uno, dos y tres, suponiendo que tengamos la respuesta a los elementos uno y dos.

  • Por ejemplo ,

La pregunta es encontrar todas las permutaciones posibles de una cadena , suponiendo que todos los caracteres de la cadena sean únicos.

Cadena de entrada: “abcdef”

Procedimiento de resolución:

Tome un carácter a la vez de la cadena de entrada

Caso base
a (primer elemento de la cadena de entrada): a (posible permutación)
Construir
ab: ab, ba
abc: abc, acb, bac, bca, cba, taxi
a B C D…
a B C D e…
a B C D e F…

5. Lluvia de ideas sobre estructura de datos

Este es un método agotador y se basa en el método de éxito y prueba. Simplemente, ejecute una lista de estructuras de datos e intente aplicar cada una.

Por ejemplo ,
Pregunta: Los números se generan aleatoriamente y se almacenan en una matriz (en expansión). ¿Cómo mantendríamos un registro de la mediana (número impar de elementos: el número medio pero si el número par de elementos es el promedio de los dos elementos medios)?

  • Lluvia de ideas sobre estructura de datos:

1. Lista vinculada : las listas vinculadas no funcionan muy bien con el acceso y la clasificación de números. Por lo tanto, es mejor evitarlo.

2. Matriz : no estoy seguro, ya que tenemos un http: //array. Podría ser costoso mantener los elementos ordenados en una matriz. Mantendremos esta opción en espera y volveremos a ella si es necesario.

3. Árbol binario : puede ser una opción viable, ya que los árboles binarios funcionan bastante bien con los pedidos. Como sabemos, la parte superior del árbol de búsqueda binaria perfectamente equilibrado es mediana si hay un número impar de elementos presentes en el árbol de búsqueda binaria. Pero si hay un número par de elementos, la mediana es en realidad el promedio de los dos elementos del medio. Los dos elementos del medio no pueden estar en la parte superior. Esto es probablemente lo que tenemos que mirar, esperemos.

4. Montón : un montón es realmente bueno para hacer un pedido básico y realizar un seguimiento de max y mins. Supongamos que tenemos dos montones, podríamos hacer un seguimiento de la mitad más grande y la mitad más pequeña de los elementos. La mitad más grande se mantiene en un montón mínimo, de modo que el elemento más pequeño en la mitad más grande está en la raíz. La mitad más pequeña se mantiene en un montón máximo, de modo que el elemento más grande de la mitad más pequeña está en la raíz. Ahora, con estas estructuras de datos, tenemos los posibles elementos medianos en las raíces. Si los montones ya no son del mismo tamaño, podemos “reequilibrar” rápidamente los montones sacando un elemento de un montón y empujándolo hacia el otro.

Tenga en cuenta que cuantos más problemas tenga, mejor instinto desarrollará sobre qué estructura de datos aplicar.

El método del libro de reglas.

Dado que quiero complejidad C, necesito usar DS.

Genere un libro de reglas como tal y agregue nuevos elementos al libro de reglas. Y tu eres bueno.

Además, lo que realmente necesita estudiar es – El arte de la programación de computadoras – Wikipedia, para construir un libro de reglas completo y completo.

Comprender los conceptos de las estructuras de datos es fácil, puede escucharlo como una historia, pero convertir eso en el programa es una parte difícil.

Escriba su algoritmo en un papel verbalmente, luego conviértalo en un programa y luego ajústelo. Si tiene claro su lógica del algoritmo, puede resolverlo fácilmente con sus conocimientos de programación.

Aprender los conceptos básicos con fuerza sin duda lo ayudará a resolver sus problemas mucho más fácilmente. Dedique más tiempo a aprender lo básico. A menos que sea claro y confiado, no pase al siguiente tema.

Feliz aprendizaje.

More Interesting

¿Puede crear un puntero 2D dinámico que almacene elementos ingresados ​​por el usuario como una matriz y lo muestre antes y después de liberarlo?

¿Cómo se puede resolver este problema mediante la búsqueda binaria, Shil y la fábrica de juguetes?

¿Cuál es el algoritmo perfecto para extraer la forma, el color, la textura y los bordes de las partes cilíndricas en MATLAB en preparación para el aprendizaje supervisado?

¿Alguien podrá escribir un algoritmo que pueda hacer dinero en el mercado durante un período de 20 años?

Informática: ¿Por qué la recursión es más elegante que la iteración?

Cómo agregar un contador de comparación para combinar la clasificación en Python

¿Cuál es el algoritmo más corto para probar si dos cadenas son anagramas?

¿Cuáles son algunos conceptos erróneos comunes sobre los algoritmos?

¿Por qué las personas usan mid = low + (high-low) / 2 en lugar de (low + high) / 2?

¿Se ha encontrado alguna solución para los problemas de NP completo?

¿Puedo obtener una breve descripción general del documento 'Generación precisa de hologramas utilizando el método basado en capas y el algoritmo de transformación de Fourier iterativo'?

¿Cuál es la técnica / algoritmo utilizado por mensajeros como WhatsApp y BBM para comprimir imágenes?

Dado un gráfico bipartito, ¿cómo puedo encontrar su subgrafo que es un gráfico bipartito completo y tiene la mayor cantidad de vértices?

¿La evolución biológica es algorítmica?

¿Alguien puede explicar el algoritmo de programación Round Robin?