简单java代码的时间复杂性
如何确定此代码的时间复杂度?我猜modPow方法是最“昂贵”的简单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
这个特定的代码在
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);
}
}