Cómo recordar los algoritmos.

Después de haber aprendido, y quiero decir realmente aprendido, de muchos algoritmos, empiezas a notar patrones y obtienes la capacidad de llenar espacios en blanco mediante la improvisación.

Esta comprensión intuitiva es difícil de ganar; debe hacer algo como trabajar con la mitad de los algoritmos de CLRS hasta el punto de poder ejecutarlos manualmente y codificarlos.

Entonces tu modelo mental puede ser comprimido a algo como esto:

  • búsqueda binaria: divide y vencerás, elige un elemento en el medio y decide si parar, recuperar a la izquierda o repetir a la derecha
  • ordenar fusionar: divide y vencerás, divide la lista, ordena recursivamente cada mitad, fusiona la cremallera
  • zipper merge: greedy, mira el primer elemento de cada lista y elige el menor
  • ordenación rápida: divide y vencerás, elige un pivote aleatorio, agrega recurse ( pivote)
  • Exploración de Graham: ordene en el sentido de las agujas del reloj, examine los tríos de puntos consecutivos, mantenga los que se inclinan hacia la derecha

Ninguno de estos es suficiente como definiciones de algoritmos porque omiten tantos detalles esenciales. Por ejemplo, no hay una explicación de cómo identificar y manejar los casos base de cualquiera de los algoritmos de dividir y vencer. La descripción de la combinación de la cremallera no explica qué hacer cuando una lista se queda vacía antes que la otra. El pseudocódigo correcto debe especificar este tipo de cosas con precisión.

Pero cuando haya alcanzado el nivel de dominio que describí anteriormente, no necesita recordar ese tipo de detalles, porque puede ordenarlos a pedido si alguna vez lo necesita.

Este es el principio de la fragmentación aplicada a los algoritmos. La primera vez que empiezas a aprender, cada minuto de detalle y línea de pseudocódigo es un micro-fragmento, por lo que estás limitado a recordar tal vez un algoritmo completo a la vez. A través del aprendizaje, patrones como dividir y conquistar, codiciosos, manejar casos básicos, manejar listas vacías, etc. se convierten en macro-fragmentos, de modo que puede recordar docenas de algoritmos a la vez.

Creo que este es uno de los defectos de la programación competitiva. En algún momento tienes que memorizar literalmente los códigos de algoritmos para tener éxito. Normalmente se hace de la siguiente manera:

  • Toma un algoritmo. Entiende cómo y por qué funciona.
  • Codifica el algoritmo por ti mismo, no reescribas el código de otros.
  • Hazlo funcionar. Encuentra el problema más fácil posible, involucrando el algoritmo.
  • Mira alguna buena implementación.
  • Haga su implementación mejor y más corta.
  • Resuelve un montón de problemas relacionados con el algoritmo. Reescriba el algoritmo desde cero cada vez.

Sí, es bastante difícil y lleva mucho tiempo, pero lo que obtienes es una buena comprensión del algoritmo y la capacidad para codificarlo desde cero muy rápidamente.

Si el primero es bastante utilizable, el segundo es usable solo en programación competitiva.

No soy un programador competitivo “profesional”, nunca dediqué mucho tiempo al proceso de capacitación, por lo que a veces omití algunos puntos de la lista y, por lo general, jugaba una mala broma conmigo en un concurso en el que no puedes usar cualquier cosa. Entonces, cuando hago problemas para los concursos, trato de no involucrar nada que tenga que memorizar.

Has preguntado sobre el grupo de pares. Sí, creo que es importante discutir todo con sus compañeros, siempre puede obtener buenos consejos de personas con experiencia. Pero tienes que hacerlo a través de la lista de todos modos.

A2A

No recuerdo todos, especialmente para aquellos que no recuerdo que no resolví> = 2 problemas seguidos, es decir, en el mismo día / días sucesivos. Si no resuelvo una sola pregunta con respecto a ese tema, no recuerdo nada, después de una semana. Porque posiblemente no resuelva que el pensamiento fuera incorrecto de todos modos, bueno, probablemente, no definitivamente.

Por otro lado, es casi imposible recordar todo. En realidad no importa mucho si no te acuerdas. Cada vez que pierdo el control sobre un tema, puedo recordarlos releyéndolos o revisando las notas si lo tengo. La mayoría de las veces toma una hora como máximo, incluso para recordar las complejas. Si tengo notas, serán menos de 2 minutos literalmente. Sí, es mejor tener notas.

Muy buena pregunta sobre tener otros temas también. Por la misma razón, pasé de los algoritmos a las estructuras de datos ahora, después de obtener 100 posiciones en las estructuras de datos, pasaré a la IA. Incluso después de 100 en IA, pasaré a otra cosa, me gusta así, debido a la resolución de problemas en ellos. No importa mucho si no me acuerdo. De hecho, ¿cómo puedo recordar tantas cosas de todos modos? [[ Actualización : Un año después, en 2018, no obtuve el Top100 en DS, así que tuve que aprender más Matemáticas básicas, no fui a la IA, en lugar de otras materias, como sql, database, planeando en expresiones regulares, no seguro donde terminará. 🙂]]

