📅  最后修改于: 2023-12-03 15:42:15.275000             🧑  作者: Mango
该问题来自于2002年的计算机科学门(GATE-CS)考试,考察了程序员关于程序性能的优化、数据结构和算法的知识,接下来进行详细介绍。
以下程序段的时间复杂性是多少?
i, n, j = 1, 100, 1
while i <= n:
while j <= i:
j = j + 1
j = 1
i = i * 2
请注意,这段代码的Python实现并没有说明数据类型,所以需要假定$i, n, j$都是整数。
根据计算机科学中常见的算法时间复杂性表格,我们可以进行一些思考:
接下来,我们仔细分析代码中的每个步骤:
根据以上分析,我们可以推断,内部循环的时间复杂度为常数时间,外部循环每次迭代使$i$的值翻倍,所以外部循环的时间复杂度是$O(log n)$,因此该程序的时间复杂度为$O(log n)$。
因此,正确答案为 C. $O(log n)$
这道题考察了程序员对时间复杂度的理解,需要仔细分析内外部循环的每个步骤并根据算法时间复杂度表格进行比较和推断。在实际工作中,开发人员需要深入理解数据结构和算法,并根据问题选择最优解决方案。