查找按长度匹配的曲目

时间:2011-04-16 06:26:12

标签: python algorithm knapsack-problem

有人可以用选择的编程语言(最好是Python,但我认为任何事情都可以)来提出这个问题的解决方案:

我有各种曲目长度组,让我们说:

10:03
24:23
...

和源跟踪自己:

1:03
9:00
4:24
...

我需要务实地找到哪些曲目属于上面的长度组。如在示例中,前两个轨道属于第一组,因为它们的总长度等于组长度

提前致谢

编辑:这不是我的作业,因为时间早已过去(我已经超过30岁),但这是我遇到的问题,而且我不是程序员。我来看看itertools,谢谢

edit2:谢谢你的建议。我制作了Python脚本,如果对我来说工作得很好。它肯定没有优化,但这是骨架:

from itertools import combinations

tracks = [1,2,3,4,5,6,7,8,9]
group = 7

d_key, valid_tracks, possible_group =0, [], {}

for i in sorted(tracks):
    if i < group: valid_tracks.append(i)

for j in range(len(valid_tracks) - 2):
    for k in combinations(valid_tracks, len(valid_tracks) - 1 - j):
        if sum(k) <= group:
            if sum(k) == group:
                d_key += 1
                possible_group[d_key] = k

print possible_group

我很高兴我解决了这个问题,因为手工跟踪会比我的生命更多,哈哈哈

2 个答案:

答案 0 :(得分:0)

查看Python的itertools模块:

http://docs.python.org/library/itertools.html

它支持计算轨道的所有可能的排列()和组合()。

其余由你决定(不做你真正的功课)。

答案 1 :(得分:0)

这是一个棘手的一般NP-complete问题,称为Knapsack problem。您可以查看维基百科文章,了解其解决方案的常用方法,但在一般情况下不会那么简单或快速。您也可以在此处查看knapsack-problem标记。