你会怎么写一个程序来找到一个单词列表中最短的pangram?

jon*_*sdf 6 algorithm pangram

给出一个包含字母az至少一次的单词列表,你会如何编写一个程序来找到由字符数(不计算空格)计算的最短的pangram作为单词的组合?

由于我不确定是否存在简短的答案,这不是代码高尔夫,而只是讨论如何处理这个问题.但是,如果你认为你可以设法写一个可以做到这一点的短程序,那么继续吧,这可能会变成代码高尔夫:)

P S*_*ved 7

我会通过证明问题是NP难的,并通过检查启发式查看类似的NP难题来解决这个问题.

我们可以减少Set Cover问题.Set Cover的不同之处在于没有使用多少字母,但是使用的字数最小化.假设我们要解决集合覆盖问题,给出N个字,每个长度小于M的让我们通过克隆给定的建立另一套的话,但串接他们每个人N*M个非英文字母,也就是说,Ж.的 如果我们可以构建一个需要最小符号的pangram(在a,b,c ... x,y,z,ж字母表上),那么如果我们删除所有Ж字母,那将是一个具有最少单词的pangram.

这证明,原来的问题是NP难的,但不幸的是,我们需要减少一些NP难问题重用它(希望已经知道)启发式.设置封面与对数近似贪心试探法,但我不认为它适用于原问题(设置覆盖问题的性质,需要服用富含信,长的话,它不是解决我们问题的办法).

所以我会搜索相关的NP难题列表,并检查是否有兴趣.这就是我接近这个的方法.

  • 现实约束将是100-200万字,即英文字典的大小.顺便说一下,你可以试试下面的启发式:迭代选择具有最高比率的单词`(唯一字母的数量仍然不会在pangram中持续存在)/(单词的长度)`. (2认同)