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代码的时间复杂性_Java_Algorithm_Time Complexity - Fatal编程技术网

简单java代码的时间复杂性

简单java代码的时间复杂性,java,algorithm,time-complexity,Java,Algorithm,Time Complexity,如何确定此代码的时间复杂度?我猜modPow方法是最“昂贵”的 这个特定的代码在O(1)中运行 然而,对于任意变量,更一般的术语是,multiply()将在O(nlog n)中运行,其中n是位数 pow()方法将在O(log b)中运行,用于小型a和b。这是通过以下方式实现的。对于较大的值,位数会变大(线性),因此乘法需要更多的时间。我会让你来做准确的分析 关于modPow()。所以它仍然是O(logb)乘法,还有一个额外的好处,就是比特数以logm为界,其中m是模。这个特定的代码确定地运行在O

如何确定此代码的时间复杂度?我猜modPow方法是最“昂贵”的


这个特定的代码在
O(1)
中运行

然而,对于任意变量,更一般的术语是,
multiply()
将在
O(nlog n)
中运行,其中
n
是位数

pow()
方法将在
O(log b)
中运行,用于小型
a
b
。这是通过以下方式实现的。对于较大的值,位数会变大(线性),因此乘法需要更多的时间。我会让你来做准确的分析


关于
modPow()。所以它仍然是
O(logb)
乘法,还有一个额外的好处,就是比特数以
logm
为界,其中
m
是模。

这个特定的代码确定地运行在
O(1)

然而,对于任意变量,更一般的术语是,
multiply()
将在
O(nlog n)
中运行,其中
n
是位数

pow()
方法将在
O(log b)
中运行,用于小型
a
b
。这是通过以下方式实现的。对于较大的值,位数会变大(线性),因此乘法需要更多的时间。我会让你来做准确的分析

关于
modPow()。因此,它仍然是
O(log b)
乘法,还有一个额外的好处,就是位数由
log m
限定,其中
m
是mod。

tskuzzy是正确的

但是,也许读一下字里行间的内容,假设这是一个家庭作业问题,他们可能想让你意识到,在这个方法中,有几个操作发生,具有不同的复杂性。然后他们可能想让你意识到整个方法的复杂性与方法中最复杂的操作是一样的。

tskuzzy是正确的


但是,也许读一下字里行间的内容,假设这是一个家庭作业问题,他们可能想让你意识到,在这个方法中,有几个操作发生,具有不同的复杂性。然后,他们可能希望您认识到,整个方法的复杂性与方法中发生的最复杂的操作相同。

每次运行时,它都会运行相同的时间量。不,这看起来很严重。原因有点让我摸不着头脑,但是一些在
O(1)
中运行的代码仍然会在
O(1)
中运行,但它可能会调用在不同时间复杂度下运行的代码。@tskuzzy,那么modPow方法呢?@pedja或许可以自己尝试一下?每次运行它都会运行相同的时间。不,这看起来很严重。原因有点让我摸不着头脑,但是一些在
O(1)
中运行的代码仍然会在
O(1)
中运行,但它可能会调用在不同时间复杂度下运行的代码。@tskuzzy,那么modPow方法呢?@pedja可能自己尝试一下吗?使用
biginger.ONE.shiftLeft(b)
a.pow(b)快得多
可能重复使用
biginger.ONE.shiftLeft(b)
a.pow(b)快得多可能重复的
import java.math.BigInteger;    
public class FermatOne    
{    
    public static void main(String[] args)    
    {    
         BigInteger a = new BigInteger ("2");    
         BigInteger k = new BigInteger ("15");    
         BigInteger c = new BigInteger ("1");    
         int b = 332192810;    
         BigInteger n = new BigInteger ("2");    
         BigInteger power;    
         power = a.pow(b);    
         BigInteger exponent;    
         exponent = k.multiply(power);    
         BigInteger mod;    
         mod = exponent.add(c);    
         BigInteger result = n.modPow(exponent,mod);    
         System.out.println("Result is  ==> " + result);    
     }    
}