2016-03-31 9 views
-2

私は仕事で実際の世界の問題を抱えていますが、私はそれをPythonで解決することを望んでいましたが、解決する正しいアルゴリズムを見つけることができません。 私は固定サイズの穴が付いたゴミ箱を持っており、特定のサイズのゴミ袋をいくつか捨てる必要があると言います。各バッグは、具体的に正しいサイズでなければなりません。ゴミ箱の最小数を使用してゴミを捨てるためにどのようなアルゴリズムを使用できますか?ゴミ箱のソートアルゴリズム

+0

バッグは、N個の異なるサイズ入って来た場合は、あなたは、少なくともN個のゴミ箱を必要としています。唯一の問題は、指定されたサイズに対して複数の缶が必要かどうかです。それは些細なことですが、缶に収まる袋の数を計算するだけです。だから私はここに挑戦を見ない。おそらくあなたは質問に例を追加するべきです。 – user3386109

+0

これに 'python'のように' tag'を使用してください。 –

答えて

0

これはビンのパッキングやナップザックの問題のようです。どちらもNP困難であるため、どちらの問題に対しても多項式時間の最適解は存在しません。しかし、「近い」最適解を保証することができる実装が容易なヒューリスティックアルゴリズムが多数存在する。

最もよく知られているのは、First Fit an Best Fitです。これらのアルゴリズムはどちらも、使用されるビンの数が最適解で使用されるビンの数の1.7倍を超えないようにビンにアイテムをパックすることが保証されています。これらのアルゴリズムの詳細については、hereを参照してください。

次のようになります。Pythonで最初のフィットを使用して、非常に単純な例:

import random 

bin_capacity = 1.0 
bins = [[]] 
bin_stats = [0.0] # used to keep track of how full each bin is 
jobs = [random.uniform(0.0,1.0) for i in range(100)] 
for job in jobs: # iterate through jobs 
    job_assigned = False 
    for i in range(len(bin_stats)): 
     if job + bin_stats[i] <= bin_capacity: 
      # if job will fit into bin, assign it there 
      bins[i].append(job) 
      bin_stats[i] += job 
      job_assigned = True 
      break 
    if not job_assigned: 
     # if job doesn't fit into any bin, open a new bin 
     bins.append([job]) 
     bin_stats.append(job) 

for i in range(len(bins)): 
    print "Bin {:} is {:.2f}% full and contains the following jobs".format(i,bin_stats[i]*100) 
    for job in bins[i]: 
     print "\t",job 
+0

もう少し詳しく教えてください。私はテストするためのいくつかの機器があります。私のテスト機器の中には、3つのUSBポートと5つのイーサネットポート、そして1つのUSBポートと8つのイーサネットとシリアルポートを持つテスト機器があります。等々... – omryjs

関連する問題