日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

二分检索用途及复杂性_二分查找和三分查找哪个快?算法复杂度与常数无关?复杂度分析的常见误区...

發布時間:2023/12/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二分检索用途及复杂性_二分查找和三分查找哪个快?算法复杂度与常数无关?复杂度分析的常见误区... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

還記得兩三年前,我初看一本算法書,看到二分查找算法的復雜度時,我發現了了不得的東西:二分查找每次查詢范圍減少一半,需要查詢的次數是

,它的復雜度是

我把它改成三分查找,每次查詢兩個數字與我的目標數字比較,那么我就可以把查詢范圍縮小成原先的 1 / 3。那這樣我需要的查詢次數就只有

,復雜度也是

,一下子就優化了這么多!

那如果是四分,五分,六分,七分,豈不是能無限優化到

?我要成為算法科學家啦!

當然,我的想法是錯的。但是,我錯在哪里呢?為什么三分的復雜度看起來低了,但是卻沒有人用?好了,正文開始。

要理解這個問題,首先要知道算法的復雜度到底如何確定。什么時候我們認為一個算法的復雜度高于另一個算法?什么時候兩個算法的復雜度其實是一樣的?

對于大部分算法來說,當規模

趨于無窮大時,問題的求解時間都會趨于無窮大。那么你說的這個無窮大,它到底有多大?復雜度的記法,我們當然都知道使用大

或者大

。但是,這兩個符號,到底比較的是什么?這就是這篇文章首先要回答的問題。

一句話答案,我們所說的算法復雜度的大小,其實是算法復雜度的無窮大的階數。

也就是說,如果一個算法 A 的復雜度的無窮大階數比另一個算法 B 的無窮大階數小,也就是說

,那么此時 A 的復雜度更小。下面舉幾個例子: ,所以

的算法比

的算法更優

,所以

的算法比

的算法更優

但是如果一個算法的復雜度函數比另一個算法的復雜度函數小,但他倆的無窮大階數一樣,那么其實兩個算法的復雜度是一樣的。這里也有幾個例子: ,2 是常數。所以

的算法與

的算法復雜度一樣

,4 是常數。所以

的算法與

的算法復雜度一樣

好了,我們已經知道如何比較兩個算法復雜度了。現在我們來看看為什么三分不比二分快。

答案很簡單:二分法和三分法的漸進復雜度是一樣的。

二分法的漸進復雜度為

,三分法的漸進復雜度為

,這兩個復雜度都沒有問題。那為什么說這兩個是一樣的呢?

看起來就是比

小,而且算出來也確實小很多啊?

Talk is cheap,讓我們直接來比較一下它們的無窮大階數:

是個常數,因此,兩個函數是同階無窮大。二分法和三分法的漸進復雜度其實是一樣的。

這個結論也可以推廣一下。任意取兩個對數函數

,比較它們的無窮大階數都會得到

,是個常數。因此對數函數的底對于算法的復雜度分析是沒有意義的。

因此,無論是二分法,三分法,四分法,五分法...復雜度都是一樣的,分的越多,代碼反而越復雜,提高你的人腦處理復雜度,不值不值。

那么,這么看來,

是一樣的,

是一樣的。那算法復雜度分析時,常數都不重要嗎?

并不是。

最常見的反例,

顯然復雜度不同。因為

是更低階的無窮大。

當然,大部分人可能不會在

的比較上犯錯誤,但是下面這個比較,錯的人就不少了。

哪個復雜度更大?

很多人以為這兩個復雜度是一樣的,因為常數不在指數位置上,看起來只是不同的常數做了指數操作,而常數一般對算法的復雜度沒有影響。

但是實際上

的無窮大階數比

要小。這兩者復雜度并不一樣。

而有人可能還覺得,就算復雜度不一樣,可能也差不太多吧?都是指數函數,本身復雜度已經很高了啊?

但是實際上并不是這樣。我們可以把

放到一起比較一下。

相對于

,很多人已經認為是增長了太多,不太能接受了。那么

相對于

增長了多少呢?我們其實可以比較一下這兩個“增長”之間的無窮大階數。

可見, 比

差,但是它們之間相差的時間倍數只是在線性增長。而

相對于

,相差的則更多,它們之間相差的時間倍數還是在指數增長!

這是什么概念呢?

如果有一個問題規模為

算法可以用 1 秒解決,那么使用

的算法,你需要 20 秒才能解決。這已經讓大部分人無法接受了。

但是,如果有一個問題規模為

算法可以用 1 秒解決,那么使用

的算法,你需要 3325 秒才能解決!

所以,你現在還覺得,

差不多嗎?

總結

以上是生活随笔為你收集整理的二分检索用途及复杂性_二分查找和三分查找哪个快?算法复杂度与常数无关?复杂度分析的常见误区...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。