全排列的时间复杂度

您所在的位置:网站首页 排序最低时间复杂度 全排列的时间复杂度

全排列的时间复杂度

2024-07-11 05:09| 来源: 网络整理| 查看: 265

我们在高中的时候都学过排列组合。“如何把 n 个数据的所有排列都找出来”,这就是全排列的问题。我来举个例子。比如,1,2,3 这样 3 个数据,有下面这几种不同的排列:

1, 2, 3 1, 3, 2 2, 1, 3 2, 3, 1 3, 1, 2 3, 2, 1

如何编程打印一组数据的所有排列呢?这里就可以用递归来实现。如果我们确定了最后一位数据,那就变成了求解剩下 n−1 个数据的排列问题。而最后一位数据可以是 n 个数据中的任意一个,因此它的取值就有 n 种情况。所以,“n 个数据的排列”问题,就可以分解成 n 个“n−1 个数据的排列”的子问题。

假设数组中存储的是1,2, 3...n。 f(1,2,...n) = {最后一位是1, f(n-1)} + {最后一位是2, f(n-1)} +...+{最后一位是n, f(n-1)}。

如果我们把它写成递推公式,就是下面这个样子:

// 调用方式: // int[]a = a={1, 2, 3, 4}; printPermutations(a, 4, 4); // k表示要处理的子数组的数据个数 public void printPermutations(int[] data, int n, int k) { if (k == 1) { for (int i = 0; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3