📜  门| GATE-CS-2002 |问题25(1)

📅  最后修改于: 2023-12-03 15:42:15.275000             🧑  作者: Mango

门| GATE-CS-2002 |问题25

该问题来自于2002年的计算机科学门(GATE-CS)考试,考察了程序员关于程序性能的优化、数据结构和算法的知识,接下来进行详细介绍。

问题25题干

以下程序段的时间复杂性是多少?

i, n, j = 1, 100, 1
while i <= n:
    while j <= i:
        j = j + 1
    j = 1
    i = i * 2
  • A. $O(n)$
  • B. $O(n log n)$
  • C. $O(log n)$
  • D. $O(log log n)$

请注意,这段代码的Python实现并没有说明数据类型,所以需要假定$i, n, j$都是整数。

问题分析

根据计算机科学中常见的算法时间复杂性表格,我们可以进行一些思考:

  • 如果内部循环是常数时间(基本操作,单位时间1),则该算法的时间复杂度为$O(n)$
  • 如果内部循环是$O(log n)$,则时间复杂度为$O(n log n)$
  • 如果内部循环是$O(log log n)$,则时间复杂度为$O(log n)$

接下来,我们仔细分析代码中的每个步骤:

  • 行1,将$i$,$n$和$j$初始化为1,100和1
  • 行2,进入一个外部循环,条件是$i$小于等于$n$
  • 行3,进入一个内部循环,条件是$j$小于等于$i$
  • 行4,将$j$增加1,完成内部循环的下一次迭代
  • 行5,将$j$重置为1,内部循环结束
  • 行6,将$i$乘以2作为下一次外部循环的值
答案

根据以上分析,我们可以推断,内部循环的时间复杂度为常数时间,外部循环每次迭代使$i$的值翻倍,所以外部循环的时间复杂度是$O(log n)$,因此该程序的时间复杂度为$O(log n)$。

因此,正确答案为 C. $O(log n)$

结论

这道题考察了程序员对时间复杂度的理解,需要仔细分析内外部循环的每个步骤并根据算法时间复杂度表格进行比较和推断。在实际工作中,开发人员需要深入理解数据结构和算法,并根据问题选择最优解决方案。