【发布时间】:2019-06-10 10:23:36
【问题描述】:
在 SQL 中,我有一个事务类型列表和一个值。 下面是一个简单的例子。
|-----------|--------|
| Tran.Type | Value |
|-----------|--------|
| 04 | 10 |
|-----------|--------|
| 07 | 10 |
|-----------|--------|
| 04 | 5 |
|-----------|--------|
| 01 | 8 |
|-----------|--------|
|-----------------|
| Current Balance |
|-----------------|
| 13 |
|-----------------|
目标是将值相加并得到数字 13。 在这个例子中很容易发现类型 07 是负数。 所以10-10+5+8=13
但是当交易数量达到 20 和 10 种不同的类型时,这是相当困难的。 值也有正负。
到目前为止,我想出了这个。
import itertools
numbers = list(map(int, input("Enter multiple values: ").split()))
expectedSum = int(input("Enter expected value: "))
result = [seq for i in range(len(numbers), 0, -1) for seq in
itertools.combinations(numbers, i) if sum(seq) == expectedSum]
print (result)<code>
知道如何将类型合并到结果部分吗?如果那个类型是相反的值?
【问题讨论】:
-
这是一个有趣的问题。可以通过从 Q 中剥离 SQL 来简化它,这将缩小问题的范围。考虑从一个只包含事务类型和值的元组列表开始这个问题。
-
我很确定这个问题是 NP-hard - 看起来像背包问题:en.wikipedia.org/wiki/Knapsack_problem