如何解决如何为一个看似很大的问题找到最佳答案?
| 首先,这不是作业问题。自1988年以来,我不必做作业! 我有一个长度为N的单词列表 我最多可以选择13个字符。 同一字母可以有多个 给定单词列表,其中13个字符将拼写出尽可能多的单词。我可以抛出一些使问题难以解决的词,例如:speedometer has 4 e\'s in it,something MOST words don\'t have,so I Could toss that word due to a poor fit characteristic,or it might just
go away based on the algorithm
我已经看过@字母分布,已经建立了单词的图表(一个字母一个字母)。我缺少某些东西,或者这个问题比我想的要难得多。如果可能的话,我宁愿不完全强行使用它,但现在我要解决这一问题。
我想到了遗传算法,但是我以前从未尝试过它们。
似乎我需要一种方法来根据每个字母与所在单词中其他字母的关联来对每个字母评分。...
解决方法
我能想到的最好的方法是分支定界。制作包含以下内容的“中间状态”数据结构:
您已经使用过的字母(有多个字母)
您仍然可以使用的字符数
信件仍然可用
单词仍在您的列表中
列表中仍存在的单词数(前一组的数量)
在这种状态下不可能的单词数
您选择的字母已经涵盖的单词数
您将从
空集
13
{A,B,...,Z}
您的整个清单
ñ
0
0
将该数据结构放入队列。
在每一步
Pop an item from the queue
Split into possible next states (branch)
Bound & delete extraneous possibilities
从一个状态,我将生成可能的下一个状态,如下所示:
For each letter L in the set of letters left
Generate a new state where:
you\'ve added L to the list of chosen letters
the least letter is L
so you remove anything less than L from the allowed letters
因此,例如,如果您剩余的集为{W,X,Y,Z},我将生成一个状态,其中W添加到我的选择中,{W,X,Y,Z}仍然可能,其中一个为X是我的选择,{X,Y,Z}仍然可以(但不是W),一个可以选择Y,{Y,Z}仍然可以,而另一个可以选择Z和{Z}。
进行各种会计处理以找出新状态。
每个州至少具有\“您选择的字母已经覆盖的单词数\”单词,并且最多具有该数量加上\“仍在列表中的单词数\”。在所有状态中,找到最高的最小值,并删除最大值大于该值的状态。
无需对速度计进行特殊处理。
我无法想象这会很快,但是会奏效。
可能有一些优化(例如,将列表中的每个单词存储为A-Z数组,出现次数为A-Z,并组合具有相同结构的单词:2个AB ..... T => BAT和TAB出现)。您如何排序并跟踪最小值和最大值也可能会有所帮助。可能不足以产生渐近差异,但可能是因为问题如此之大,足以使其在合理的时间而不是极端的时间运行。
,听起来像是一个困难的组合问题。将为您提供单词D的字典,您可以选择N个字母(可能带有重复字母)来覆盖/生成D中尽可能多的单词。我有99.9%的把握是可以通过减少SETCOVER将其显示为一个NP完全优化问题(假设可能是字母,即包含超过26个项目的一组字母),但是我要离开实际减少作为练习给读者:)
假设这很困难,您通常会采用以下路线:
分支定界
随机搜索
近似算法
,尽管实施会变得很混乱,但完全采用蛮力手段应该行得通。
您不能只考虑字符是否出现在单词中(而不考虑它出现的次数,因为它不应该影响最终的最佳成绩),而是只考虑单词是否出现来生成关联图,而不是扔掉速度计之类的单词。选择13个字符)。而且这也将使其比总蛮力简单一些。
欢迎发表评论。 :)
,除去每个参数的边界(包括字母大小),就可以很容易地从保留目标的角度减少最大覆盖范围的问题,即NP难且难以以大于(e-1)/ e≈0.632的比率进行近似。它的固定参数可以通过蛮力在字母大小中易于处理。
我同意尼克·约翰逊的强力建议。最坏的情况是,只有(13 + 26-1)个选择(26-1)个多集,大约只有50亿个。如果将每个字母的重复数限制在可能有用的范围内,则此数字会小很多。即使速度太慢,您也应该可以回收数据结构。
,我不完全理解这句话:“我最多可以选择13个字符。”如果您有1000个单词的列表,那么您是否意味着必须将其减少到13个字符?!
基于我的(误)理解的一些想法:
如果仅处理英语单词,则可以跳过元音,因为辅音具有描述性。我们的大脑可以填充元音-也就是SMS / Twitter语言:)
也许对于1-3个字母的单词,剥离元音会丢失太多信息。但仍然:
spdmtr hs 4 \ n t,smthng
MST Wrds dnv's cld
tss wrd d t pr ft
chrctrstc,r t mght jst g
wy bsd n th grthm
词干将使单词切得更短。先进行词根处理,然后剥离元音。然后做一个直方图。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。