Algorithm 垃圾箱排序算法

Algorithm 垃圾箱排序算法,algorithm,Algorithm,我在工作中遇到了一个现实问题,我希望用python解决它,但我找不到正确的算法来解决它。 假设我有固定大小的垃圾桶,我需要扔掉一些特定大小的垃圾袋。每个袋子都必须有合适的尺寸。使用最少数量的垃圾桶,我可以使用什么算法来扔掉垃圾?这听起来可能是垃圾箱包装或背包问题。你应该知道这两个问题都是NP难的,所以这两个问题都没有多项式时间的最优解。然而,有许多启发式算法易于实现,可以保证接近最优的解决方案 最为人熟知的是“第一适合”和“最佳适合”。这两种算法都保证将物品打包到箱子中,以便使用的箱子数量不超过

我在工作中遇到了一个现实问题,我希望用python解决它,但我找不到正确的算法来解决它。
假设我有固定大小的垃圾桶,我需要扔掉一些特定大小的垃圾袋。每个袋子都必须有合适的尺寸。使用最少数量的垃圾桶,我可以使用什么算法来扔掉垃圾?

这听起来可能是垃圾箱包装或背包问题。你应该知道这两个问题都是NP难的,所以这两个问题都没有多项式时间的最优解。然而,有许多启发式算法易于实现,可以保证接近最优的解决方案

最为人熟知的是“第一适合”和“最佳适合”。这两种算法都保证将物品打包到箱子中,以便使用的箱子数量不超过最佳解决方案中使用的箱子数量的1.7倍。您可以阅读有关这些算法的更多信息

在python中使用first fit的一个非常简单的示例可能如下所示:

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

如果袋子有N种不同的尺寸,那么你至少需要N个垃圾桶。唯一的问题是,对于给定的尺寸,您是否需要多个罐。这看起来很简单,只要计算一下一个罐子能装多少个袋子就可以了。所以我看不出这里有什么挑战。也许你应该给这个问题添加一个例子。请使用像python这样的标记。我会提供更多信息。我有一些设备要测试。我的一些测试设备有3个usb端口和5个以太网端口,另一个测试设备有1个usb端口、8个以太网端口和一个串行端口。等等