Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

479
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda