リストの要素の並び順をすべて試すこととそれに付随した計算をしたいです。
a = [2,5,7,3,6] b = [1,3,6,8,4]
という配列があった時
まず、
この配列の要素aの並び順を全部出力させたいです。例えば、
[2,6,7,3,5]や[7,5,2,3,6]や[6,2,5,7,3,6]などです。
次に配列a・bの順番が対応しているとして
配列aで入れ替えた要素(例えばa[0]とa[1]を入れ替えるとき)番目の配列bの要素を足すということをしたいです(b[0]である1を算出する)。
例えば、a[1]とa[4]を配列aの最初に持ってくるとすると[5,6,2,7,3]という順番になりますが、そのときは2,7,3の位置が変わっているので1+6+8=15を算出させたいです。ちなみに、a[0]とa[1]を入れ替えるとき[5,2,7,3,6]になりますが、この時は1を算出させたく、元のa[1](=5)の位置も変わっているのですが、a[1]のインデックス数(=1)よりも前に要素を持ってくるときは加算しないとします。
再帰関数を使い、配列a・bの計算を同時に行えるようにfor文などでいっぺんに計算できるようにすればやりたいアルゴリズムの実装ができるとはおもうのですが、どのように書けばいいのでしょうか?
思いついた方法は
a = [2,5,7,3,6] b = [1,3,6,8,4] list_sum = [] for i in range(len(a)*len(a)): a[i] = a[i+1] list_sum.append(list_sum)
で、配列の要素の階乗回ループを回して配列に要素を追加すればいいと思うのですがこの先の方法が思い浮かばず。
ナップザック問題などを参考にしているのですが。
回答2件
あなたの回答
tips
プレビュー