代码之家  ›  专栏  ›  技术社区  ›  Imbue

高效的单词加扰算法

  •  15
  • Imbue  · 技术社区  · 17 年前

    我正在寻找一种有效的算法,将一组字母打乱为包含最多单词的排列。

    一个简单的算法是尝试对每个置换进行评分。我相信这是O(n!),所以只对上面的6个字母尝试720种不同的排列(包括一些重复,因为这个例子有两次e)。当然,对于更多的信件,天真的解决方案很快就变得不可能了。

    该算法不必实际产生最佳解决方案,但它应该在合理的时间内找到一个好的解决方案。对于我的应用程序,只需猜测( Monte Carlo )几百万个排列的效果相当差,所以这是目前需要击败的目标。

    Aho-Corasick 对排列进行评分的算法。它只需在一次文本浏览中搜索字典中的每个单词,所以我认为它非常有效。这也意味着我将所有单词存储在 trie Bloom Filter .

    path finding algorithm

    5 回复  |  直到 8 年前
        1
  •  3
  •   Nathan Kitchen    17 年前

    这里有一个想法,灵感来自 Markov Chains :

    1. 根据前一个字母和概率表,从剩余的字母池中随机选择下一个字母,直到所有字母都用完,从而生成排列。跑很多次。
        2
  •  3
  •   Yevgeny Doctor    17 年前

    simulated annealing ,已成功用于多个领域的复杂优化问题。基本上,你做随机爬坡,同时逐渐减少随机性。既然你已经有了Aho-Corasick的得分,那么你已经完成了大部分的工作。你所需要的只是一种生成邻居排列的方法;为此,交换一对字母这样简单的事情应该很有效。

        3
  •  2
  •   Rodyland    17 年前

    只是一些无聊的想法。

        4
  •  0
  •   Wouter van Nifterick Andrey    17 年前

    http://sourceforge.net/search/?type_of_search=soft&words=anagram

    在此页面上,您可以在线生成字谜。我已经玩了一段时间了,它很有趣。它没有详细解释它是如何工作的,但参数提供了一些见解。 http://wordsmith.org/anagram/advanced.html