我在夏天参加数据分析和算法。
问题:对于执行语句x = x + 1的次数,用n表示Θ符号。
for i = 1 to 526
for j = 1 to n^2(lgn)^3
for k = 1 to n
x=x+1
我对如何找到答案很困惑。第一行是526,然后第二行显然是n ^ 2倍(lgn)^ 3,但那可能是3(n ^ 2)lgn?然后第三行就是n。因此组合它们将是526 * n ^ 3(lgn)^ 3,并且只有n它将类似于Θ(n ^ 3)(lgn)^ 3。我不确定。
还要确保我理解这种类型的问题
for i = 1 to |nlgn|
for j = 1 to i
x=x+1
答案只是nlgn,因为第二行的i不重要吗?
答案 0 :(得分:3)
回答 第一部分 : -
String[] strArr = input.split(" ") ;
if(strArr[0].equals("define"){
}
该程序将运行526 * n ^ 2 *(lg n)^ 3 * n次= 526 * n ^ 3 *(lg n)^ 3次。
因此,x = x + 1将执行526 * n ^ 3 *(lg n)^ 3次。
来到Big-theta符号,
对于任何n> 1,n总是大于(lg n),所以,
for i = 1 to 526
for j = 1 to n^2(lgn)^3
for k = 1 to n
x=x+1
对于一些正常数c1< 526和c2> 526,所以big-theta符号将是
θ(n ^ 3 *(lg n)^ 3)。
回答 第二部分 ,
c1 * n^3 <= 526 * n^3 * (lg n)^3 <= c2 * n^3 * (lg n)^3
您的假设非常不正确。由j引导的内环也是评估x = x + 1语句所必需的,因为它是内环的主体,它本身就是外环的主体。
所以,这里,x = x + 1将被评估为
for i = 1 to |nlgn|
for j = 1 to i
x=x+1
答案 1 :(得分:3)
第二个例子的答案不是nlogn。您不能简单地将两个for循环的边界相互相乘。第二个循环形成一个西格玛,因为第二个循环从1移动到i,最多可以是nlogn。这个sigma将是1 + 2 + ... + nlogn ...这个sigma的总和可以使用自然数之和的公式找到。因此sigma是(nlogn *(nlogn + 1))/ 2。