私はボックスに収まるアイテムの数に制約があり、移動する前にできるだけ多くのアイテムをボックスに収めなければならない欲張りアルゴリズムを作成しようとしています(すなわち、各箱の重量を最大化する)。Python。貪欲アルゴリズム、2つのループのリストを繰り返します。
私はこれを2つの同一のリストを作成することで解決しようとしています。a_list
とb_list
としましょう。
ここでは、各ボックスの制約は10です。たとえば、次のボックスに移動する前に、最初のアイテム(9)のみを1つに収めることができます。以下のボックスには、8 + 2
各ボックスには、現在の1がそれに嵌め込まさらにアイテムを持つことはできません一度私は、次のボックスに進むことができ
list_ = [[9], [8,2],[6,4].....]
すなわちメインリスト内のリストで含まれている必要があります。
私は2つのリストを反復しようとしていますが、アイテムを削除する方法がわからないので、複数回表示されないようにlist_
にしてください。
私は近づいていますが、私は2つのアイテムが2回出てきますが、1つはまったく出てこないのです。
私のリストを降順でソートしても、すべてのボックスが最適ではない場合もありますが、そのうちの1つに値 '2'のアイテムが1つしかありません。私はそれがループと関係があると知っていますが、なぜそれが降順で項目を通過していないのか分かりません。
limit = 10
list_ = [[]]
for i in a_list:
for j in b_list:
if sum(l[-1]) + i + j <= limit:
l[-1].append(i)
l[-1].append(j)
b_list.remove(j)
elif sum(l[-1]) + j <= limit:
l[-1].append(j)
b_list.remove(j)
else:
l.append([])
重要な問題は、項目を削除しながらリストを繰り返していることです。常にそれを避けてください。 –
ご理解ください、ありがとうございます。私は内側のループからだけ項目を削除していますが、外側は削除していません。それはまだ問題ですか? – Monika
いくつのボックスがありますか? – Ukimiku