算法の 前戲

廢話時(shí)間:


算法實(shí)際上是高于語(yǔ)言的。

所以我是第一N肌0┭埂嫡霞!

比如說(shuō)你的列表.sort 它里面其實(shí)就是實(shí)現(xiàn)了一種算法衙荐。

算法:一個(gè)計(jì)算過(guò)程捞挥,解決問(wèn)題的方法。

程序 = 數(shù)據(jù)結(jié)構(gòu) + 算法忧吟。

一:時(shí)間復(fù)雜度:用來(lái)評(píng)估算法運(yùn)行效率(時(shí)間)的一個(gè)式子砌函。


光年是距離。

一般來(lái)說(shuō):時(shí)間復(fù)雜度高的算法比復(fù)雜度低的算法慢溜族。

? 問(wèn)題規(guī)亩锟。基本上差不多一樣的時(shí)候。即n

? 與機(jī)器有關(guān)煌抒。

? 時(shí)間復(fù)雜度是獨(dú)立于機(jī)器的仍劈。

常見(jiàn)的時(shí)間復(fù)雜度:


o(1) < o(logn) < o(n) < o(nlogn) < o(n的平方) < o(n平方logn) < o(n的三次方)

如何簡(jiǎn)單判斷時(shí)間復(fù)雜度?


最好是根據(jù)運(yùn)行過(guò)程來(lái)估計(jì)

找到代表問(wèn)題規(guī)模的n  魑魅魍魎chi‘mei’wang‘liang

如何一眼判斷時(shí)間復(fù)雜度寡壮?

是否有循環(huán)減半的過(guò)程 -> o(logn)

幾層循環(huán)就是n的幾次方的復(fù)雜度

二:空間復(fù)雜度


用來(lái)評(píng)估算法內(nèi)存占用大小的一個(gè)式子

  • 空間換時(shí)間

    
    例如:如果你想讓你的算法快點(diǎn)贩疙,就需要更多的緩存。
    
    

三:基本算法

算法里面重要的思想


遞歸的兩個(gè)特點(diǎn):

- 調(diào)用自身

- 結(jié)束條件

def qq(n):

    if n == 0 :

        print('我的小可愛(ài)',end='')

    else:

        print('抱著',end='')

        qq(n-1)

        print('的我',end='')

qq(5)

# 抱著抱著抱著抱著抱著我的小可愛(ài)的我的我的我的我的我

def fun(x):

    if x > 0:

        print(x)

        fun(x-1)

def func(x):

    if x > 0:

        func(x-1)

3.0 漢諾塔


當(dāng)n個(gè)盤(pán)子時(shí)况既,把n-1看做一部分这溅。

1. 把n-1個(gè)圓盤(pán)從a經(jīng)過(guò)c移動(dòng)到b

    2. 把第n個(gè)圓盤(pán)從a移動(dòng)到c

    3. 把n-1個(gè)圓盤(pán)從b經(jīng)過(guò)a移動(dòng)到c


t = 0

def hanoi(n,a,b,c):

    global t

    if n > 0:

        hanoi(n-1,a,c,b)

        t +=1

        print(':moving from %s --> %s.'%(a,c))

        hanoi(n-1,b,a,c)

hanoi(5,'a','b','c')

print('本次總共運(yùn)行 %s 次'%t)


漢諾塔移動(dòng)次數(shù)的遞推式:h(x) = 2h(x-1)+1

前部分算法分為兩部分:查找和排序


3.1 列表查找:從列表中查找指定元素

- 輸入:列表、待查找元素

- 輸出:元素下標(biāo)或未查找到元素

3.2 順序查找

- 從列表第一個(gè)元素開(kāi)始棒仍,順序進(jìn)行搜索悲靴,直到找到為止。

3.3 二分查找

- 從有序列表的候選區(qū)data[0:n]開(kāi)始莫其,通過(guò)對(duì)待查找的值和候選區(qū)中間值的比較癞尚,可以使候選區(qū)減少一半。

3.1 二分查找

  • 使用二分查找來(lái)找3

    • 1榜配,2否纬,3吕晌,4蛋褥,5,6睛驳,7烙心,8,9

    • Low high

      • ? mid
    • 如果high < low 乏沸,說(shuō)明你要找的值不存在淫茵。


def erfen_search(li,val):

    low = 0

    high= len(li) - 1

    while low<=high:

        mid = (low+high) // 2

        if li[mid] == val:

            return  mid

        elif li[mid] < val:

            low = mid + 1

        else:

            high = mid - 1

a = erfen_search([1,2,3,4.123,123,12,3,12,3,12,3,21,3,213,21,321,3,213,21,321,3,21,4,3,543,53,45,435,342,5],435)

# 上面這個(gè)方法有問(wèn)題,不信你試蹬跃。

# 遞歸版本二分查找

