¿Existe un algoritmo rápido que, dada una cuadrícula de números, encuentre todas las rutas posibles que sumen a un número dado?

En primer lugar, no es posible encontrar todas las rutas posibles rápidamente, simplemente porque hay demasiadas. Si le doy una cuadrícula de todos los ceros y también suma = 0, cada una de las [matemáticas] {2n-2 \ elegir n-1} [/ matemáticas] las posibles rutas serán válidas, y ese número es exponencial en [matemáticas] n [/ matemáticas]. Entonces, cambiemos la pregunta: a partir de ahora, solo intentaremos contar todas las rutas válidas.

Si los números en su cuadrícula son enteros pequeños no negativos (por ejemplo, de 0 a [matemática] x [/ matemática]), el problema tiene una solución de tiempo pseudopolinomial: podemos usar la programación dinámica para responder todas las preguntas de la forma “¿Qué es la cantidad de rutas válidas que van de (1,1) a (a, b) y tienen la suma c? ”Esta solución se ejecutará en [matemática] O (n ^ 3x) [/ matemática], ya que hay [matemática ] n ^ 2 [/ math] celdas y cada suma parcial es como máximo [math] (2n-1) x [/ math].

En general, este problema es NP-hard. Por ejemplo, podemos reducir la PARTICIÓN a este problema. Dada una instancia [math] (a_1, \ dots, a_n) [/ math] de PARTITION, tome una cuadrícula [math] (n + 2) \ times (n + 2) [/ math], complétela con ceros, luego escriba los números [matemática] a_1, \ puntos, a_n [/ matemática] en la diagonal principal (excepto las esquinas). Ahora, puede resolver la instancia original de PARTITION preguntando si hay al menos una ruta válida con una suma igual a [math] (\ sum a_i) / 2 [/ math].

Primero, contemos cuántos caminos hay. No importa qué camino tomes, siempre te llevará movimientos [matemática] 2 (n-1) [/ matemática] para llegar allí. Representa cada movimiento hacia abajo con un 0 y cada movimiento hacia la derecha con un 1. El número de caminos es el número de cadenas binarias de longitud [matemática] 2 (n-1) [/ matemática] con exactamente [matemática] n-1 [ / math] “[math] 1 [/ math]” s. Eso se puede contar por [math] {{2 (n-1)} \ choose {n-1}} [/ math]. El enfoque de la fuerza bruta de verificar la suma de cada uno de estos es [matemática] O (4 ^ {n-1}) [/ matemática]. Lo obtengo usando la aproximación de factoriales de Stirling en el coeficiente binomial. Esto obviamente no cuenta tan rápido.

¡Necesitamos algo más inteligente!

Está buscando TODAS las rutas con una suma dada, por lo que tenemos que verificar cada ruta, pero no necesariamente una a la vez.

Lamentablemente, ahora tengo que quedarme sin nada, pero lo agregaré más adelante.

More Interesting

¿Qué algoritmos usa Bing para clasificar los resultados de búsqueda? ¿La patente de Google les impide usar PageRank? Análisis de enlaces en general?

¿Cuán específicamente la memoria de la clase de almacenamiento cambiará las arquitecturas, los ecosistemas (incluidas las opciones de lenguaje de programación) y los algoritmos para big data?

¿Desde dónde debo comenzar a aprender los algoritmos necesarios para la programación competitiva?

¿A qué libro se refirió Thomas Cormen mientras estudiaba algoritmos?

¿Qué algoritmo de aprendizaje automático es mejor para agrupar pequeños cuerpos de texto por tema / categoría?

¿Qué estrategia debo usar para resolver esta pregunta? - HackerEarth | Iniciar sesión (Equipo del proyecto | HackerEarth)

¿Es una buena idea aprender algoritmos antes de los conceptos de OOP en la programación de Python?

Cómo usar el código VHDL para generar el seno de un ángulo dado usando el algoritmo CORDIC

¿Funciona la siguiente implementación para encontrar la subcadena común más larga dentro de dos cadenas?

¿Cómo funciona el algoritmo de 'conteo' de Gmail?

¿Cuáles son los usos prácticos de 2-3 árboles o árboles rojo-negros?

¿Qué algoritmos son buenos candidatos para el reconocimiento de sonido? Estoy principalmente interesado en reconocer sonidos en un entorno doméstico, por ejemplo, un temporizador de microondas que suena, un teléfono que suena, un timbre, etc.

¿Cuán relevantes son los fundamentos de CS (compiladores, análisis de algoritmos, estructuras de datos, etc.) en el desarrollo web profesional?

¿Cómo funciona el algoritmo de armonía?

Cómo mejorar la lógica o la presentación de la conjetura descrita en una respuesta para que más personas puedan entender lo que creo que es un método sorprendente para crear algorítmicamente un conjunto primo potencialmente infinito