es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué a veces necesitamos sacar explícitamente después de una recursión cuando hacemos retroceso?

Por ejemplo, consideremos una tarea en la que necesitamos encontrar todas las permutaciones de una cadena dada preservando la secuencia de caracteres pero cambiando la mayúscula y minúscula.

Aquí hay una solución de backtracking sin .pop():

def letterCasePermutation(S):
“””
:type S: str
:rtype: List[str]
“””
def backtrack(sub=””, i=0):
if len(sub) == len(S):
res.append(sub)
else:
if S[i].isalpha():
backtrack(sub + S[i].swapcase(), i + 1)
backtrack(sub + S[i], i + 1)

res = []
backtrack()
return res

Y aquí hay una solución con .pop():

def letterCasePermutation(s):
def backtrack(idx, path):
if idx == n:
res.append(“”.join(path))
return

    ele = s[idx]
    if ele.isnumeric():
        path.append(ele)
        backtrack(idx + 1, path)
        path.pop()
    else:
        path.append(ele.lower())
        backtrack(idx + 1, path)
        path.pop()
        path.append(ele.upper())
        backtrack(idx + 1, path)
        path.pop()

n = len(s)
res = []
backtrack(0, [])
return res

¿Ambos ejemplos de código son backtracking, o debería llamar al primer ejemplo DFS y al segundo backtracking?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Ambos ejemplos de código se pueden considerar backtracking, ya que ambos utilizan backtracking recursivo para explorar todas las posibles permutaciones de la cadena de entrada. Sin embargo, el segundo ejemplo con .pop() se puede considerar una implementación más tradicional de backtracking, ya que utiliza una pila para mantener el seguimiento del estado actual y deshacer elecciones anteriores antes de explorar otras opciones. Mientras tanto, el primer ejemplo se puede ver como una variante de la búsqueda en profundidad, ya que explora recursivamente todas las rutas posibles para encontrar las soluciones.

Comments are closed.