我有一张这样的桌子:
v | c
---+-------
Z | 217
J | 620
U | 1891
F | 3751
A | 5673
Y | 5859
O | 7347
K | 9827
I | 11842
R | 11997
H | 14818
M | 18321
G | 18445
E | 19220
D | 22444
W | 22692
T | 24428
P | 26257
N | 35247
L | 41416
C | 42594
B | 43586
S | 59613
我如何以一种方式对这些值进行分组,使每个组都具有最接近 60000 的可能值?
例如(可能不是最合适的):
Z + J + U + F + A + Y + O + K + I + R -- 59024
S -- 59613
B + H -- 58404
etc.
一些研究表明,这个问题在计算机科学中被称为子集和问题。
在 stackoverflow 上,Lukas Eder 提供了一个类似问题的Oracle 解决方案,并在 jooq 的博客上进行了更长的分析。
这是源自他的作品的 postgres 版本:
示例数据的结果是:
请注意,执行时间将随着基表中的行数呈指数增长。