topk算法 算法的時(shí)間復(fù)雜度僅與問(wèn)題的規(guī)模有關(guān)?
算法的時(shí)間復(fù)雜度僅與問(wèn)題的規(guī)模有關(guān)?對(duì)于大多數(shù)題庫(kù)中算法的時(shí)間復(fù)雜性,答案是選擇與問(wèn)題大小相關(guān)的算法。同時(shí),干擾項(xiàng)往往是計(jì)算機(jī)硬件性能、編譯質(zhì)量、編程語(yǔ)言等。(直接回答)本書的其他版本也提到了它與要處
算法的時(shí)間復(fù)雜度僅與問(wèn)題的規(guī)模有關(guān)?
對(duì)于大多數(shù)題庫(kù)中算法的時(shí)間復(fù)雜性,答案是選擇與問(wèn)題大小相關(guān)的算法。同時(shí),干擾項(xiàng)往往是計(jì)算機(jī)硬件性能、編譯質(zhì)量、編程語(yǔ)言等。(直接回答)
本書的其他版本也提到了它與要處理的數(shù)據(jù)的初始狀態(tài)有關(guān),例如它是否有序。(補(bǔ)充答案)
算法的時(shí)間復(fù)雜度,即效率,通常只與算法本身的性質(zhì)有關(guān)。算法本身的性質(zhì)還包括所涉及問(wèn)題的規(guī)模,以及選擇什么樣的算法策略。(個(gè)人經(jīng)驗(yàn))
算法的時(shí)間復(fù)雜度,即重復(fù)基本操作的次數(shù),是問(wèn)題n大小的函數(shù)f(n)。算法的時(shí)間度量是t(n)=O(f(n)),這意味著隨著問(wèn)題n大小的增加,算法執(zhí)行時(shí)間的增長(zhǎng)率是最小的與F(n)相同,稱為漸近時(shí)間復(fù)雜度,又稱時(shí)間復(fù)雜度。讓我舉一個(gè)例子來(lái)說(shuō)明,例如,一個(gè)排序算法的時(shí)間復(fù)雜度O(n),那么運(yùn)行時(shí)間與元素?cái)?shù)n成正比,另一個(gè)排序算法的時(shí)間復(fù)雜度是O(n*logn),那么運(yùn)行時(shí)間與n*logn成正比,所以當(dāng)n足夠大時(shí),第一個(gè)算法總是快的。但是,如果n不是很大,那么具體的運(yùn)算時(shí)間并不總是像前一種算法那樣快,比如剛才第一種算法的實(shí)際速度是100×n,第二種算法的實(shí)際速度是2×n×logn,n=100,那就是第二種算法的速度快
因?yàn)橛?jì)算機(jī)執(zhí)行起來(lái)需要時(shí)間因此,對(duì)于算法的質(zhì)量,我們需要估計(jì)完成計(jì)算所需的時(shí)間。
然而,計(jì)算機(jī)消耗的時(shí)間是執(zhí)行指令,因此我們估計(jì)的時(shí)間復(fù)雜度實(shí)際上是估計(jì)一個(gè)程序相對(duì)于其輸入可以執(zhí)行多少指令才能給出答案。
如果我們有n個(gè)輸入,那么t(n)表示它執(zhí)行的指令數(shù),然后用t(n)乘以每條指令的執(zhí)行時(shí)間就是實(shí)際消耗的時(shí)間。
但是每個(gè)指令的執(zhí)行時(shí)間由計(jì)算機(jī)配置決定,因此不能用于評(píng)估算法。因此我們使用t(n),即相對(duì)于輸入執(zhí)行的指令數(shù)來(lái)表示算法的時(shí)間復(fù)雜度。