2017-05-06 45 views
-2

我有一个数据列表。如何找到这个程序的时间复杂度?

db = [("Ada","works", "IBM") 
    ,("Alice","director", "Ada") 
    ,("Tom","works", "IBM") 
    ,("Tommy","director", "Tom") 
,("IBM","isat",  "CA") 
,("CA","in",  "USA") 
] 
ask db = map (\(x,y,z) -> (z == "IBM")) db 

如何计算为O(n)的复杂性? 如果我想通过列表2,5,10.O的长度,得到的结果(n)是同样喜欢2,5,10?如果我做

trans2 db = concat (map ((x,y,z) -> concat (map((x',y',z') -> if (z==x') then [] else [(x,y ++ "." ++ y',z')] else []) db)) db) 

我该如何计算O(n)?程序的运行时间?调整的复杂性

+0

* O(n)* ??的复杂性* O(n)*是一个复杂类。 –

+0

函数O(n)时间复杂度 – Ada

+0

这个比较是一个恒定的时间操作,由于你使用了map,所以'ask'函数运行于O(n)(又称线性时间) 。 – Erik

回答

1

这个问题还不清楚,我预计它很快就会关闭。简单地说。

O(n)的复杂性。如果你知道O(n)并且你想要复杂性,那么你就完成了。

由于长度是n所代表的长度,列表的长度(2,5,10,你有什么)并不是复杂度的一个因素。

没有代码可以自动计算算法的复杂度。这是一个手动分析。

+0

这意味着如果db中有5个子列表,复杂度是5?但是,如果我将其他操作(如列表反转)与其他操作结合使用,那么如何计算复杂度?TKS。 – Ada

+0

不,因为'5'不是复杂等级。你一直试图减少对单个数字的答案,这本身就是一个误解。 –

+0

这意味着时间复杂度取决于列表的长度。 – Ada