【发布时间】:2014-02-20 17:29:17
【问题描述】:
我有一个二维字母数组,每个字母都有一个分数。例如:
J-95 O-90 H-92 N-99
I-91 0-89 L-55
1-80
T-55
从上面的数组中,我想快速获得前 20 个左右排列(按分数)的列表。在上面的示例中,列表将是:
JOHN
IOHN
J0HN
I0HN
... etc
我目前正在递归函数中执行此操作——但它比我想要的要慢。有什么好的方法可以快速获得top N 列表吗?我的代码是 C++(如果有好的库建议的话)。
谢谢
编辑:
我结合使用 Sneftel 和 Ethan 的答案解决了这个问题。我使用剪枝函数根据权重减少可能的字符,然后从中计算排列。
【问题讨论】:
-
能否提供源代码?还有一种提高速度的好方法,不要使用递归,使用循环。
-
这看起来很有趣,但我不确定它是如何工作的,因为这些字母有特定的顺序。例如,#2 响应需要是 IOHN 而不是 JIHN,即使 JIHN 的得分高于 IOHN。
-
为什么不是#2
J0HN?还有为什么IOHN会出现两次? -
看起来你并不是真的想要排列。排列意味着您可以重新排序元素。你想要的是
"JI1T"、"O0"、"HL"和"N"的笛卡尔积的前 20 个最高得分元素。