def bin_search_rec(data_set,value,low,high):

    if low <= high:

        mid = (low + high) // 2

        if data_set[mid] == value:

            return mid

        elif data_set[mid] < value:

            low = mid + 1

            return bin_search_rec(data_set,value,low,high)

        else:

            high = mid - 1

            return bin_search_rec(data_set,value,low,high)

    else:

        return

列表排序


- 列表排序

  - 將無(wú)序列表變?yōu)橛行蛄斜怼?.sort

- 應(yīng)用場(chǎng)景

  - 各種榜單

  - 各種表格

  - 給二分查找用

  - 給其他算法用

輸入:無(wú)序列表

輸出:有序列表

排序Low B三人組

- 冒泡排序

- 插入排序

- 選擇排序

算法關(guān)鍵點(diǎn):

- 有序區(qū)

- 無(wú)序區(qū)

升序與降序

排序兇兇組:

- 快排

  - 思路:

    - 取一個(gè)元素p(第一個(gè)元素)匙瘪,使元素p歸位;

    - 列表被p分成兩部分,左邊逗比p小丹喻,右邊逗比p大‘

    - 遞歸完成排序薄货。  遞歸終止條件:列表剩一個(gè)元素。

  - 算法關(guān)鍵點(diǎn):1. 歸位  2. 遞歸

- 堆排

- 歸并排序

沒(méi)什么人用的排序:

- 基數(shù)排序

- 希爾排序

- 桶排序

總覽:

執(zhí)行次數(shù)函數(shù) 非正式術(shù)語(yǔ)
12 O(1) 常數(shù)階
2n+3 O(n) 線性階
3n2+2n+1 O(n2) 平方階
5log2n + 20 O(logn) 對(duì)數(shù)階
2n + 3nlog2n + 19 O(nlogn) nlogn階
6n3 + 2n2 + 3n +4 O(n3) 立方階
2" O(2") 指數(shù)階
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末碍论,一起剝皮案震驚了整個(gè)濱河市谅猾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鳍悠,老刑警劉巖税娜,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異藏研,居然都是意外死亡敬矩,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)遥倦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)谤绳,“玉大人,你說(shuō)我怎么就攤上這事袒哥∷跎福” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵堡称,是天一觀的道長(zhǎng)瞎抛。 經(jīng)常有香客問(wèn)我,道長(zhǎng)却紧,這世上最難降的妖魔是什么桐臊? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮晓殊,結(jié)果婚禮上断凶,老公的妹妹穿的比我還像新娘。我一直安慰自己巫俺,他們只是感情好认烁,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著介汹,像睡著了一般却嗡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嘹承,一...
    開(kāi)封第一講書(shū)人閱讀 51,258評(píng)論 1 300
  • 那天窗价,我揣著相機(jī)與錄音,去河邊找鬼叹卷。 笑死撼港,一個(gè)胖子當(dāng)著我的面吹牛坪它,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播帝牡,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼哟楷,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了否灾?” 一聲冷哼從身側(cè)響起卖擅,我...
    開(kāi)封第一講書(shū)人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎墨技,沒(méi)想到半個(gè)月后惩阶,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡扣汪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年断楷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片崭别。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡冬筒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出茅主,到底是詐尸還是另有隱情舞痰,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布诀姚,位于F島的核電站响牛,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏赫段。R本人自食惡果不足惜呀打,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望糯笙。 院中可真熱鬧贬丛,春花似錦、人聲如沸给涕。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)稠炬。三九已至焕阿,卻和暖如春咪啡,著一層夾襖步出監(jiān)牢的瞬間首启,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工撤摸, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留毅桃,地道東北人褒纲。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像钥飞,于是被迫代替她去往敵國(guó)和親莺掠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 算法復(fù)雜度 時(shí)間復(fù)雜度 空間復(fù)雜度 什么是時(shí)間復(fù)雜度 算法執(zhí)行時(shí)間需通過(guò)依據(jù)該算法編制的程序在計(jì)算機(jī)上運(yùn)行時(shí)所消耗...
    KODIE閱讀 3,256評(píng)論 0 9
  • 前言 上一篇《數(shù)據(jù)結(jié)構(gòu)和算法》中我介紹了數(shù)據(jù)結(jié)構(gòu)的基本概念读宙,也介紹了數(shù)據(jù)結(jié)構(gòu)一般可以分為邏輯結(jié)構(gòu)和物理結(jié)構(gòu)彻秆。邏輯結(jié)...
    VV木公子閱讀 4,662評(píng)論 4 41
  • 現(xiàn)插播一條新聞:今天下午兩點(diǎn)鐘唇兑,警方接到報(bào)警,位于長(zhǎng)江路馨家園小區(qū)二樓住戶李先生發(fā)現(xiàn)樓上有滲水情況桦锄,且水中夾雜著血...
    菌菇sama閱讀 438評(píng)論 6 7