【问题标题】:What's an algorithm to print the permutations of a string with much efficiency? [closed]什么是高效打印字符串排列的算法? [关闭]
【发布时间】:2015-07-03 14:29:23
【问题描述】:

我知道的算法如下,但我讨厌这种方法的原因是它的时间复杂度是 O((n+1)!) 在大字符串的情况下太糟糕了

首先对字符串进行排序并将其打印为第一个排列。
现在,我们可以找到下一个排列如下:

设 i 为满足 input[i]

还有比上述更好的方法吗?(如果通过代码进行解释,请考虑 c 或 c++)...只是我期待一种更好的算法,其时间复杂度低于上述方法

【问题讨论】:

标签: c++ c algorithm


【解决方案1】:

长度为n 的字符串有n! 排列。简单地打印它们是O(n * n!),你怎么能指望它会更有效率?

【讨论】:

  • 除非有重复的字母,否则少于n!排列。
  • 是的,我知道,但我有一些希望,也许有机会变得更好。
  • 实际上是 O(n*n!),因为每次打印本身就是 O(n)
  • @amit,感谢您的指正。
【解决方案2】:

即使是打印字符串排列的标准 C++ 实现也遵循完全相同的算法(std::next_permutationstd::prev_permutation

std::string s;
std::sort(s.begin(), s.end());
do {
    std::cout << s << std::endl;
} while(std::next_permutation(s.begin(), s.end()));

【讨论】:

    【解决方案3】:

    请记住,在 C++ 中,STL 有 std::next_permutation 可以完成您需要的工作

    【讨论】:

      猜你喜欢
      • 2011-10-21
      • 2013-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-23
      • 2014-02-21
      相关资源
      最近更新 更多