📜  门| GATE-CS-2004 |第 71 题(1)

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

GATE-CS-2004 Question 71

该题目是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。因此,我们可以将函数看作从n1递归调用自身。那么该递归函数的时间复杂度是多少呢?

考虑递归链条的长度。递归链条的长度为$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。因此,我们可以将函数看作从n1递归调用自身。那么该递归函数的时间复杂度是多少呢?

考虑递归链条的长度。递归链条的长度为$log_2n$。这可以通过对$x$不断除以$2$得到。递归链条的长度定义为递归函数被调用的次数。因此,时间复杂度为$O(logn)$。答案选项(B)最适合描述该算法的时间复杂度。