我有一个单词列表,我必须从中选择n个单词,以使其中不同/唯一字母的数量保持最少。我感觉已经有了一个众所周知的算法,但是我找不到它。能否指出可用于解决此问题的算法?
说我有单词HELL,HELP和FAIL的列表,我必须从中选择2个单词。
如果我选择“地狱”和“帮助”,则其中的唯一字母数= 4
如果我选择HELL和FAIL,则其中唯一字母的数量= 6
如果我选择“帮助”和“失败”,则其中唯一字母的数量= 7
该算法应选择HELL和HELP。
对于我的用例,我希望有大约15个单词的列表,从中必须选择大约9个单词。
答案 0 :(得分:0)
使用MIP(混合整数编程)模型(或类似类型的模型)可以找到最佳解决方案。
让我是字母集合,w是单词集合。此外,定义二进制变量:
x(w) = 1 if word w is selected
0 otherwise
y(i) = 1 if letter i is selected
0 otherwise
然后我们可以写:
min sum(i, y(i))
subject to
sum(w,x(w)) = K
y(i) >= x(w) for letters i in word w
y,z in {0,1}
当我解决此问题时,会看到以下内容。
数据的组织方式为:
---- 8 SET i letters
A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T
U, V, W, X, Y, Z
---- 8 SET w words
HELL, HELP, FAIL
---- 8 SET map
A E F H I L P
HELL YES YES YES
HELP YES YES YES YES
FAIL YES YES YES YES
---- 8 PARAMETER k = 2.000 number of words to select
解决方案如下:
---- 29 VARIABLE x.L select word
HELL 1.000, HELP 1.000
---- 29 VARIABLE y.L selected letters
E 1.000, H 1.000, L 1.000, P 1.000
---- 29 VARIABLE z.L = 4.000 objective
MIP求解器随时可用。