Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.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/0/performance/5.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 如何使用for循环实现O(C^n)时间复杂度函数?_Javascript_Performance_Algorithm - Fatal编程技术网

Javascript 如何使用for循环实现O(C^n)时间复杂度函数?

Javascript 如何使用for循环实现O(C^n)时间复杂度函数?,javascript,performance,algorithm,Javascript,Performance,Algorithm,我能想到的唯一一件事是在循环之前使用Math.pow()计算n,这似乎是一种逃避。 在本例中,C=2: var oCN = function (n) { var j = Math.pow(2, n); for (var i = 0; i <= j; i++) { console.log('cactus'); }; return; } var oCN=函数(n) { var j=数学功率(2,n); 对于(var i=0;i,像这样的

我能想到的唯一一件事是在循环之前使用Math.pow()计算n,这似乎是一种逃避。
在本例中,C=2:

var oCN = function (n)
{
    var j = Math.pow(2, n);
    for (var i = 0; i <= j; i++) {
          console.log('cactus');  
    };
    return;
}
var oCN=函数(n)
{
var j=数学功率(2,n);

对于(var i=0;i,像这样的递归算法将相对于
n
呈指数增长:

var oCN = function (C, n)
{
    if (n < 1) { console.log('cactus'); return; }
    for (var i = 0; i < C; i++) {
        oCN(C, n-1);
    }
}
var oCN=函数(C,n)
{
if(n<1){console.log('cactus');return;}
对于(变量i=0;i
在这种算法中,记录的仙人掌的数量正好是
C^n
,这当然是
O(C^n)
。例如
oCN(2,4)
logs
cactus
16次,
oCN(2,5)
记录32次,等等


通常情况下,你不会看到很多在指数时间内工作的日常算法。如果在指数时间内完成某件事情,很有可能输入大小或常数是如此之大,以至于big-O复杂性根本不重要(或者至少实现者不太关心),所以你可能不会坐在那里分析复杂性。大多数程序员想做的事情要么马上用多项式时间算法,要么用一些捏造和牺牲来完成。

Math.pow(2,n)
--这条语句是关于什么的?它计算出
2^n
,然后呢?哎呀,谢谢你指出了这一点。它的意思是n=Math.pow(2,n)不重写参数的值是一个很好的做法。所以把它放到不同的变量中,那么我们的函数将以指数方式(如你所愿)完成一些工作。要选择具有给定复杂性的“真实世界”实现,请从“我通常认为是for循环中的for循环的方式,而不是只计算n^2,然后编写一个for循环来迭代n^2次。”---这无关紧要。重要的是“计算成本”作为二次函数增加。在内部它可能是一个单循环、嵌套循环或50个循环。谢谢,这正是我想要的!