2016-09-19 12 views
-5

この関数の時間複雑度(O)はどのくらいですか?私はmergesortと私のコードでバイナリ検索を持っています。バイナリ検索はO(log n)であり、mergesortはO(nlogn)ですが、このアルゴリズムの複雑さは何ですか?forループを含む再帰関数の時間複雑度

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() 
+1

http://stackoverflow.com/questions/2709106/time-complexity-of-a-recursive-algorithm – dwbartz

答えて

1

入出力機能は、入力を多少マスクします。ルートディレクトリの名前searchpathが入力だと思うかもしれませんが、入力がディレクトリ階層を表すルートツリーであると考えるのが一層合理的です。各ノードで一定量の作業が行われると仮定すると(やはり合理的に)、実行時間は単にO(n)です。

+0

私はmergesortとbinarysearchも持っているので、私の時間の複雑さは、私のコード全体でnlognになることを意味しますか? –

+0

これは、ソートと検索の対象によって異なります。結果のデータファイルを一度(または多くても一定回数)並べ替えると、それはまだO(n lg n)です。それぞれのバイナリ検索はO(lg n)なので、 'k'検索(' k'と 'n'は独立)で検索するとO(nlg n + k lg n)になります。 (基本的には、実行時間の合計が長いほどソートや検索が制限されます)。 – chepner

関連する問題