Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.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
如何在javascript中找到11的幂或x是n的幂?_Javascript_Algorithm_Math_Data Structures - Fatal编程技术网

如何在javascript中找到11的幂或x是n的幂?

如何在javascript中找到11的幂或x是n的幂?,javascript,algorithm,math,data-structures,Javascript,Algorithm,Math,Data Structures,我试图找到11的n的力量。我知道JavaScript中有一个函数Math.pow,它赋予你数字的力量。我想自己实现这个函数。我的函数工作得很好,但它的时间复杂度是O(n)我们能用其他方法降低时间复杂度吗 我想使用位图,但没有成功 功能功率(x,n){ 设和=1 对于(让我=0;我我还不能就你的问题发表评论,但我希望我对你的问题理解得足够好。这是你想要的吗 constmypow=(x,y)=>x**y; 一种可能的方法: function exp_by_squaring(x,n){ if(

我试图找到
11
n
的力量。我知道JavaScript中有一个函数
Math.pow
,它赋予你数字的力量。我想自己实现这个函数。我的函数工作得很好,但它的时间复杂度是O(n)我们能用其他方法降低时间复杂度吗

我想使用
位图
,但没有成功

功能功率(x,n){
设和=1

对于(让我=0;我我还不能就你的问题发表评论,但我希望我对你的问题理解得足够好。这是你想要的吗

constmypow=(x,y)=>x**y;
一种可能的方法:

function exp_by_squaring(x,n){
   if(n < 0) 
     return exp_by_squaring(1 / x, -n);
   else if(n === 0) 
     return  1;
   else if(n === 1) 
     return  x ;
   else if(n %2===0) 
     return exp_by_squaring(x * x,  n / 2);
   else 
     return x * exp_by_squaring(x * x, (n - 1) / 2);
}
功能功率(x,n){
设res=1;
设acc=x;
而(n>0){
如果(n&1)res*=acc;
acc*=acc;
n>>=1;
}
返回res;
}
console.log(power(11,0));//1
console.log(power(11,1));//11
console.log(power(11,2));//121
console.log(power(11,3));//1331
console.log(power(11,5));//161051

log(power(11,8));//214358881等。
您可以采用建议的方形方法

复杂度是O(log2(n)),就像这个函数计数的表一样

   n     counts
-------  ------
   100      7
  1000     10
 10000     14
100000     17
功能功率(x,n){
如果(n==1)返回x;
设温度=功率(x,n>>1);
返回%2
?x*温度*温度
:temp*temp;
}

console.log(power(11,3));//1331,有2个调用
这看起来比您原来的实现快,尽管不优雅

function power(x,n){
   return Array.apply(null,Array(n)).reduce((r,v) => r*x, 1)
}

以下是squre方法的简单JS实现:

function exp_by_squaring(x,n){
   if(n < 0) 
     return exp_by_squaring(1 / x, -n);
   else if(n === 0) 
     return  1;
   else if(n === 1) 
     return  x ;
   else if(n %2===0) 
     return exp_by_squaring(x * x,  n / 2);
   else 
     return x * exp_by_squaring(x * x, (n - 1) / 2);
}
exp\u by\u squaring(x,n)函数{
if(n<0)
通过平方运算返回exp_(1/x,-n);
else如果(n==0)
返回1;
else if(n==1)
返回x;
否则如果(n%2==0)
通过平方运算返回exp\u(x*x,n/2);
其他的
通过平方(x*x,(n-1)/2)返回x*exp\u;
}
我还使用其他答案中的一些方法创建了一个基准,看看:


允许幂号吗?
**为什么不允许?什么是幂号?你听说过平方求幂吗?你可以使用这样的想法,当n为偶数时x^n=x^(n/2)*x^(n/2),然后是奇数幂。这样你就可以把复杂性降低到
O(log(n))
这样你看了吗?复杂性是什么?看起来像O(log(n))对我来说,但我不太适合读书these@naina什么是复杂性?这个基准测试毫无意义,因为你只是一遍又一遍地计算相同的能力。这可能是以某种方式优化的。每个测试都应该是独立的,所以内存应该在测试之间刷新。你仍然在计算
pow(11,3)
对所有方法的执行效果大致相同。至少你需要一个更大的指数才能看到显著的差异。是的,我同意这一点,在更大的计算中,差异更显著。在链接中,OP可以自由更改值并注意差异。这将始终较慢,因为
减少
应用
包含间接费用如果您真的认为这样更快,请提供证据或任何有意义的解释。