算法 – 从哪里开始:N个字母组的单词数量最多?

我很难想出一个非暴力的方法来解决这个问题我一直在想:可以用什么样的N个字母组成来自给定字典的最多单词?信件可以使用任意次.

例如,对于N = 3,我们可以让EST给出像TEST和SEE等词……

在线搜索,我找到了一些答案(如上面列出的EST),但没有说明方法.

我的问题是:哪些众所周知的问题与此类似,或者我应该用什么原则来解决这个问题?

注意:我知道如果EST对N = 3最好,那么ESTx最好是N = 4.也就是说,您不能只是在前一个解决方案中附加一封信.

万一你想知道,这个问题浮现在脑海中,因为我想知道4种成分可以制作最多的鸡尾酒,我开始寻找它.然后我意识到我的问题是具体的,所以我认为这封信问题是同一类型的问题,并开始搜索它.

最佳答案 对于字典中的每个单词,对其进行排序并删除重复项.让它成为这个词的骨架.对于每个骨架,计算包含它的单词数.让它成为它的频率.忽略大小高于N的所有骨架.

令子骨架是来自骨架的任何可能的1个或更多个字母的删除,即EST具有E,S,T,ES,ET,ST的子骨架.对于大小为N的每个骨架,添加此骨架及其所有子骨架的计数.选择具有最大总和的骨架.

您需要O(2 ** N * D)次操作,其中D是字典的大小.

更正:我们需要考虑所有大小为N(不仅是单词)的骨架,并且操作的numbet将是O(2 ** N * C(L,N)),其中L是数字信件(英文26).

点赞