【问题标题】:Time complexity of a recursive function containing for loop包含 for 循环的递归函数的时间复杂度
【发布时间】:2016-09-19 17:51:06
【问题描述】:

这个函数的时间复杂度(O)是多少?我的代码中也有合并排序和二进制搜索。我知道二分查找是 O(log n),归并排序是 O(nlogn),但是这个算法的复杂度是多少?

import os

mydatafile = open("myss.csv","w+")
def rec(searchpath):
    if os.path.isdir(searchpath):
        for i in os.listdir(searchpath):
            childpath = os.path.join(searchpath,i)
            if not os.path.isdir(childpath):
                mydata = i + ", " + childpath + "\n"
                mydatafile.write(mydata)
            else:
                mydata = i + ", " + childpath + "\n"
                mydatafile.write(mydata)
                rec(childpath)
rec("C:\Python27")
mydatafile.close()

【问题讨论】:

标签: algorithm time-complexity


【解决方案1】:

I/O 函数在某种程度上掩盖了输入。您可能认为根目录的名称searchpath 是输入,但将输入视为代表目录层次结构的根树更合理。假设(再次,合理地)在每个节点上完成恒定数量的工作,运行时间仅为 O(n)。

【讨论】:

  • 所以这意味着我的整个代码的时间复杂度将是 nlogn,因为我也有合并排序和二进制搜索?
  • 这取决于您要排序和搜索的内容。如果您对生成的数据文件进行一次(或最多为常数次)排序,那仍然是 O(n lg n)。每个二分搜索都是 O(lg n),所以如果你进行 k 搜索(其中 kn 是独立的),你最终会得到 O(n lg n + k lg n)。 (这基本上说总运行时间是有界的,无论是排序还是搜索。)
猜你喜欢
  • 1970-01-01
  • 2022-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-29
相关资源
最近更新 更多