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