📅  最后修改于: 2023-12-03 15:28:42.062000             🧑  作者: Mango
该题目是GATE-CS-2004考试中的一道题目,题目是关于算法复杂度的问题。
算法复杂度是评估算法运行效率的一种方法。在计算算法复杂度时,最重要的是确定算法的时间复杂度和空间复杂度。考虑如下函数fun
:
def fun(n):
if n == 1:
return 1
else:
return 1 + fun(n/2)
则以下哪种算法复杂度描述最好地适用于fun
?
(A) $O(1)$ (B) $O(log n)$ (C) $O(n)$ (D) $O(n^2)$
题目给出的函数是一个递归函数,根据函数定义,当n=1
时,函数返回1。如果n
不为1,则函数调用自身。被调用的函数的参数是n/2
。因此,我们可以将函数看作从n
到1
递归调用自身。那么该递归函数的时间复杂度是多少呢?
考虑递归链条的长度。递归链条的长度为$log_2n$。这可以通过对$x$不断除以$2$得到。递归链条的长度定义为递归函数被调用的次数。因此,时间复杂度为$O(logn)$。答案选项(B)最适合描述该算法的时间复杂度。
# GATE-CS-2004 Question 71
该题目是GATE-CS-2004考试中的一道题目,题目是关于算法复杂度的问题。
## 题目描述
算法复杂度是评估算法运行效率的一种方法。在计算算法复杂度时,最重要的是确定算法的时间复杂度和空间复杂度。考虑如下函数`fun`:
```python
def fun(n):
if n == 1:
return 1
else:
return 1 + fun(n/2)
则以下哪种算法复杂度描述最好地适用于fun
?
(A) $O(1)$ (B) $O(log n)$ (C) $O(n)$ (D) $O(n^2)$
题目给出的函数是一个递归函数,根据函数定义,当n=1
时,函数返回1。如果n
不为1,则函数调用自身。被调用的函数的参数是n/2
。因此,我们可以将函数看作从n
到1
递归调用自身。那么该递归函数的时间复杂度是多少呢?
考虑递归链条的长度。递归链条的长度为$log_2n$。这可以通过对$x$不断除以$2$得到。递归链条的长度定义为递归函数被调用的次数。因此,时间复杂度为$O(logn)$。答案选项(B)最适合描述该算法的时间复杂度。