题目
下面程序段的时间复杂度是(※注用∧表示幂,符号全用英文符号,乘除用*和/) 。for( i =0; i<n; i++)for(j=0;j<m;j++)A[i][j] = 0;
下面程序段的时间复杂度是(※注用∧表示幂,符号全用英文符号,乘除用*和/) 。
for( i =0; i<n; i++)
for(j=0;j<m;j++)
A[i][j] = 0;
题目解答
答案
O(n*m);O(m*n);o(n*m);o(m*n)
解析
考查要点:本题主要考查时间复杂度的计算,特别是嵌套循环结构的时间复杂度分析。
解题核心思路:
- 外层循环次数:外层循环变量
i从0到n-1,共执行n次。 - 内层循环次数:内层循环变量
j从0到m-1,共执行m次。 - 总操作次数:外层循环每执行一次,内层循环执行
m次,因此总操作次数为n * m。 - 时间复杂度表示:由于循环体内操作是常数时间
O(1),总时间复杂度为O(n*m)或O(m*n)(乘法交换律下两者等价)。
关键点:
- 大O符号表示渐近上界,
O(n*m)和O(m*n)均正确。 - 小o符号(如
o(n*m))表示不紧的上界,不符合本题精确的线性关系。
循环结构分析
- 外层循环:
for (i = 0; i < n; i++)i从0开始,每次递增1,直到i >= n停止,共执行n次。
- 内层循环:
for (j = 0; j < m; j++)- 每次外层循环执行时,
j从0开始,每次递增1,直到j >= m停止,共执行m次。
- 每次外层循环执行时,
- 循环体操作:
A[i][j] = 0- 每次赋值操作的时间为常数
O(1)。
- 每次赋值操作的时间为常数
总时间复杂度计算
- 总操作次数:外层循环次数
n× 内层循环次数m× 循环体时间O(1),即n * m * O(1) = O(n*m)。 - 等价性:
O(n*m)与O(m*n)等价,因乘法满足交换律。