如果我对嵌套循环使用相同的变量,时间复杂度是 n 的阶数或 n 的平方
time complexity is order of n or square of n if i use same variables for nested loops
for(i=0;i<n;i++)
{
for(;arr[i]!=' ';i++)
{
//required code
}
//required code
}
假设我想做一些操作,比如“反转句子中的每个单词(但不是整个句子)。示例:
输入:"This is a ball"
输出:"sihT si a llab"
'.
然后肯定在循环内,我会寻找一个 'Space' 字符。我想问以下问题:
(1) 顺便说一下,我已经用了两个循环,为什么有人说我把程序做成O(n^2)是在不必要地让程序变得更复杂。
我知道我可以在外部 'for' 循环中使用 'if' 来代替内部 'for'。但是,如果我选择这种方式,这怎么可能是 O(n^2),因为我认为我正在增加相同变量 'i' 上的循环,我认为它是 O(n)。
(2)为什么 "what I have written" (内部 for 循环代替 'if')不是一个好的做法?它与缓存问题有很大关系吗?
您的双循环的时间复杂度为 O(n)
,因为总迭代次数为 n
。
修改 for
循环的循环变量被认为是不好的做法。我会改用 while
循环。
请注意,内部循环有一个错误 - 它需要检查它是否不会继续超过缓冲区的末尾。
for(i=0;i<n;i++)
{
for(;arr[i]!=' ';i++)
{
//required code
}
//required code
}
假设我想做一些操作,比如“反转句子中的每个单词(但不是整个句子)。示例: 输入:"This is a ball" 输出:"sihT si a llab" '. 然后肯定在循环内,我会寻找一个 'Space' 字符。我想问以下问题: (1) 顺便说一下,我已经用了两个循环,为什么有人说我把程序做成O(n^2)是在不必要地让程序变得更复杂。 我知道我可以在外部 'for' 循环中使用 'if' 来代替内部 'for'。但是,如果我选择这种方式,这怎么可能是 O(n^2),因为我认为我正在增加相同变量 'i' 上的循环,我认为它是 O(n)。 (2)为什么 "what I have written" (内部 for 循环代替 'if')不是一个好的做法?它与缓存问题有很大关系吗?
您的双循环的时间复杂度为 O(n)
,因为总迭代次数为 n
。
修改 for
循环的循环变量被认为是不好的做法。我会改用 while
循环。
请注意,内部循环有一个错误 - 它需要检查它是否不会继续超过缓冲区的末尾。