喜んでお手伝いさせていただきます。
次の問題があります。
数値のリストseq
と目標数値が与えられ、次の 2 つのことを記述する必要があります。
True
サブシーケンスの合計がターゲット数と等しいか、そうでない場合に返される再帰的なソリューションFalse
。例:subset_sum([-1,1,5,4],0) # True subset_sum([-1,1,5,4],-3) # False
次に、前のソリューションで書いたものを使用してソリューションを作成する必要がありますが、キーがタプルである辞書を使用するメモ化を使用します。
(len(seq),target)
番号1については、これまでに得たものです:
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
私はそれが正しいかどうかわからないので、何らかの意見を得ることができれば感謝します.
番号 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]
メモ化して正解を出すことができないので、ここでいくつかのガイダンスをいただければ幸いです。
喜んで手伝ってくれてありがとう!