¿Qué problemas algorítmicos has resuelto en tu trabajo?

Soy un desarrollador web front-end, por lo que los escenarios que exigen algoritmos inteligentes son raros. Aquí hay un escenario del año pasado (no la única vez) donde utilicé algoritmos:

Escribí un complemento para ejecutar acciones cuando se presionaron los atajos de teclado / secuencias. Por ejemplo, puede enlazar a “Ctrl + K, D” y ejecutará una acción cuando presiona “Ctrl + K”, suelta y luego presiona “D”. Cada vez que se presionaba una tecla, necesitaba ver si se cumplía alguna secuencia registrada. Como esto tenía que suceder con cada pulsación de tecla, necesitaba que fuera rápido. También esperaba más de 50 métodos abreviados de teclado en el sistema. No quería iterar sobre los 50 atajos de teclado cada vez que se presionaba una combinación de teclas en una secuencia. Decidí poner cada secuencia de teclado en un trie, donde los nodos del trie eran los combos de teclas que formaban esa secuencia (en orden inverso). Entonces, si el método abreviado de teclado era “Arriba, Arriba, Abajo, Abajo, Izquierda, Derecha, Izquierda, Derecha, B, A”, entonces insertaría “A” debajo del nodo raíz, luego “B” debajo de “A”, luego “Derecha” debajo de “B”, etc. Luego, mantuve una cola de tamaño fijo de los últimos combos de teclas [math] k [/ math] que se presionaron, donde [math] k [/ math] era la longitud máxima de Una secuencia que había sido registrada. Cada vez que se presiona una combinación de teclas, se agrega a la cola. Luego, iteraría a través de la cola del más reciente al menos reciente, buscando cada valor en niveles sucesivos del trie. Activaría el controlador de acción en el valor más profundo que encontré en el camino hacia abajo. Ahora, en lugar de tener que hacer coincidir los métodos abreviados de teclado [math] \ Theta (n) [/ math] con mi cola, podría repetir la cola una vez. Esto redujo la complejidad de [matemáticas] \ Theta (nk) [/ matemáticas] a [matemáticas] \ Theta (k) [/ matemáticas].

También escribí un analizador de descenso recursivo para el complemento de atajos de teclado (en mi propio tiempo) para analizar los atajos de teclado que estaban registrados. Terminé sin usarlo porque era más lento que el enfoque “for loop” que tomé. (El análisis no fue sencillo debido a casos difíciles como: “Ctrl + ,,, + a” [“Ctrl” y “coma” seguido de “coma” y “a”]).

Ciertamente, hubo lugares donde los algoritmos podrían acelerar otras cosas en las que estaba trabajando, pero sabía que no valdría la pena implementar los algoritmos a favor de algoritmos más simples y menos eficientes (principalmente porque el subconjunto de datos con el que trabajo en el el front-end nunca es más grande que 20-50 artículos). Sin embargo, hay muchos escenarios en los que ayudan las tablas hash. Como las tablas hash son parte de JavaScript, las uso todo el tiempo.