我正在阅读一些关于时间复杂度的信息,我很困惑如何实现以下时间复杂性,如果有一套特定的规则或方法来解决这个问题?
(一)
Input: int n
for(int i = 0; i < n; i++){
print("Hello World, ");
}
for(int j = n; j > 0; j--){
print("Hello World");
}
紧:6N+5
大O:O(n)
2个)
Input: l = array of comparable items
Output: l = array of sorted items
Sort:
for(int i = 0; i < l.length; i++){
for(int j = 0; j < l.length; j++){
if(l{i} > l{j}){
} }
Swap(l{i},l{j});
}
return ls;
最坏情况时间复杂度:4N2+3N+ 2=O(N2)
最佳答案
在第一个示例中,数组有n个元素,您要遍历这些元素两次第一次从索引0开始到i,第二次从索引n开始到0。所以,为了简化这一点,我们可以说你花了2n。在处理大O符号时,你应该记住我们关心的是界限:
因此,o(2n)=o(n)
O(an+b)=O(n)
Input: int n // operation 1
for(int i = 0; i < n; i++){ // operation 2
print("Hello World, "); // Operation 3
}
for(int j = n; j > 0; j--) // Operation 4
{
print("Hello World"); //Operation 5
}
如您所见,我们在循环之外总共有5个操作。
在第一个循环中,我们执行三个内部操作:检查i是否小于n、打印“Hello World”和递增i。
在第二个循环中,我们还有三个内部操作。
所以,我们需要的操作总数是:3n(对于第一个循环)+3n(第二个循环)+5(循环外的操作)。因此,所需的步骤总数为6n+5(这是您的严格限制)。
如前所述,o(a n+b)=n,因为一旦一个算法是线性的,当n非常大时,a和b不会产生很大的影响。
所以,你的时间复杂度将变成:O(6n+1)=O(n)。
在第二个示例中,您可以使用相同的逻辑,同时记住两个嵌套循环使用n而不是n。