這兩天看了莫隊,對於莫隊演算法感覺實現還是很簡單的,但是時間複雜度的理解好像網上的文章都沒有講的太明白(也可能是我理解能力有問題orz);
莫隊的時間複雜度的貢獻主要來自於l,r指標的移動:
l跨塊轉移的次數o(sqrt(n)),跨塊轉移的總距離為o(n);即不跨塊轉移的次數為o(n-sqrt(n)),每次的查詢的複雜度是o(sqrt(n));
所以l的時間複雜度為o(n)+o(n-sqrt(n))*o(sqrt(n))=o(n*sqrt(n));
r在每一塊內的轉移複雜度為o(n);因為在每塊內的元素的r是無序的;
一共有sqrt(n)塊;
所以r的時間複雜度為o(n*sqrt(n));
所以總的時間複雜度為o(n*sqrt(n));
本人蒟蒻,如果有什麼錯誤之處歡迎大佬批評指正,orz~~~
雜談 莫隊複雜度相關
原理略過 設塊長為 b 易分析得出端點移動次數為 frac ms 若 n,m 同階,取 b sqrt n 最優。但實際上,根據資料生成的方式不同,不同的塊長在效率上也有所不同,但我們這裡暫且討論複雜度上問題,不考慮資料不同帶來的影響。莫隊掌握的經典技巧是複雜度平衡。如果 m,取塊長 frac 移動次...
演算法時間複雜度分析
定義 如果乙個問題的規模是n,解這一問題的某一演算法所需要的時間為t n 它是n的某一函式 t n 稱為這一演算法的 時間複雜性 求解演算法的時間複雜度的具體步驟是 1 找出演算法中的基本語句 演算法中執行次數最多的那條語句就是基本語句,通常是最內層迴圈的迴圈體。2 計算基本語句的執行次數的數量級 ...
演算法分析時間複雜度
對乙個演算法的分析,很多時候我們更關心演算法執行的時間複雜度。演算法的時間複雜度中,我們關心演算法執行的時間上界。即大o階分析方法。時間複雜度的分類 1 沒有迴圈遞迴的基本都是常數階。2 有一層迴圈的就是線性階。for int i 0 i dosth 3 對數階 一般類似如下 while i i i...