早上好,
想象一下许多袋子的清单(100)。每个袋子可以是颜色=红色/黄色/绿色,大小=小/大,重=是/否,羊毛=是/否。
我想选择符合以下条件的P=10包号:
下面是一个具体的例子(简化为2个属性):
我对算法解释和可能的实现感兴趣(节点、java、python、vba、.)
谢谢
发布于 2019-07-13 14:23:07
布鲁特力:
我只是在想,如何在所有可能的组合中寻找合适的组合。
有24种不同的袋子,所以有24 ^ 10种可能的组合。这些可以像数字一样生成到根24,只需增加这些数字。每个数字都可以根据您的标准进行检查。如果一个组合的检查需要1微秒,则需要大约17612小时来检查所有组合。只使用一个线程,在大约2年内,您可能会找到符合您的标准的所有可能的组合。
回溯:
如果您停留在第一个组合的10个袋子的工作,您实现了一个回溯算法。这可能会持续多久,我现在无法计算。
更好的布鲁特力量:
看看下面的例子,你会发现,并不是所有的基数24都是有趣的。这个问题可以通过查看0到23之间的10个数字元素的所有组合来解决,这些元素可能重复并检查这些元素。有92561040种可能的组合。这些检查可能会持续大约92秒。之后,您将有所有可能的组合来解决您的问题,如果您停止在第一个组合,您可能会更快。
示例
要理解这10个数字,请参见下面的袋子映射。
0000000000 10红色,10小,10重,10羊毛
0000000001 9红色,1黄色,10小,10重,10羊毛
0000000002 9红色,1绿色,10小,10重,10羊毛
..。
00000000A9红,1黄色,9小,1大,9重,1小,10毛
00000000B9红色,1绿色,9小,1大,9重,1小,10羊毛
..。
正如您所看到的,对于结果来说,只需要相同数字的名称,而不是位置。因此,有趣的组合数并不是基数24有10个位置的所有数字,而是所有在0到23之间的10个数字的组合,这些组合可以重复:(24 +10-1)!/((24-1)!10!)= 92561040个组合,如果每次检查需要1微秒,可以在92秒内检查。
制图:
https://stackoverflow.com/questions/57019545
复制相似问题