Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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
Algorithm 按递增顺序以最佳方式打印(3^i*7^j)的值_Algorithm_Loops_Dynamic Programming - Fatal编程技术网

Algorithm 按递增顺序以最佳方式打印(3^i*7^j)的值

Algorithm 按递增顺序以最佳方式打印(3^i*7^j)的值,algorithm,loops,dynamic-programming,Algorithm,Loops,Dynamic Programming,我遇到了一个面试问题,要求您按递增顺序但以最佳方式打印3i*7j的值 30*70=1 31*70=3 30*71=7 32*70=9 31*71=21 33*70=27 等等 你可以用一个。首先插入最小值(3^0*7^0)。在每个步骤中,打印最小值(这将是堆的根),删除它,然后将3*最小值和7*最小值添加到堆中 这具有时间复杂性 A(i,j)=3^i * 7^j when i != 0 and j != 0: A(i,j)=A(i-1,j-1)*21 when i!=0 and j==0

我遇到了一个面试问题,要求您按递增顺序但以最佳方式打印
3i*7j
的值

30*70=1

31*70=3

30*71=7

32*70=9

31*71=21

33*70=27

等等

你可以用一个。首先插入最小值(
3^0*7^0
)。在每个步骤中,打印最小值(这将是堆的根),删除它,然后将
3*最小值
7*最小值
添加到堆中

这具有时间复杂性

A(i,j)=3^i * 7^j
when i != 0 and j != 0:
    A(i,j)=A(i-1,j-1)*21
when i!=0 and j==0:
    A(i,0)=A(i-1,0)*3
when i==0 and j!=0:
    A(0,j)=A(0,j-1)*7
when i==0 and j==0:
    A(0,0)=1

您可以将它们存储到一个二维数组中,这样您就可以从中获取前一个值。

当您说“最优”时,我唯一能想到的就是计算它并将值保存在一个表中。然后只计算乘法

     long[] threePower = new long[10];
     long[] sevenPower = new long[10];

     threePower[0] = sevenPower[0] = 1;
     for (int i = 1; i < 10; i++)
     {
        threePower[i] = threePower[i - 1]*3;
        sevenPower[i] = sevenPower[i - 1] * 7;
     }
long[]threePower=new long[10];
长[]七倍=新长[10];
三次幂[0]=七次幂[0]=1;
对于(int i=1;i<10;i++)
{
三次幂[i]=三次幂[i-1]*3;
七方幂[i]=七方幂[i-1]*7;
}

然后打印组合

但是“在每一步”生成O(n)?@huseyintugrulbuyukisik-找到下一个应该打印的值是什么是
O(log n)
,其中
n
是您想要打印的多少个值。如何有效地按递增顺序打印它们?@IVlad在双for语句中,即
O(n^2)
-效率不高。@IVlad你是说这是O(n^2),这里的n是多少?乘法的数量?因为我相信你也在做同样的事情。。。当你谈到效率时,你必须解释一下你在衡量什么,它是要求你打印的值的数量。问题甚至没有说明这是给定的,而您的算法假设它是给定的。即使生成了足够多的值,您仍然没有解释“打印组合”之前的任何内容-您必须按排序顺序打印它们。你只是把它们分类吗?这是
O(n^2 log n)
(是的,主要因素是不同的。BFD。)JavaScript尝试:您缺少要点,您应该按递增顺序打印,这有什么帮助?