Sarò felice di ricevere aiuto.Somma sottoinsieme ricorsiva in Python
Ho il seguente problema:
sto dato un elenco di numeri seq
e di un numero di destinazione e ho bisogno di scrivere 2 cose:
Una soluzione ricorsiva che ritorna
True
se ci è una somma di una sottosequenza uguale al numero di destinazione eFalse
in caso contrario. esempio:subset_sum([-1,1,5,4],0) # True subset_sum([-1,1,5,4],-3) # False
In secondo luogo, ho bisogno di scrivere una soluzione che utilizza quello che ho scritto nel precedente soluzione ma ora con Memoizzazione che utilizza un dizionario in cui le chiavi sono tuple:
(len(seq),target)
per il numero 1 questo è quello che ho avuto modo finora:
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
Non sono sicuro che ho capito bene, quindi se potessi ricevere un contributo, te ne sarei grato.
Per il numero 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]
non riesco a ottenere il Memoizzazione di darmi la risposta corretta in modo da sarei contento per alcune indicazioni qui.
Grazie per chiunque sia disposto ad aiutare!
Qual è il motivo che non stai usando solo [ '@ memoize'] (http://wiki.python.org/moin/PythonDecoratorLibrary# Memoize)? –
Probabilmente perché è compito di casa;) –
Si prega di taggare come compiti a casa se questo è in realtà i compiti. Le persone aiuteranno ancora. È una buona forma e può aiutare le persone a capire da dove vieni. – istruble