当前位置: 首页 > 知识库问答 >
问题:

n位二进制置换表示的时间复杂度

缑兴贤
2023-03-14

我已经在java中返回了下面的代码,以产生n个数字的可能的二进制表示。

public List<String> binaryRepresenation(int n){
    List<String> list = new ArrayList<>();
    if(n>0){
        permuation(n, list, "");
    }
    return list;
}

private void permuation(int n, List<String> list, String str){
    if(n==0){
        list.add(str);
    }else{
        permuation(n-1, list, str+"0");
        permuation(n-1, list, str+"1");
    }
}

对于n=3,它产生001 001 010 011 100 101 110 111组合。总体而言,该函数产生2^N种可能的表示形式。

可以说时间复杂度是n*2^n吗

共有1个答案

严阳成
2023-03-14

你的分析有个小问题。正如您所注意到的,对于每个基本情况,您必须调用函数n次。但是,其中一些电话被其他基本案件分享。换句话说,您正在多次计算同一个呼叫。

这意味着,虽然复杂性肯定不能大于n*2^n,但实际上可能更低。

要计算复杂度的更好界限,可以计算对permutation函数的实际调用次数。一种方法是考虑str变量的可能值。

str将是长度小于或等于n的二进制字符串。此外,每次调用permutation函数都会收到str的唯一值。这意味着函数被调用的次数等于长度<=n的二进制字符串的数目。

这样的弦有多少根?1+2+4+...+2^n=2^(n+1)-1

因此,调用置换的次数为O(2^n)。但是每个调用都包含操作str+“0”str+“1”。这些操作需要O(n)时间。因此,该操作的净时间复杂度为:O(n*2^n),但原因与您最初的想法有些不同。

 类似资料:
  • 我在c编程方面是个新手,我正试图弄清楚更多关于位的知识,二进制E.c.T 例如,我有三个二进制int变量m1=255或11111111;m2=255或11111111(二进制),m3=255或11111111(二进制),m4=0或00000000(二进制)。我试图把所有的主题放在一起到单一的int变量temp。类似于(11111111 11111111 1111111100000000)这里是我的

  • 在Google上的几个帖子(例如,https://cs . stack exchange . com/questions/125995/median-of-medians-proof-for-time-complexity)和文章中,我看到了为中位数写的以下时间复杂度递归: <代码> T(n) 但是我很困惑,因为这种递归似乎认为MoM嵌入到快速选择中,因此是快速选择的递归公式,用于在使用MoM查找

  • 我需要以下递归关系的帮助。 T(1)=1 T(n)=T(n-1)*n 这就是我尝试过的。我想我可能把替换部分搞砸了,但请再看一次,让我知道我得到的时间复杂度是否正确。 现在我不确定我所做的是否完全正确,但如果有任何帮助,我将不胜感激。

  • 我一直在尝试Codility.com的编码挑战,这是我尝试的问题之一: 给出一个由 N 个整数组成的非空零索引数组 A。一对整数 (P, Q),使得 0 ≤ P 例如,数组A如下: 包含以下示例切片: 切片 (1, 2),其平均值为 (2 2) / 2 = 2;切片 (3, 4),其平均值为 (5 1) / 2 = 3;切片 (1, 4),其平均值为 (2 2 5 1) / 4 = 2.5。目标是

  • 一个插件是一个简单的实现了插件接口的类.Gradle提供的核心插件作为其分布的一部分,因此,你需要做的仅仅是应用上述的插件.然而,非核心二进制插件需要到构建类路径才能应用它们.这可以以多种方式,包括以下方式实现: 定义插件作为构建脚本中内嵌类的声明. 定义插件为在项目中buildSrc目录下的一个源文件.(参见Section 62.4, “Build sources in the buildSrc

  • 在过去的一周里,我一直在努力解决这个问题,似乎我最终无法解决它。给定任意64位无符号整数,如果它在任何位位置、任何位设置下包含31(0b11111)的二进制模式,则该数字有效,否则无效。 例如: 0000 0000 0000 0000 0000 0001 1111有效 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000