第一个问题;
sum = 0;
for i = 1 to n; i++
{
for j = 1 to i * i; j++
{
for k = 1 to j; k++
sum ++;
}
}
和
第二个问题;
sum = 0;
for i = 1 to n
{
for j = 1 to i * i
{
if j mod i == 0
{
for k = 1 to j
sum ++;
}
}
}
您好我是IT新手,我需要帮助(实际上是两个:D)
前几天我遇到了“大o”,当我正在研究它的时候,我找到了这个地址,实际上我从这里学到了许多东西......
但大多数关于“大o”的例子只是为了解释它,这里我有两个问题。经过我的计算,我发现第一个的大o为O(n ^ 5),第二个为O(n ^ 3)。但这些价值太大了......
因此我在这里,我需要你的帮助...(即使你可以写下结果没有解释但请帮助我解决这些问题)
先谢谢...
答案 0 :(得分:2)
好的,big-O的定义是函数 g(x)是 O(f(x))如果 g(x)< / em>≤ kf(x)表示某些常数 k 。
换句话说,big-O告诉你一个函数增长有多快的一些想法;如果它是$ O(n)*,它会与输入的长度成比例增长。您计算的内容以及计算的详细信息都隐藏在常量中。
以下是一些例子:
for i from 1 to n {
do something
}
是 O(n)。您可以分别浏览 n 项目。
for i from 1 to n {
}
for i from 1 to n {
}
依次两次 O(n),因为您正在查看每个 n 项目两次。那是 2n ,它仍然是 O(n)。
另一方面,
for i from 1 to n {
for j from 1 to n {
}
}
是 O(n 2 ),因为对于 i 的每一步,您都要经过 1-n 对于 j 。
理顺你的代码缩进,这样我们就可以确定你在做什么了,看看这些例子是否有帮助。
更新
这些都是非常有趣的问题,想一想。
i*i
期限考虑i*i
的值,即i 2 的值。在最坏的情况下,i == n,因此j是1,4,9,16...(n*n)
。对于从1到n的x,x 2 的总和是多少? (提示:1/6(...)(...),现在填写空白。)
该术语什么时候会成立?