【发布时间】:2017-01-01 17:47:06
【问题描述】:
我目前正在使用这个功能,代码完全可以正常工作。self.chars.permutation.map(&:join).uniq.group_by(&:chr)
但是,一旦字符串超过 10 个字符,生成所有排列需要很长时间。我怎样才能更快地生成排列?
【问题讨论】:
-
我认为你不能。字符串越长排列越多。更多的排列需要更多的时间和内存来生成。为什么需要生成这种排列?这可能是解决您的问题的更有效方法。
-
我正在生成排列以检查字典中是否有任何字符串的字谜
-
我认为你需要一个不同的算法
-
字典有多大?缓存一组字母按字母顺序排序的字典单词可能更具成本效益。如果这样做,您可以非常快速地检查已排序的字符串与集合。
-
@mike:你犯了和 OP 一样的错误,你大大低估了 n 的速度!成长。即使您可以为每个 CPU 周期生成一个排列,并且您有 100 个内核,并且这些内核以 5GHz 运行,仍然需要一百万年才能生成 25 个字符的字符串的排列。并行化不是答案,而是一种不同的算法。或者,换一种说法:你从字面上回答了 OP 的问题(“我如何加速生成排列”),这没关系,但真的没有意义:无论你加快多少速度,n!会长大的。
标签: ruby math permutation