程序频度的计算通常涉及以下步骤:
确定循环控制变量的变化情况
分析循环语句(如for循环、while循环)的初始值、循环条件和每次循环控制变量的变化情况。
计算循环次数
根据循环控制变量的变化情况,计算出每个循环的执行次数。例如,对于for循环`for (int i = 0; i < n; i++)`,循环次数是`n`次。
计算语句执行次数
对于程序中的每条语句,计算其在循环中的执行次数。例如,在循环`for (int i = 0; i < n; i++) { a++; }`中,语句`a++`的执行次数是`n`次。
求和得到总执行次数
将程序中所有语句的执行次数相加,得到总执行次数。例如,对于代码段`for (int i = 0; i < n; i++) { a++; for (int j = 0; j < m; j++) { num++; } }`,总执行次数为`(n+1) + n*(m+1) + n*m`,简化后为`2*n*m + 2*n + 1`次。
确定频度的数量级
在实际应用中,通常只需计算出程序时间复杂度的数量级,即最高次项的系数。例如,对于代码段`for (i=1;i 示例 假设有如下代码段: ```cpp for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { c[i][j] = 0; } } ``` 外层循环变量`i`从0到`n-1`,执行`n`次。 内层循环变量`j`从0到`2*n-1`,执行`2*n*(n-1)`次。 语句`c[i][j] = 0;`在内层循环中执行`2*n*(n-1)`次。 外层循环执行`n`次,内层循环执行`2*n*(n-1)`次,总执行次数为`n * 2*n*(n-1) = 2*n^3 - 2*n^2`。 取增长最快的一项作为数量级,即`O(n^3)`。 通过以上步骤,可以计算出程序的时间复杂度,并确定其数量级。这种方法适用于大多数程序,尤其是包含多重循环的程序。确定循环控制变量的变化情况
计算语句执行次数
求和得到总执行次数
确定频度的数量级