1.1 算法
非形式地說,算法就是任何良定義的計算過程记焊,該過程取某個值或值的集合作為輸入并產(chǎn)生某個值或值的集合作為輸出芳杏。
數(shù)據(jù)結(jié)構(gòu)
數(shù)據(jù)結(jié)構(gòu)是一種存儲和組織數(shù)據(jù)的方式,旨在便于訪問和修改抡柿。
1.1-1 給出現(xiàn)實生活中需要排序的一個例子或者現(xiàn)實生活中需要計算凸殼的一個例子
學(xué)生時代學(xué)習(xí)成績的排序是最常見的排序例子
1.1-2除速度外舔琅,在真實環(huán)境中還可能使用哪些其他有關(guān)效率的量度?
程序員代碼的BUG率洲劣、處理一個問題的深度等
1.1-3 選擇一種你以前已知的數(shù)據(jù)結(jié)構(gòu)备蚓,并討論其優(yōu)勢和局限。
就說二分法吧囱稽,優(yōu)勢就是比較簡單郊尝,容易理解。缺點就是太慢战惊。
有這么一個例子流昏,比如從100個數(shù)中查找一個數(shù),另這個數(shù)就是1吞获。這個時候要先查50况凉、25、12衫哥、6茎刚、3、2撤逢、1... ?看吧很慢膛锭。。
1.1-4 前面給出的最短路徑與旅行商問題有哪些相似之處蚊荣?又有哪些不同初狰?
最短路徑問題是不用考慮路途中的目的點,直接到達(dá)終點互例。而旅行商問題是要從整體的考慮這個系統(tǒng)中完成以后最短的路徑奢入。
1.2 作為一種技術(shù)的算法?
效率問題:
本書舉了一個例子,就是插入排序和歸并排序媳叨。在這里了解到插入排序所花的時間大致為C*N*N腥光,C是不依賴于N的常數(shù)。所花費的時間大致和N*N成正比糊秆。
而歸并排序所花的時間大致為C*N*lgN
基于數(shù)學(xué)知識你可能忘了比如 lgN是啥 如圖:
嗯武福,就是這樣,總的來說插入排序比歸并排序慢的很多痘番。
即使是最優(yōu)秀的計算機(jī)配上了插入排序捉片、一般的計算機(jī)配上了歸并排序平痰,那么在數(shù)量級相當(dāng)龐大的時候,一般的計算機(jī)也比最優(yōu)秀的計算機(jī)快的許多伍纫。
1.2-1? 給出在應(yīng)用層需要算法內(nèi)容的應(yīng)用的一個例子宗雇,并討論涉及算法的功能。
百度地圖的導(dǎo)航啊莹规、里面用到的算法那就真的多了赔蒲。。 什么最快路線啊 最短路徑啊 走不走高速啊 等等等等访惜。嘹履。
1.2-2? 假設(shè)我們正比較插入與歸并排序在相同機(jī)器上的實現(xiàn)。對規(guī)模為n的輸入债热,插入排序運行8n^2步砾嫉,而歸并排序運行64nlgn步。問對哪些n值窒篱,插入排序優(yōu)于歸并焕刮?
在算法導(dǎo)論中l(wèi)gN=log2N。
經(jīng)計算墙杯,8n^2=64nlgn配并,在2<N<64的時候,插入排序比遞歸排序要快高镐。
1.2-3對于一個運行時間為100n*n的算法溉旋,要使其在同一臺機(jī)器上,在比一個運行時間為2^n的算法運行的很快嫉髓,n的最小值是多少观腊?
f(n) = 100n^2
g(n) = 2^n
n=14, f=19600, g=16384 f > g
n =15, f=22500, g=32768 f < g
n最小為15