生成字谜的最有效(就时间而言)算法是啥?

Posted

技术标签:

【中文标题】生成字谜的最有效(就时间而言)算法是啥?【英文标题】:What could be the most efficient(in terms of time) algorithm to generate anagrams?生成字谜的最有效(就时间而言)算法是什么? 【发布时间】:2017-10-28 06:52:00 【问题描述】:

以下是我想出的用于查找给定字符串的字谜的代码,但是当字符串非常大时,我发现这真的很慢。我可以做些什么来加快速度吗?是否有另一种算法可以使这种操作快速进行?

def combinate(stri, comb,n,li):
    if stri == "":
        if comb not in li:
            li.append(comb)
        return
    for sdx, s in enumerate(stri):
        combinate(stri[0:sdx] + stri[sdx + 1:], comb+s,n)

【问题讨论】:

您用四个参数定义combinate,但用三个参数调用它。而且您永远不会使用其中一个论点 (n)。所以我不明白你怎么能测试它。另外,大概第二个参数是一个字符串;那你为什么觉得有必要copy.deepcopy呢? if X==False:return 到底有什么意义? (为什么不if X: return?)。但这些都是小细节。主要问题是唯一性检查的二次时间复杂度。 @rici 关键是要中断递归。为了避免混淆,我没有提到它。这个算法有效,我只是在寻找一种跑得更快的方法。 1.简单的答案:使用集合而不是列表进行唯一性检查。 2. 更好的答案:使用不会产生重复的算法。另外:我相信算法有效,但代码无效。 【参考方案1】:

对字符串和可能的字谜中的字符进行排序并比较排序后的版本。

"task": "akst"
"skat": "akst"

请注意,键“akst”上的字典条目可能包含字谜列表作为值

【讨论】:

【参考方案2】:

如果您正在寻找“最有效”的时间复杂度,请获取每个术语并将其字符排序,然后将它们存储在(多值)映射中。给定一个您想为其查找字谜的单词,同样对其字符进行排序,并在地图中查找相应的条目。尽管预计算在总项数中是线性的,但每次查找的时间为 O(1)。

我认为可以肯定地说这是可能的最佳时间复杂度,但您可能希望以不同的方式处理多单词字谜 - 对于多个单词的组合执行此操作可能是不切实际的(预计算将非常大),因此您可能希望一次构建一个字谜。

【讨论】:

以上是关于生成字谜的最有效(就时间而言)算法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中查找数字的所有因数的最有效方法是啥?

字谜算法返回重复值

字谜字符串编辑距离算法/代码?

字谜算法问题的替代解决方案

通过 JavaScript 对 HTML 表格进行排序的最有效方法是啥?

查找数字 n 是不是包含特定数字 k 的最有效方法是啥?