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