淺談大型網(wǎng)站的算法和架構(gòu)
序
上個(gè)月老大給我們講解了"淺談大型網(wǎng)站的算法和架構(gòu)",獲益匪淺。由于篇幅太多(光數(shù)據(jù)結(jié)構(gòu)大概就有20多種),我也沒有辦法一下全部吸收,故我邊理解,邊分章節(jié)與大家分享。
這周我查閱資料,來理解各個(gè)數(shù)據(jù)結(jié)構(gòu)和算法。
推薦幾本個(gè)人感覺不錯(cuò)的書籍:——我把電子書放到http://download.csdn.net/user/rtxbc這里了,需要下載,到這里進(jìn)行下載。
《指針的藝術(shù).蔡明志》——我只看了C語言這一篇。C語言個(gè)人感覺比較難的也就是指針了。
《數(shù)據(jù)結(jié)構(gòu) 使用C語言[朱戰(zhàn)立]》——嚴(yán)蔚敏的也不錯(cuò),可就是里面的很多語法都是抽象語法,無法運(yùn)行。我個(gè)人如果沒有辦法在終端運(yùn)行,很難印象深刻。
《算法導(dǎo)論》
為了學(xué)習(xí)下載的電子書(截個(gè)圖):
算法結(jié)構(gòu)
C語言
介紹
1984年,Pascal語義的***和結(jié)構(gòu)化程序設(shè)計(jì)***,沃斯提出“算法 + 數(shù)據(jù)結(jié)構(gòu) = 程序“,從而獲得當(dāng)年的圖靈獎(jiǎng)。
現(xiàn)今技術(shù)日新月異,互聯(lián)網(wǎng)技術(shù)在不斷的發(fā)展中,從而也翻開了歷史的新篇章,這時(shí)有人提出了“算法 + 架構(gòu) = 互聯(lián)網(wǎng)程序“。
生活在這個(gè)時(shí)代的程序員來說,這又意味著什么呢?
從這篇文章開始,我將與各位淺談大型網(wǎng)站的算法和架構(gòu),今天先了解一下基礎(chǔ)知識(shí),然后我們進(jìn)行逐步過渡。
#p#
查找算法(單機(jī))
1.有個(gè)無序數(shù)組。
2.找7到20之間的數(shù),你的思路是什么?
無怪乎以下兩點(diǎn):
1》冒泡排序
2》二分查找快
3.C代碼實(shí)現(xiàn)
執(zhí)行結(jié)果
#p#
數(shù)組中插入數(shù)據(jù)
數(shù)組問題:插入太慢,得挪數(shù)據(jù)。
請(qǐng)看下面的代碼,
執(zhí)行結(jié)果
試試鏈表
代碼結(jié)構(gòu)
鏈表插入數(shù)據(jù)
鏈表的特點(diǎn)是插入快,查找慢。
代碼實(shí)現(xiàn):
實(shí)現(xiàn)方式
#p#
請(qǐng)看執(zhí)行過程
于是有了二叉樹(Binary Tree)
我們不難發(fā)現(xiàn)上面的兩個(gè)結(jié)構(gòu)(數(shù)組和鏈表)各有弊端。
1》數(shù)組在更新的時(shí)候比較消耗資源,需要挨個(gè)挪動(dòng)后面的元素。
2》而鏈表在查詢的時(shí)候需要從頭挨個(gè)對(duì)比之后選擇出要查詢的內(nèi)容。
綜上我們需要一個(gè)查詢更快,更新更快的結(jié)構(gòu),于是我們有了二叉樹。由于篇幅太長,下一篇繼續(xù)介紹。
原文鏈接:http://www.cnblogs.com/baochuan/archive/2012/09/27/2704994.html