Оптимальное решение может быть найдено с использованием модели 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 легко доступны.