Estaré encantado de obtener ayuda.Subconjunto suma recursivamente en Python
Tengo el siguiente problema:
estoy dado una lista de números de seq
y un número de destino y necesito escribir 2 cosas:
Una solución recursiva que devuelve
True
si hay es una suma de una subsecuencia que es igual al número objetivo yFalse
en caso contrario. ejemplo:subset_sum([-1,1,5,4],0) # True subset_sum([-1,1,5,4],-3) # False
En segundo lugar, tengo que escribir una solución con lo que escribí en la solución anterior pero ahora con memoization que utiliza un diccionario en el que las claves son tuplas:
(len(seq),target)
para el número 1 esto es lo que tengo que hasta el momento:
def subset_sum(seq, target):
if target == 0:
return True
if seq[0] == target:
return True
if len(seq) > 1:
return subset_sum(seq[1:],target-seq[0]) or subset_sum(seq[1:],target)
return False
No estoy seguro lo hice bien, así que si pudiera obtener algo, lo agradeceré.
Para el número 2:
def subset_sum_mem(seq, target, mem=None):
if not mem:
mem = {}
key=(len(seq),target)
if key not in mem:
if target == 0 or seq[0]==target:
mem[key] = True
if len(seq)>1:
mem[key] = subset_sum_mem(seq[1:],target-seq[0],mem) or subset_sum_mem(seq[1:],target,mem)
mem[key] = False
return mem[key]
no puedo conseguir el memoization darme la respuesta correcta por lo que me alegraría por alguna orientación aquí.
¡Gracias a todos los que quieran ayudar!
algún motivo que no sólo está utilizando [ '@ memoize'] (http://wiki.python.org/moin/PythonDecoratorLibrary# Memoize)? –
Probablemente porque es tarea;) –
Por favor marque como tarea si esto es de hecho tarea. La gente todavía ayudará. Es una buena forma y puede ayudar a las personas a entender de dónde vienes. – istruble