Tenía una opción para sincronizar con los 20 principales en SPOJ, pero cené en colaboración, porque quería resolver y experimentar que Top100 lo había hecho yo solo, pero tuve que dejar el trabajo y sentarme en casa durante 3 meses para pensar en todo. aunque calcular llegar a un lugar 200 fue fácil, llegar a Top100 no fue tan fácil. Entonces, depende de persona a persona que puede ser importante para usted colaborar con otros para lograr algo que considere importante. Para mi no me importa mucho el objetivo que tenía.

Espero que haya ayudado.

Muy feliz de conectar.

Los algoritmos son la mejor parte de la informática. Nunca intente aprenderlos, sino que intente entenderlos, haga un flujo de algo en su mente.

A ella vamos paso a paso:

  1. Averigua por qué se creó el algo y qué hace.
  2. Intenta entender el concepto y prepara una gráfica mental lógica.
  3. Intente crear el programa después de comprender el concepto. Está bien si su programa no funciona.
  4. Compruebe la solución en línea.
  5. Crea un diagrama de flujo para entender mejor algo.
  6. Cree un nuevo o modifique su programa actual hasta que su programa dé el resultado correcto.
  7. Sigo teniendo problemas, entonces intente desbaste. Funciona como un encanto.

A continuación se presentan algunos sitios web para practicar y entender los algoritmos:

http://Geeksforgeeks.com

HackerEarth – Desafíos de programación y trabajos de desarrollador

HackerRank

¡¡¡Espero que esto ayude!!!

En lugar de tratar de recordar, hazlos parte de tu memoria. Cuando los haces parte de tu memoria, tu trabajo se vuelve intuitivo. Para explicarlo mejor, déjame preguntarte si recuerdas cepillarte los dientes todos los días (espero que no, al menos para la mayoría de las personas, no), sucede porque tu mente lo sabe e intuitivamente te pones un cepillo por las mañanas.

Entonces, la siguiente pregunta es cómo hacer que sean parte de tu memoria. La respuesta es hacerles un hábito y hacer un nuevo hábito requiere práctica disciplinada. Estudio, implementación y revisión – ciclo de repeticiones. Pruébalo durante 1 mes y repítelo para el próximo mes. Este es el algoritmo para recordar algoritmos.

Espero que ayude.

¿Recuerdas cómo hacer 1 + 1? ¿Cómo recuerdas cómo resolver las ecuaciones matemáticas?

Primero necesitas entenderlos, luego practicar.

No memorizamos cada línea de código de ejemplo, pero entendemos el concepto central y con una cantidad razonable de práctica los recordaremos.

Y sí, hay otros temas, pero ¿qué tema es más fácil de practicar que los algoritmos? Puede practicar algoritmos en muchos años, no solo en el semestre en el que tiene los cursos de algoritmos.

Los algoritmos son la parte más importante para escribir cualquier programa. Es el conjunto finito de líneas para resolver cualquier problema. Algunas características de los algoritmos: –

  1. Precisión – los pasos se establecen con precisión (definidos).
  2. Unicidad: los resultados de cada paso se definen de forma única y solo dependen de la entrada y del resultado de los pasos anteriores.
  3. El algoritmo se detiene después de que se ejecutan un número finito de instrucciones.
  4. Entrada – el algoritmo recibe entrada.
  5. Salida – el algoritmo produce salida.
  6. Generalidad: el algoritmo se aplica a un conjunto de entradas.

Uno no debería aprender realmente el algoritmo, incluso ellos deberían seguir los pasos para obtenerlos:

  • Toma un algoritmo. Entiende cómo y por qué funciona.
  • Codifica el algoritmo por ti mismo, no reescribas el código de otros.
  • Hazlo funcionar. Encuentra el problema más fácil posible, involucrando el algoritmo.
  • Mira alguna buena implementación.
  • Haga su implementación mejor y más corta.
  • Resuelve un montón de problemas relacionados con el algoritmo. Reescriba el algoritmo desde cero cada vez.

Primero necesitas entenderlos, luego practicar.

No memorizamos cada línea de código de ejemplo, pero entendemos el concepto central y con una cantidad razonable de práctica los recordaremos.

No puedes, y no hay necesidad real de hacerlo.

¿Puedes recordar recetas de comida de la parte superior de tu cabeza? Realmente no hay necesidad de hacerlo porque solo necesitas guardar la receta en algún lugar y luego encontrarla usando solo su nombre.

La misma lógica exacta se aplica a los algoritmos.

Solo necesitas saber dónde mirar.

Hay muchos algoritmos, pero el que personalmente he probado se describe aquí: http://www.ted.com/talks/joshua_foer_feats_of_memory_anyone_can_do