这个算法的大符号是什么?
What is the big o notation of this algorithm?
for(int i = 0; i < n; ++i)
{
for(int x = i; x < n; ++x)
{
// work...
}
}
这种算法的大 o 表示法是什么?另外,请向我解释一下您是如何提出解决方案的。
另外,抱歉标题含糊不清,但我不知道这种算法的名称。
这是我尝试过的:
如果 n 是:
1,将有1个工作执行。
2,会有3个工作执行。
3,会有6个工作执行。
4,将有10个工作执行。
5,会有15个工作执行。
评论中的人说它是 n^2 但我得到的数字与结果不匹配,因为 5^2 是 25 而不是 15
大O符号是从计算时间复杂度中推导出来的。您必须考虑算法的工作量。
请看下面我推导出 Big 0 的答案。这是使用 LateX
,这是一个很好的写方程的工具。
注释
巨大的 E
符号 - 被称为 Sigma。这是一个数学符号,用于编写算法来注释循环函数。将其视为您的 for
- 底部术语就像您的 i=0
,顶部术语就像您的 i < n
.
(n-1)
表示内循环的工作。 - 为了计算这个,我们将等式分成两个单独的 Sigmas - 因为 i
推导起来更复杂。
注意内部循环如何不是 运行 n
次而是 n-i
次。另外,第 (3) 行——为了理解 i
是什么——我们使用求和法(也许是法则 6?)。
为了得到 n^2 - 我们从等式中删除常数以及不支配函数增长的项。
for(int i = 0; i < n; ++i)
{
for(int x = i; x < n; ++x)
{
// work...
}
}
这种算法的大 o 表示法是什么?另外,请向我解释一下您是如何提出解决方案的。
另外,抱歉标题含糊不清,但我不知道这种算法的名称。
这是我尝试过的:
如果 n 是:
1,将有1个工作执行。
2,会有3个工作执行。
3,会有6个工作执行。
4,将有10个工作执行。
5,会有15个工作执行。
评论中的人说它是 n^2 但我得到的数字与结果不匹配,因为 5^2 是 25 而不是 15
大O符号是从计算时间复杂度中推导出来的。您必须考虑算法的工作量。
请看下面我推导出 Big 0 的答案。这是使用 LateX
,这是一个很好的写方程的工具。
注释
巨大的
E
符号 - 被称为 Sigma。这是一个数学符号,用于编写算法来注释循环函数。将其视为您的for
- 底部术语就像您的i=0
,顶部术语就像您的i < n
.(n-1)
表示内循环的工作。 - 为了计算这个,我们将等式分成两个单独的 Sigmas - 因为i
推导起来更复杂。注意内部循环如何不是 运行
n
次而是n-i
次。另外,第 (3) 行——为了理解i
是什么——我们使用求和法(也许是法则 6?)。
为了得到 n^2 - 我们从等式中删除常数以及不支配函数增长的项。