生成所有排列复杂性分析

时间:2018-09-15 13:03:36

标签: algorithm

首先,我看到在堆栈溢出时有与此类似的问题,但是我无法真正理解/遵循这些问题的复杂性分析。

我正在发布有关如何处理时间复杂度的问题的思考过程,该问题是如何从整数列表生成所有可能的排列的问题。

基本上,假设我要从整数列表中生成所有可能的排列。我有一个类似下面的递归解决方案,这是解决我认为的这个问题的通用方法。

public void subPermute( List<List<Integer>> permutationLists, int start, int[] nums ) {
    //base
    if ( start == nums.length ) {
        final List<Integer> permutation = new ArrayList<Integer>();
        for ( int num: nums ) {
            permutation.add( num );
        }
        permutationLists.add( permutation );
    }

    for ( int i = start ; i < nums.length ; i ++ ) {
        swap( nums, start, i );
        subPermute( permutationLists, start + 1, nums );
        swap( nums, start, i );
    }
}

对于上述一般方法的时间复杂性,我听到了各种各样的答案。我相信以上的递归公式应该是T(n) = nT(n-1) + O(n),其中O(n)来自for循环中的交换。

我试图通过绘制一个递归树来解决这个问题,其中将有n!个叶节点,每个叶节点都有n个操作。我认为树的深度为n

你们同意递归方程吗?如果您同意,递归方程的时间复杂度是多少?我不确定如何进一步进行递归树分析,或者根本不正确。

我们将不胜感激!谢谢!

0 个答案:

没有答案