C++ 为什么这个程序的复杂性是O(n)?
为什么这个程序的复杂性是O(n)?C++ 为什么这个程序的复杂性是O(n)?,c++,C++,为什么这个程序的复杂性是O(n)?for循环中有一个while循环。这不就是O(n^2)的复杂性吗 数组中的每个元素只访问一次。这具有O(N)的复杂性 外循环不进行N迭代,外循环的迭代次数N/k,乘以内循环的迭代次数k/2,就复杂度而言,给出了总迭代次数N/k*k/2=N/2,即O(N),首先确定两件事: 输入大小 基本操作 在您的情况下,输入的大小是数组arr的大小n,而基本操作是swap 然后回答这个问题: 如果输入n的大小加倍,您还需要执行多少基本操作swap 经过一些分析,您将得出结论,
for
循环中有一个while
循环。这不就是O(n^2)的复杂性吗
数组中的每个元素只访问一次。这具有O(N)的复杂性
外循环不进行
N
迭代,外循环的迭代次数N/k
,乘以内循环的迭代次数k/2
,就复杂度而言,给出了总迭代次数N/k*k/2=N/2
,即O(N)
,首先确定两件事:
arr
的大小n
,而基本操作是swap
然后回答这个问题:
如果输入n
的大小加倍,您还需要执行多少基本操作swap
经过一些分析,您将得出结论,您还需要将swap
操作的数量增加一倍,因为数组arr
中的每个元素只交换一次
因此复杂性是O(N),即与输入大小成线性关系。介意将代码添加到代码块中吗?每个
都有k
迭代,而for
大约有N/2k
迭代,所以总迭代次数是O(N)
注意i
是如何递增的。上面right
的注释不正确。因为循环保证2k