演算法中對數量級的一點理解

鮑康霖發表於2019-03-03

前言

最近開始學習演算法知識,僅記錄自己對演算法學習感悟,同時也是方便自己以後複習

1.為什麼我們需要了解數量級

我們需要去精確描述一組資料的時候,我們通常使用具體的資料記錄,但是我們去理解一組資料的時候,我們往往需要使用模糊的描述,模糊數量的理解,數量級

2.數量級

數量級是指數量的尺度或大小的級別,每個級別之間通常有固定的比例,如10,2,1000,1024,e(尤拉數),大約等於 2.71828182846 的超越數,即自然對數的底)。

在現實生活中,用的較多的是10,但是在演算法世界,我們可能更多以2,1024為比例

需要特別注意的是:數量級應用範圍必須是正數或自然數!儘管負數也可以計算數量級,沒有實際的意義。比如:-10和-1000這兩個數從純數學角度說相差100倍,不過不能說這兩個數相差2個數量級。

3.舉例

  • 比如說,1.5 * 10^3 = 1500 我們稱它數量級為3
  • 淘寶雙11去年的訂單量是8.7億,那麼我們說它的訂單量是億級的
  • 阿里的市值是4700億 百度的市值是700多億, 那麼我們會說,阿里的市值比百度搞了一個數量級
  • 蘋果的市值最近超了萬億了,那麼,我們會說蘋果的數量級是萬億了
  • 顯示器的重新整理頻率是60hz,那麼相當於16.66ms重新整理一次,那麼我們前端在js計算時,演算法執行速度儘量要在毫秒級完成,這樣繪製網頁的時候才不會出現卡頓.那麼設計前端框架的時候,使用的渲染演算法,就可以有一個量級的規劃了

3.演算法就是輸入到輸出的對映

以累加為例
function sum(arr){
return arr.reduce((a,b)=>a+b,0)
}
let sumNum = sum([1,2,3]);
這裡的arr就是輸入 sumNum就是輸出 在這裡,輸入是陣列,輸出是數字

那麼在這個例子中 輸入規模是arr.length 隨著輸入的arr.length越大,那麼sum(arr)執行的時間將會越長.

4.演算法設計的客觀角度

  • 還是上面的例子,淘寶天貓雙十一的訂單數是8.7億,由於螢幕的大螢幕重新整理時間的限制,這個數量級的資料需要在毫秒級的時間內完成
    那麼,我們設計淘寶天貓雙十一資料訂單處理的演算法,就需要將十億輸入規模的資料在毫秒級的時間內計算出來

  • 知乎的使用者,目前官方公佈的資料是1.8億(客戶增長速度是個緩慢的過程,對應的演算法,生命週期會比較長),他們內部的使用者肖像繪製要求是每小時一次,那麼他們設計使用者肖像演算法的時候,
    就需要滿足10億級輸入規模(一般來說,演算法輸入規模的數量級比預估需要處理的數量級大一個數量級基本能夠滿足需求)在小時級內完成(當然實際的演算法不會是這樣,如果程式執行時間是這
    麼慢的話,那麼cpu就不用幹別的了們一直在處理這一個資料計算))

  • 前端設計框架的時候,一個複雜頁面通常只有幾百個dom節點,多也一般不會超過一萬個資料節點,
    react的dom-diff演算法就必須滿足10萬級的dom節點對比,在ms級的時間內完成,這樣,在頁面重繪的時候
    網頁不會產生卡頓

小節

  • 瞭解數量級的概念,可以有利於我們對程式設計有一個更好的把控
  • 知識有限,也只是根據最近在學的東西的部分總結,哪裡有不正確的地方歡迎指出.

題外話

作為一個程式設計師,可能很多時候,有些演算法知識在工作中可能一輩子都用不到,但這不是我們不去學他的理由,演算法和資料結構都是半衰期很長的技術,學習他,會讓你在程式設計的道路上走的更遠.

特別是非計算機專業科班出身的同學,瞭解一些計算機基礎知識,可以讓我們的變成之路走的更遠.

如果本篇文章能夠給您帶來些許幫助,請點個贊支援下.謝謝

相關文章