左神初級算法課程第一講筆記-歸并排序和遞歸

時間復(fù)雜度

常數(shù)時間的操作:一個操作和數(shù)據(jù)量沒關(guān)系 ,每次都是固定時間內(nèi)完成的操作,叫做常數(shù)操作

時間復(fù)雜度:算法流程中常數(shù)操作數(shù)量的指標(biāo),在常數(shù)操作數(shù)量的表達(dá)式中,只要高階項不要低階項,去掉高階項的系數(shù),即O(f(N))

評價算法:先看時間復(fù)雜度指標(biāo),然后看實際運行時間,即常數(shù)項時間

時間復(fù)雜度舉例:

舉例

以上算法復(fù)雜度以此為O(MN)、O(M*logN)、O(M*logM)+O(M+N)

二分:不斷對半分

外排:兩個都有序,兩個指針誰小移動誰

對數(shù)器

對數(shù)器的概念

準(zhǔn)備二叉樹,數(shù)組的隨機(jī)樣本發(fā)生器,以及對數(shù)器模板(甚至堆的模板,排序的模板)

冒泡排序(一般不用了)

每次冒泡出來一個最大的放后面,時間復(fù)雜度O(N^2),額外空間復(fù)雜度O(1),因為只需要額外幾個變量就可以完成排序,如果是額外申請一個數(shù)組那么額外空間復(fù)雜度為O(N)

選擇排序(一般不用了)

每次選最小的放前面,時間復(fù)雜度O(N^2),額外空間復(fù)雜度O(1)

插入排序(類似撲克牌插牌)

先排0-1,再排0-2,...新來的數(shù)選合適的位置插入,直到全部排完,此時和數(shù)據(jù)狀況有關(guān)系

最好情況:有序情況,O(N)

最差情況:逆序情況,O(N^2)

一律按最差的情況估計算法,所以時間復(fù)雜度O(N^2),額外空間復(fù)雜度O(1)

遞歸

以數(shù)組中找最大值為例

例子

遞歸理解:系統(tǒng)幫你壓棧,所以任何遞歸行為都可以改為非遞歸

壓棧過程

估計復(fù)雜度的通式:T(N)=aT(N/b)+O(N^d)

通式

滿足上述通式有直接得到時間復(fù)雜度的結(jié)論:

時間復(fù)雜度的結(jié)論

歸并排序

先左側(cè)排序,再右側(cè)排序,最后用外排的方式統(tǒng)一(誰小就用誰并移動指針),T(N)=2T(N/2)+O(N)

時間復(fù)雜度O(N*logN),額外空間復(fù)雜度O(N)

小和問題和逆序?qū)栴}

tips

①這樣寫防止溢出

②位運算比算術(shù)運算快

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容