Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 2^(n)-1的算法是否存在于θӨ;(1)?_Java_Algorithm_Big Theta - Fatal编程技术网

Java 2^(n)-1的算法是否存在于θӨ;(1)?

Java 2^(n)-1的算法是否存在于θӨ;(1)?,java,algorithm,big-theta,Java,Algorithm,Big Theta,所以我有一个关于我应该“发明”/“发现”的算法的问题。这是一个计算ㄊ(n^n)和ㄊ(1)和ㄊ(n)的2^(n)-1的算法 我想了几个小时,但两个任务都找不到任何解决方案(第一个任务,而最后一个任务是easistimo,我在下面发布了算法)。但是我还没有足够的技能去“发明”/“找到”一个非常慢和非常快的算法 到目前为止,我的算法是(伪代码): }(n)的一个 一个简单的,有点明显的,使用递归的,虽然我不知道它有多快(如果有人能告诉我,那就好了): 比如: HugeInt h = 1; h = h

所以我有一个关于我应该“发明”/“发现”的算法的问题。这是一个计算ㄊ(n^n)和ㄊ(1)和ㄊ(n)的2^(n)-1的算法

我想了几个小时,但两个任务都找不到任何解决方案(第一个任务,而最后一个任务是easistimo,我在下面发布了算法)。但是我还没有足够的技能去“发明”/“找到”一个非常慢和非常快的算法

到目前为止,我的算法是(伪代码):

}(n)的一个

一个简单的,有点明显的,使用递归的,虽然我不知道它有多快(如果有人能告诉我,那就好了):

比如:

HugeInt h = 1;

h = h << n;
h = h - 1;
HugeInt h=1;
h=h
  • 假设
    n
    不受任何常数的限制(并且输出不应该是简单的
    int
    ,而是可以包含大整数的数据类型),则没有算法 在
    ㄊ(1)
    中产生
    2^n-1
    ,因为输出本身的大小是 所以如果我们假设有这样的算法,让它 以恒定时间运行,并对
    n进行小于
    C
    的操作= 2^(C+1)
    ,您只需执行
    C+1
    操作即可打印 输出,这与
    C
    是上限的假设相矛盾,因此 没有这样的算法
  • 对于
    ㄊ(n^n)
    ,如果你有一个更有效的算法(
    ㄊ(n)
    ),你可以做一个无意义的循环,运行额外的
    n^n
    迭代,但不做任何重要的事情,它会使你的算法
    ㄊ(n^n)
  • 还有一种
    ㄊ(log(n)*M(logn))
    算法,使用该值,然后简单地从该值中减去1。这里的
    M(x)
    是包含x位数字的乘法运算符的复杂性
  • 正如@kajacx所评论的,您甚至可以通过应用
  • }(n^n)对我来说太棘手了,但任何“二进制”体系结构上的真正}(1)算法都是:

    return n-1 bits filled with 1
    
    (假设您的体系结构可以在固定时间内分配和填充n-1位)
    ;)

    问题到底是什么?问题是这里是否有人能够找到2^(n)-1的算法,它位于θ}(n^n)或θ}(1),因为不幸的是,我没有足够的能力。如果这个名为Thetas的东西不存在,那么这个也没问题,因为我知道花更多的时间在这个上面是没有意义的。听说了
    谢谢你的回答,我从来没有想过,
    这对非常有限的
    n
    的大小有什么作用。事实上,你不能用
    ㄈ(1)
    算法来解决这个问题,因为输出大小本身就是
    ㄈ(log(n))
    @Tim,你有一个非常好的答案,除了你应该为
    h=1
    切换
    h=2
    <代码>1@IwillnotexistIdonotexist如果你想了解复杂性,你不应该把自己限制在可笑的低值
    n
    ,因为只有当
    n
    的值足够大时,}符号才有效。这就是渐近复杂性的含义。@Iwillnotexistidnotexist抱歉,但出于这个目的,}(n)和}(1)实际上是相同的,考虑到
    nAlso,θ不是平均复杂性。它是一个下限和上限,可以应用于任何类型的分析(最佳、平均、最差)。如果我理解正确,算法在3。不记录(n)
    乘法,但是当处理任意大的数字时,您不能再在恒定时间内进行乘法。我所知道的最好的是在时间
    m log(m)
    中,其中
    m
    是两个数字的位数,使用让你思考的
    数学。pow
    ㄊ(1)
    时间中运行?还有。。。所以它是关于}(#bits_,of#u,of#u,of#u,of#u,of#u,of#u,of#u,of#u,of#u,of#u,of#u,of#u,bits_,of#u,of#u,of#u,of。总之,我猜测O(n^n)应该重复加法。@C.B.在执行渐近时间复杂度分析时,通常假定访问
    O(logn)
    位的时间为
    O(1)
    。(来源:图形算法博士)我们仍然可以在处理这个问题时做出这样的假设。这里的实际问题是,问题本质上必须处理大量数据,即,如果我们假设
    O(logn)
    位可以在
    O(1)
    时间内访问,则需要O(n/logn)时间来访问
    O(n)
    位,这是表示O(2^n)所必需的。这就是为什么
    ㄉ(1)
    不可能的原因,因为我们需要O(n/logn)时间来输出答案。
    HugeInt h = 1;
    
    h = h << n;
    h = h - 1;
    
    return n-1 bits filled with 1