python - 这个递归算法的复杂度是多少?

标签 python algorithm time-complexity

下面算法的复杂度是否为O(nlogn)?

让我感到困惑的是,这个算法除法两次,而不是像常规的 O(nlogn) 算法那样除一次,而且每次它的工作时间都为 O(n)。

def equivalent(a, b):

    if isEqual(a, b):
        return True

    half = int(len(a) / 2)
    if 2*half != len(a):
        return False

    if (equivalent(a[:half], b[:half]) and equivalent(a[half:], b[half:])):
        return True

    if (equivalent(a[:half], b[half:]) and equivalent(a[half:], b[:half])):
        return True

    return False

最佳答案

equivalent 的 4 次递归调用中的每一次都将输入数据量减少了 2 倍。因此,假设 ab 具有相同的长度,并且isEqual 具有线性时间复杂度,我们可以构造整体复杂度的递归关系:

enter image description here

C 是一些常量。我们可以通过重复替换和发现一个模式来解决这个关系:

enter image description here

求和的上限是多少,m?当len(a)奇数 时,会出现停止条件。这可能介于 N1 之间,具体取决于 N质数分解。在最坏的情况下,N 是 2 的幂,因此函数递归直到 len(a) = 1,即

enter image description here

关于python - 这个递归算法的复杂度是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45746077/

相关文章:

在动态列表中查找数字桶的算法

python - 具有单独 Python 后端的 Amazon EC2 文件结构/Web 应用程序?

Python:列表的 2 个索引位置括号

java - Java中两个字符串的交集

algorithm - 迭代器的连接

algorithm - 在没有幂函数的情况下计算for循环中的小数指数

python - 使用python在MySQL中进行远程查询

python - 解决服务器中嵌套相对目录的问题

python - 在 nlog(n/k) 中合并 n/k 排序列表 - python

algorithm - 试图找出时间复杂性