0

私は数ヶ月前にプロジェクトオイラーの問題67を非常に非効率的なアルゴリズムで解決しました。今日、私はこれがどのように改善されたのかを理解し、より効率的なアルゴリズムを作成しようとしているときに、いくつかの問題に遭遇しました。

コードは次のとおりです。

r_prev = [59,0,0]
r_load = [73,41,0]
r = [0,0,0]
zero_r = [0,0,0]
rows = 3
while rows != 0:
    position = 0
    for x in r_load:
        try:
            if r_prev[position] > r_prev[position-1]:
                r[position] = r_prev[position] + r_load[position]
            else:
                r[position] = r_prev[position-1] + r_load[position]
        except IndexError:
            r[position] = r_prev[position] + r_load[position]
        position += 1
    print r
    rows -= 1
    r_load = input("Enter next row")
    r_prev = r
    r_prev.append(0)
    zero_r.append(0)
    r = zero_r

ポイントに到達するための最高のパスの合計のみを保持することによって機能します。この時点で(コンソールを介して)手動で入力をフィードしています。最初の行にフィードすると期待どおりに実行されますが、2番目の行にフィードすると、とを同じものと見なし、で実行されるすべての操作もでr_prev実行されます。rr_prevr

この問題を解決するにはどうすればよいですか?

4

1 に答える 1

4

あなたがそうするとき、あなたはr_prev = rリストをコピーしていません。同じリストに追加の名前を付けています。コピーを作成するには、を実行しますr_prev = list(r)

于 2012-08-20T02:02:51.230 に答える