Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

471
Views
Número de formas de pasar de la esquina superior izquierda a la esquina inferior derecha en la cuadrícula MxN mientras se mueve solo hacia abajo o hacia la derecha. ¿Qué es la complejidad del tiempo y el espacio?

El problema : encuentre varias formas posibles desde la esquina superior izquierda hasta la esquina inferior derecha en la cuadrícula MxN mientras solo puede moverse hacia abajo o hacia la derecha.

Aquí hay dos algoritmos que he escrito. Los resultados se ven bien, pero no puedo descifrar la complejidad del tiempo y el espacio, tengo algunas conjeturas sobre cuáles podrían ser las complejidades, pero no puedo probarlas de una manera "adecuada".


Algoritmo ingenuo:

 function gridTravel(m, n) { if(m<1 || n<1) return 0; if (m === 1 || n === 1) return 1; return gridTravel(m-1, n) + gridTravel(m, n-1); }; console.log(gridTravel(10,10));

Mis conjeturas :

  • Complejidad espacial - O(n+m)? La pila de llamadas más larga posible parece escalar "linealmente", por lo que, suponiendo una aproximación, sería O (n + m), pero realmente no puedo probarlo o refutarlo.
  • La complejidad del tiempo es exponencial porque cada posición puede crear 2 nuevas posiciones: O (2 ^ n) u O (2 ^ n + m), no estoy seguro de cuál es más adecuado.
 m:n m-1:nm:n-1 m-2:n m-1:n-1 m-1:n-1 m:n-2

Pero nuevamente, no me siento seguro con esta explicación porque no es un árbol simétrico, simplemente lo parece al principio.


Algo ingenuo + memorización:

 seenGrids = {}; const gridTravel = (m, n) => { if(m<1 || n<1) return 0; if (m === 1 || n === 1) return 1; if (`${m}:${n}` in seenGrids || `${n}:${m}` in seenGrids) { return seenGrids[`${m}:${n}`] || seenGrids[`${n}:${m}`]; } seenGrids[`${m}:${n}`] = gridTravel(m-1, n) + gridTravel(m, n-1); return seenGrids[`${m}:${n}`]; };

Mis conjeturas:

  • Espacio - O(n*m)? La pila de llamadas todavía parece ser lineal, pero ahora tenemos este objeto en crecimiento que se ve en las seenGrids que, según mi intuición, ¿debería escalar de forma cuadrática? No tengo idea de cómo probarlo o refutarlo, cuando ejecuté console.log(Object.keys(seenGrids).length) para una cuadrícula de 200x200 , obtuve 19900 , que no es ni m*n ni m+n , por lo que es lineal. o cuadrático?
  • Tiempo - O(n*m)? - esto es lo más difícil para mí entenderlo. Ya no debería ser exponencial porque se omiten muchos subárboles gracias a las respuestas guardadas, pero no tengo idea de cómo derivar la complejidad del tiempo de una manera "adecuada".
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Primer algoritmo:

Para la complejidad del tiempo, ¡la prueba más fácil es tu método! Me refiero al árbol de cálculo de la función recursiva. Como puede ver, hay un árbol binario para la expansión y la longitud máxima del árbol es min(n,m) . Por lo tanto, la complejidad del tiempo está en O(2^(min(m,n))) .

Para la complejidad del espacio, como ha notado, el cálculo de la pila se realizará en profundidad. Por lo tanto, como la rama máxima de cada nodo es 2 y la longitud máxima del árbol es min(m,n) (como se discutió en el párrafo anterior), la complejidad del espacio será 2 min(m,n) .

Segundo algoritmo :

Como la máxima combinación diferente de entradas es m * n ([1, 2, ..., m] y [1, 2, ..., n] para la primera y la segunda entrada de la función, respectivamente), y el peor caso de la llamada de pila está en O(min(m, n)) , la complejidad del espacio está en O(m * n) , que es el tamaño de la matriz de memoria.

Para la complejidad del tiempo, podemos asegurar que cada elemento de la matriz se calculará una vez (como se memoriza). Por lo tanto, independientemente de la complejidad de las devoluciones de llamada recursivas, y debido a la computación de la recursividad primero en profundidad (de abajo hacia arriba), la complejidad de tiempo del segundo algoritmo está en O(m * n) .

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!