大話代碼架構
⑴ 大型網路游戲的架構 是資料庫嗎
你說的有點幼制,因為製做游戲是個超復雜的工程,決不是你想像的那樣減單,我恐怕回達完你,5,6天都不見得說完,而且做大網游1個人是不可能的,在是天材也不可能,你想想,就拿QQ聊天說吧,在游戲中,1個玩家向另一玩家說話時,說的那話須要被你設的數劇過率,然後在卻認,光著一個程序,你要做1-2個月,因為我是一個游戲工司經理,你在想想畫面,音樂,怪。。。。。。太龐大了,你要真想知道去買本書最好,你要不是專業的話,好多細節你都不能理解,我跟你說不清,反正就是特龐大,一個很拉級很拉級,都快接進小游戲的網游,也要9-12月,你要不信去書中看看,(程序:精通C
C++等程序語言
美工:3D建模,貼圖,圖像渲染等
策劃:游戲情節(NPC對話),人物職業設定,數值設定等
你有家底嗎??有就好辦:
「軟體、流程、團隊、時間……」
不是一開始就要潑樓主冷水,只是想讓你有個大致的概念。
當年丁磊推出大話的時候,是號稱200人的策劃團隊歷時兩年的作品。200人或許是有水分了,但是兩年是一定不會少了的。想當年老徐離開網易的時候,帶著夢幻西遊的游戲引擎自己跑去另外弄一個游戲,在不用再設計引擎的情況下,光策劃建模就用了差不多一年的時間。
這個得有心理准備了。
軟體:有兩部分。
1.編寫游戲引擎、建模:需要熟練掌握C/C++、Microsoft Develop Studio開發環境、使用SDK或者MFC、DirectX/OpenGL、SQL編程、SQLServer或Oracle資料庫配置。
2.策劃、美工、音效:MAYA、3DMAX 、PS(音效製作方面不熟,這方面無法提供)。
流程:策劃——引擎——建模——美工——測試。
團隊:首先要組成一個由各功能小組核心構成的策劃組,負責構思整個游戲的內容架構。包括故事大綱,游戲風格,人物造型,操作模式,任務模式,裝備模式等等,以及程序編寫、美工貼圖能否實現等等,資金預算能否維持等等。
然後籌建各功能小組:主編程組,負責游戲引擎。建模組,負責編寫一個完整的世界,各種人物、怪等。美工組,負責包裝游戲。測試組,設置若干組伺服器,對游戲進行測試。
保守估計,總人數30-50是最小的配置了。
最佳答案
「軟體、流程、團隊、時間……」
不是一開始就要潑樓主冷水,只是想讓你有個大致的概念。
當年丁磊推出大話的時候,是號稱200人的策劃團隊歷時兩年的作品。200人或許是有水分了,但是兩年是一定不會少了的。想當年老徐離開網易的時候,帶著夢幻西遊的游戲引擎自己跑去另外弄一個游戲,在不用再設計引擎的情況下,光策劃建模就用了差不多一年的時間。
這個得有心理准備了。
軟體:有兩部分。
1.編寫游戲引擎、建模:需要熟練掌握C/C++、Microsoft Develop Studio開發環境、使用SDK或者MFC、DirectX/OpenGL、SQL編程、SQLServer或Oracle資料庫配置。
2.策劃、美工、音效:MAYA、3DMAX 、PS(音效製作方面不熟,這方面無法提供)。
流程:策劃——引擎——建模——美工——測試。
團隊:首先要組成一個由各功能小組核心構成的策劃組,負責構思整個游戲的內容架構。包括故事大綱,游戲風格,人物造型,操作模式,任務模式,裝備模式等等,以及程序編寫、美工貼圖能否實現等等,資金預算能否維持等等。
然後籌建各功能小組:主編程組,負責游戲引擎。建模組,負責編寫一個完整的世界,各種人物、怪等。美工組,負責包裝游戲。測試組,設置若干組伺服器,對游戲進行測試。
這其中涉及到C++等語言類
PS 3D 瑪雅 等圖象、動畫處理軟體
沒有人可以在極短時間內掌握這些技術的 現在一般設計者都是專攻某一門,然後由高等設計師進行後期語言處理 將他們融合在一起
保守估計,總人數30-50是最小的配置了。
首先,你需要一個工作團隊,當然了,游戲的主闖團隊你可以一個人來承擔(如游戲世界觀的設計,游戲中人物的設計:包括都有哪些種族,什麼職業,拿什麼武器等等。還有什麼任務的設計),但是你需要美工來畫出你所想像的那些東西~~
然後你需要程序員為你編寫游戲代碼,你需要更多的人來設計游戲的平衡性(比如多少級什麼什麼經驗升級,做任務得多少經驗,包括技能的傷害和屬性的關系:比如攻擊多少打防禦多少的人掉多少血。),然後需要有人來設計游戲的怪物、BOSS以及其他什麼的。
設計完以後,需要找音樂師來為游戲配樂,需要有人來為人物的動作(比如挨打,攻擊,施法的聲音)。這些弄完以後,需要找測試員來進行測試,測試游戲最終的平衡度,和尋找游戲中因代碼的設計而存在的一些BUG。
我說的只是主要的幾個點,當然還有其他許多事情我沒有說到,因為畢竟我也不是專業做這玩意的~~其實做個游戲挺難的,設計世界觀什麼的都很容易,但要把游戲平衡度做到非常完美卻是十分困難的,中國沒有幾個做的出來的,國外也沒有多少能做出來的~~
)這只是一個程序,不說了,去買本書最好
⑵ 大話數據結構里的代碼怎麼都編譯通不過,他說是c90標准,visual2010是支持c90的呀
你有兩個左括弧 只有一個右括弧
⑶ 初級C++程序員看完設計模式(《大話設計模式》)之後看什麼書對自己的發展比較好呢希望說的詳細點,重謝
朋友,看完了《大話設計模式》並不能說明任何問題,能否真正將設計模式運用於你的工作和項目當中才是你應該關注的重點。既然你已經看完了入門級的《大話設計模式》,那麼我推薦你看一下進階級的設計模式類書——《Head First Design Patterns》。等你看完這本書,我再推薦一本中高級的書,最後還有一本高級的書。不要急,我相信你看到一定的程度就知道自己的方向了。
⑷ 求大話數據結構上的冒泡排序代碼的解釋 第一個循環限制條件不太懂 求哪位大俠解釋一下!感激不盡!
樓主看到這句話
if(l->r[j]>l->r[j+1]) /* 若前者大於後者 */
看看兩個括弧裡面是什麼, j 和 j+1 , 吧
而 i<l->length, i 又賦給了 j, 則 j + 1 不就是最後一個元素了嗎
有 n 個元素, 最多隻要循環 n - 1 次就能排好, 不信拿個最壞的例子試試
比如有 三個元素, 1, 2, 3, length == 3
j 的變數只到了 2, 那麼 j + 1 就到 3 啦,
⑸ 求助大話數據結構中一段中序遍歷線索化二叉樹的源代碼
這個一開始我也沒看明白,而且我還馬虎的看錯了,看到你的問題我才發現自己看錯了汗,但是後來仔細推了一下代碼,在H點返回的時候 pre的賦值操作是沒有意義。此時的pre 就只是一個全局定義的結點變數而已。當H結點的函數遞歸返回後,此時的pre == H結點,然後執行的是D結點函數的遞歸,當走到
if(!p->rchild)
{
pre->Rtag=Thread;
pre->rchild=p;
}
這里的時候,正好把,H結點的右指針指向了D。然後在執行 D->i 結點的函數,這個時候就通順了,不知道你明白了沒有,你可以自己在腦海里想一下遞歸的過程,先不用考慮第一次H結點的賦值。
⑹ 給我推薦一下比較好的數據結構書吧。我教科書是清華嚴蔚敏的。我又買了本《大話數據結構》
有了這兩本還不夠啊?能把嚴蔚敏的那本吃透,說明你已經上一個檔次了。用偽代碼,是為了更好的講述演算法思想,而且,這些偽代碼很容易轉為c語言,如果你覺得沒法看懂,說明你的C語言基礎不夠扎實。如果還是有編程實現困難,那就買這本《數據結構演算法解析》(高一凡著,清華大學出版社)做補充教材,這本書把嚴蔚敏的《數據結構》所有演算法用真正的C語言實現一遍。但還是應該以嚴蔚敏的書為教材學,因為嚴蔚敏的這本書講的非常嚴謹,內容豐富,是國內本土最經典的一本數據結構教材。
⑺ 大話數據結構與[數據結構(C語言版)].嚴蔚敏_吳偉民哪個適合用來考研復習
一般都是用數據結構C語言版的,考研是個很嚴肅的問題,怎麼能拿來大話呢,更不能用有錯誤源代碼的,不要說很多,就是有一兩個地方,考試考到了你就中招了,所以選書還是的和廣大研友保持一致吧!
⑻ 有沒有數據結構書是用C語言編寫的,不是用偽代碼寫的
你可以上看看胡學鋼(合肥工業大學出版的)的那版全都是用c語言寫的,而且都是能在機上實現的,我們上的就是那本書,對初學者很好,嚴蔚敏的那版對初學者來說太難了
⑼ 大話數據結構的作品目錄
第1章數據結構緒論 1
1.1開場白 2
如果你交給某人一個程序,你將折磨他一整天;如果你教某人如何編寫程序,你將折磨他一輩子。
1.2你數據結構怎麼學的? 3
他完成開發並測試通過後,得意地提交了代碼。項目經理看完代碼後拍著桌子對他說:「你數據結構是怎麼學的?」
1.3數據結構起源 4
1.4基本概念和術語 5
正所謂「巧婦難為無米之炊」,再強大的計算機,也要有「米」下鍋才可以幹活,否則就是一堆破銅爛鐵。這個「米」就是數據。
1.4.1數據 5
1.4.2數據元素 5
1.4.3數據項 6
1.4.4數據對象 6
1.4.5數據結構 6
1.5邏輯結構與物理結構 7
1.5.1邏輯結構 7
1.5.2物理結構 9
1.6抽象數據類型 11
大家都需要房子住,但顯然沒錢考慮大房子是沒有意義的。於是商品房就出現了各種各樣的戶型,有幾百平米的別墅,也有僅兩平米的膠囊公寓……
1.6.1數據類型 11
.1.6.2抽象數據類型 12
1.7總結回顧 14
1.8結尾語 15
最終的結果一定是,你對著別人很牛的說「數據結構——就那麼回事。」
第2章演算法 17
2.1開場白 18
2.2數據結構與演算法關系 18
計算機界的前輩們,是一幫很牛很牛的人,他們使得很多看似沒法解決或者很難解決的問題,變得如此美妙和神奇。
2.3兩種演算法的比較 19
高斯在上小學的一天,老師要求每個學生都計算1+2+…+100的結果,誰先算出來誰先回家……
2.4演算法定義 20
現實世界中的演算法千變萬化,沒有通用演算法可以解決所有問題。甚至一個小問題,某個解決此類問題很優秀的演算法卻未必就適合它。
2.5演算法的特性 21
2.5.1輸入輸出 21
2.5.2有窮性 21
2.5.3確定性 21
2.5.4可行性 21
2.6演算法設計的要求 22
求100個人的高考成績平均分與求全省所有考生的成績平均分在佔用時間和內存存儲上有非常大的差異,我們自然追求高效率和低存儲的演算法來解決問題。
2.6.1正確性 22
2.6.2可讀性 23
2.6.3健壯性 23
2.6.4時間效率高和存儲量低 23
2.7演算法效率的度量方法 24
隨著n值越來越大,它們在時間效率上的差異也就越來越大。好比有些人每天都在學習,而另一些人,打打游戲、睡睡大覺,畢業後前者名企爭著要,後者求職處處無門。
2.7.1事後統計方法 24
2.7.2事前分析估算方法 25
2.8函數的漸近增長 27
2.9演算法時間復雜度 29
理解大o推導不算難,難的其實是對數列的一些相關運算,這考察的更多的是數學知識和能力。
2.9.1演算法時間復雜度定義 29
2.9.2推導大o階方法 30
2.9.3常數階 30
2.9.4線性階 31
2.9.5對數階 32
2.9.6平方階 32
2.10常見的時間復雜度 35
有些時候,告訴你某些東西不可以去嘗試,也是一種知識的傳遞。總不能非要去被毒蛇咬一口才知道蛇不可以去招惹吧。
2.11最壞情況與平均情況 35
2.12演算法空間復雜度 36
事先建立一個有2050大的數組,然後把所有年份按下標數字對應,如果是閏年,此數組項的值就是1,如果不是就是0。這樣,所謂的判斷某一年是否是閏年就變成了查找這個數組的某一項的值是多少的問題。
2.13總結回顧 37
2.14結尾語 38
愚公移山固然可敬,但發明炸葯和推土機,可能更加實在和聰明。
第3章線性表 41
3.1開場白 42
門外家長都擠在大門口與門里的小孩子的井然有序,形成了鮮明對比。哎,有時大人的所作所為,其實還不如孩子。
3.2線性表的定義 42
3.3線性表的抽象數據類型 45
有時我們想知道某個小朋友(比如麥兜)是否是班級的同學,老師會告訴我說,沒有,麥兜是在春田花花幼兒園里。這種查找某個元素是否存在的操作很常用。
3.4線性表的順序存儲結構 47
他每次一吃完早飯就沖著去了圖書館,挑一個好地兒,把他書包里的書,一本一本的按座位放好,長長一排,九個座硬是被他佔了。
3.4.1順序存儲定義 47
3.4.2順序存儲方式 47
3.4.3數據長度與線性表長度區別 48
3.4.4地址計算方法 49
3.5順序存儲結構的插入與刪除 50
春運時去買火車票,大家都排隊排著好好的,這時來了一個美女:「可否讓我排在你前面?」這可不得了,後面的人像蠕蟲一樣,全部都得退後一步。
3.5.1獲得元素操作 50
3.5.2插入操作 51
3.5.3刪除操作 52
3.5.4線性表順序存儲結構的優缺點 54
3.6線性表的鏈式存儲結構 55
反正也是要讓相鄰元素間留有足夠餘地,那乾脆所有元素都不要考慮相鄰位置了,哪有空位就到哪裡。而只是讓每個元素知道它下一個元素的位置在哪裡。
3.6.1順序存儲結構不足的解決
辦法 55
3.6.2線性表鏈式存儲結構定義 56
3.6.3頭指針與頭結點的異同 58
3.6.4線性表鏈式存儲結構代碼描述 58
3.7單鏈表的讀取 60
3.8單鏈表的插入與刪除 61
本來是爸爸左牽著媽媽的手、右牽著寶寶的手在馬路邊散步。突然迎面走來一美女,爸爸失神般地望著,此情景被媽媽逮個正著,於是扯開父子倆,拉起寶寶的左手就快步朝前走去。
3.8.1單鏈表的插入 61
3.8.2單鏈表的刪除 64
3.9單鏈表的整表創建 66
3.10單鏈表的整表刪除 69
3.11單鏈表結構與順序存儲結構優缺點 70
3.12靜態鏈表 71
對於一些語言,如basic、fortran等早期的編程高級語言,由於沒有指針,這鏈表結構,按照前面我們的講法,它就沒法實現了。怎麼辦呢?
3.12.1靜態鏈表的插入操作 73
3.12.2靜態鏈表的刪除操作 75
3.12.3靜態鏈表優缺點 77
3.13循環鏈表 78
這個輪回的思想很有意思。它強調了不管你今生是窮是富,如果持續行善積德,下輩子就會好過,反之就會遭到報應。
3.14雙向鏈表 81
就像每個人的人生一樣,欲收獲就得付代價。雙向鏈表既然是比單鏈表多了如可以反向遍歷查找等的數據結構,那麼也就需要付出一些小的代價。
3.15總結回顧 84
3.16結尾語 85
如果你覺得上學讀書是受罪,假設你可以活到80歲,其實你最多也就吃了20年苦。用人生四分之一的時間來換取其餘時間的幸福生活,這點苦不算啥。
第4章棧與隊列 87
4.1開場白 88
想想看,在你准備用槍的時候,突然這手槍明明有子彈卻打不出來,這不是要命嗎。
4.2棧的定義 89
類似的很多軟體,比如word、photoshop等,都有撤消(undo)的操作,也是用棧這種思想方式來實現的。
4.2.1棧的定義 89
4.2.2進棧出棧變化形式 90
4.3棧的抽象數據類型 91
4.4棧的順序存儲結構及實現 92
4.4.1棧的順序存儲結構 92
4.4.2棧的順序存儲結構進棧操作 93
4.4.3棧的順序存儲結構出棧操作 94
4.5兩棧共享空間 94
兩個大學室友畢業同時到北京工作,他們都希望租房時能找到獨自住的一室戶或一室一廳,可找來找去發現,實在是承受不起。
4.6棧的鏈式存儲結構及實現 97
4.6.1棧的鏈式存儲結構 97
4.6.2棧的鏈式存儲結構進棧操作 98
4.6.3棧的鏈式存儲結構出棧操作 99
4.7棧的作用 100
4.8棧的應用——遞歸 100
當你往鏡子前面一站,鏡子裡面就有一個你的像。但你試過兩面鏡子一起照嗎?如果a、b兩面鏡子相互面對面放著,你往中間一站,嘿,兩面鏡子里都有你的千百個「化身」。
4.8.1斐波那契數列實現 101
4.8.2遞歸定義 103
4.9棧的應用——四則運算表達式求值 104
4.9.1後綴(逆波蘭)表示法定義 104
4.9.2後綴表達式計算結果 106
4.9.3中綴表達式轉後綴表達式 108
4.10隊列的定義 111
電腦有時會處於疑似死機的狀態。就當你失去耐心,打算了reset時。突然它像酒醒了一樣,把你剛才點擊的所有操作全部都按順序執行了一遍。
4.11隊列的抽象數據類型 112
4.12循環隊列 113
你上了公交車發現前排有兩個空座位,而後排所有座位都已經坐滿,你會怎麼做?立馬下車,並對自己說,後面沒座了,我等下一輛?沒這么笨的人,前面有座位,當然也是可以坐的。
4.12.1隊列順序存儲的不足 112
4.12.2循環隊列定義 114
4.13隊列的鏈式存儲結構及實現 117
4.13.1隊列鏈式存儲結構入隊操作118
4.13.2隊列鏈式存儲結構出隊操作 119
4.14總結回顧 120
4.15結尾語 121
人生,需要有隊列精神的體現。南極到北極,不過是南緯90度到北緯90度的隊列,如果你中途猶豫,臨時轉向,也許你就只能和企鵝相伴永遠。可事實上,無論哪個方向,只要你堅持到底,你都可以到達終點。
第5章串 123
5.1開場白 124
「枯眼望遙山隔水,往來曾見幾心知?壺空怕酌一杯酒,筆下難成和韻詩。途路阻人離別久,訊音無雁寄回遲。孤燈夜守長寥寂,夫憶妻兮父憶兒。」……可再仔細一讀發現,這首詩竟然可以倒過來讀。
5.2串的定義 124
我所提到的「over」、「end」、「lie」其實就是「lover」、「friend」、「believe」這些單詞字元串的子串。
5.3串的比較 126
5.4串的抽象數據類型 127
5.5串的存儲結構 128
感情上發生了問題,為了向女友解釋一下,我准備發一條簡訊,一共打了75個字。最後八個字是「我恨你是不可能的」,點發送。後來得知對方收到的,只有70個字,簡訊結尾是「……我恨你」。
5.5.1串的順序存儲結構 129
5.5.2串的鏈式存儲結構 131
5.6樸素的模式匹配演算法 131
主串為s=」」,而要匹配的子串為t=」0000000001」,……在匹配時,每次都得將t中字元循環到最後一位才發現,哦,原來它們是不匹配的。
5.7kmp模式匹配演算法 135
很多年前我們的科學家覺得像這種有多個0和1重復字元的字元串,卻需要挨個遍歷的演算法,是非常糟糕的事情。
5.7.1kmp模式匹配演算法原理 135
5.7.2next數組值推導 139
5.7.3kmp模式匹配演算法實現 141
5.7.4kmp模式匹配演算法改進 142
5.7.5nextval數組值推導 144
5.8總結回顧 146
5.9結尾語 146
《璇璣圖》共八百四十字,縱橫各二十九字,縱、橫、斜、交互、正、反讀或退一字、迭一字讀均可成詩,詩有三、四、五、六、七言不等,目前有人統計可組成七千九百五十八首詩。聽清楚哦,是7958首。
第6章樹 149
6.1開場白 150
無論多高多大的樹,那也是從小到大的,由根到葉,一點點成長起來的。俗話說十年樹木,百年樹人,可一棵大樹又何止是十年這樣容易。
6.2樹的定義 150
樹的定義其實就是我們在講解棧時提到的遞歸的方法。也就是在樹的定義之中還用到了樹的概念,這是比較新的一種定義方法。
6.2.1結點分類 152
6.2.2結點間關系 152
6.2.3樹的其他相關概念 153
6.3樹的抽象數據類型 154
6.4樹的存儲結構 155
6.4.1雙親表示法 155
6.4.2孩子表示法 158
6.4.3孩子兄弟表示法 162
6.5二叉樹的定義 163
蘇東坡曾說:「人有悲歡離合,月有陰晴圓缺,此事古難全」。意思就是完美是理想,不完美才是人生。我們通常舉的例子也都是左高右低、參差不齊的二叉樹。那是否存在完美的二叉樹呢?
6.5.1二叉樹特點 164
6.5.2特殊二叉樹 166
6.6二叉樹的性質 169
6.6.1二叉樹性質1 169
6.6.2二叉樹性質2 169
6.6.3二叉樹性質3 169
6.6.4二叉樹性質4 170
6.6.5二叉樹性質5 171
6.7二叉樹的存儲結構 172
6.7.1二叉樹順序存儲結構 172
6.7.2二叉鏈表 173
6.8遍歷二叉樹 174
你人生的道路上,高考填志願要面臨哪個城市、哪所大學、具體專業等選擇,由於選擇方式的不同,遍歷的次序就完全不同。
6.8.1二叉樹遍歷原理 174
6.8.2二叉樹遍歷方法 175
6.8.3前序遍歷演算法 178
6.8.4中序遍歷演算法 181
6.8.5後序遍歷演算法 184
6.8.6推導遍歷結果 184
6.9二叉樹的建立 187
6.10線索二叉樹 188
我們現在提倡節約型社會,一切都應該節約為本。對待我們的程序當然也不例外,能不浪費的時間或空間,都應該考慮節省。
6.10.1線索二叉樹原理 188
6.10.2線索二叉樹結構實現 191
6.11樹、森林與二叉樹的轉換 195
有個鄉鎮企業也買了同樣的生產線,老闆發現這個問題後找了個小工來說:你必須搞定,不然炒你魷魚。小工很快想出了辦法:他在生產線旁邊放了台風扇猛吹,空皂盒自然會被吹走。
6.11.1樹轉換為二叉樹 196
6.11.2森林轉換為二叉樹 197
6.11.3二叉樹轉換為樹 197
6.11.4二叉樹轉換為森林 199
6.11.5樹與森林的遍歷 199
6.12赫夫曼樹及其應用 200
壓縮而不出錯是如何做到的呢?簡單的說,就是把我們要壓縮的文本進行重新編碼,以達到減少不必要的空間的技術。壓縮和解壓縮技術就是基於赫夫曼的研究之上發展而來,我們應該記住他。
6.12.1赫夫曼樹 200
6.12.2赫夫曼樹定義與原理 203
6.12.3赫夫曼編碼 205
6.13總結回顧 208
6.14結尾語 209
人受傷時會流下淚水。樹受傷時,天將再不會哭。希望我們的未來不要僅僅是鋼筋水泥建造的高樓,也要有那鬱郁蔥蔥的森林和草地,我們人類才可能與自然和諧共處。
第7章圖 211
7.1開場白 212
如果你不善於規劃,很有可能就會出現如玩好新疆後到海南,然後再沖向黑龍江這樣的荒唐決策。
7.2圖的定義 213
現實中,人與人之間關系就非常復雜,比如我的認識的朋友,可能他們之間也互相認識,這就不是簡單的一對一、一對多的關系了,那就是我們今天要研究的主題——圖。
7.2.1各種圖定義 214
7.2.2圖的頂點與邊間關系 217
7.2.3連通圖相關術語 219
7.2.4圖的定義與術語總結 222
7.3圖的抽象數據類型 222
7.4圖的存儲結構 223
因為美國的黑夜就是中國的白天,利用互聯網,他的員工白天上班就可以監控到美國倉庫夜間的實際情況,如果發生了像火災、偷盜這樣的突發事件,及時電話到美國當地相關人員處理
7.4.1鄰接矩陣 224
7.4.2鄰接表 228
7.4.3十字鏈表 232
7.4.4鄰接多重表 234
7.4.5邊集數組 236
7.5圖的遍歷 237
我有一天早晨准備出門,發現鑰匙不見了。一定是我兒子拿著玩,不知道丟到哪個犄角旮旯去了,你們說,我應該如何找?
7.5.1深度優先遍歷 238
7.5.2廣度優先遍歷 242
7.6最小生成樹 245
如果你加班加點,沒日沒夜設計出的結果是方案一,我想你離被炒魷魚應該是不遠了(同學微笑)。因為這個方案比後兩個方案一半還多的成本會讓老闆氣暈過去的。
7.6.1普里姆(prim)演算法 247
7.6.2克魯斯卡爾(kruskal)演算法 251
7.7最短路徑 257
有人為了省錢,需路程最短,但換乘站間距離長等原因並不省時間;另一些人,他為趕時間,最大的需求是總時間要短;還有一類人,他們都不想多走路,關鍵是換乘要少,這樣可以在車上好好休息一下。
7.7.1迪傑斯特拉(dijkstra)演算法 259
7.7.3弗洛伊德(floyd)演算法 265
7.8拓撲排序 270
電影製作不可能在人員到位進駐場地時,導演還沒有找到,也不可能在拍攝過程中,場地都沒有。這都會導致荒謬的結果。
7.8.1拓撲排序介紹 271
7.8.2拓撲排序演算法 272
7.9關鍵路徑 277
假如造一個輪子要0.5天、造一個發動機要3天、造一個車底盤要2天、造一個外殼要2天,其它零部件2天,全部零部件集中到一處要0.5天,組裝成車要2天,請問,在汽車廠造一輛車,最短需要多少天呢?
7.9.1關鍵路徑演算法原理 279
7.9.2關鍵路徑演算法 280
7.10總結回顧 287
7.11結尾語 289
世界上最遙遠的距離,不是牛a與牛c之間狹小空隙,而是你們當中,有人在通往牛逼的路上一路狂奔,而有人步入大學校園就學會放棄。
第8章查找 291
8.1開場白 292
當你精心寫了一篇博文或者上傳一組照片到互聯網上,來自世界各地的無數「蜘蛛」便會蜂擁而至。所謂蜘蛛就是搜索引擎公司伺服器上軟體,它把互聯網當成了蜘蛛網,沒日沒夜的訪問上面的各種信息。
8.2查找概論 293
比如網路時代的新名詞,如「蝸居」、「蟻族」等,如果需要將它們收錄到漢語詞典中,顯然收錄時就需要查找它們是否存在,以及找到如果不存在時應該收錄的位置。
8.3順序表查找 295
8.3.1順序表查找演算法 296
8.3.2順序表查找優化 297
8.4有序表查找 298
我在紙上已經寫好了一個100以內的正整數請你猜,問幾次可以猜出來。當時已經介紹了如何才可以最快的猜出這個數字。我們把這種每次取中間記錄查找的方法叫做折半查找。
8.4.1折半查找 298
8.4.2插值查找 301
8.4.3斐波那契查找 302
8.5線性索引查找 306
我母親年紀大了,經常在家裡找不到東西,於是她用一小本子,記錄了家裡所有小東西放置的位置,比如戶口本放在右手床頭櫃下面抽屜中,鈔票放在衣……咳,這個就不提了。
8.5.1稠密索引 307
8.5.2分塊索引 308
8.5.3倒排索引 311
8.6二叉排序樹 313
後來老虎來了,一人拚命地跑,另一人則急中生智,爬到了樹上。而老虎是不會爬樹的,結果……。爬樹者改變了跑的思想,這一改變何等重要,撿回了自己的一條命。
8.6.1二叉排序樹查找操作 316
8.6.2二叉排序樹插入操作 318
8.6.3二叉排序樹刪除操作 320
8.6.4二叉排序樹總結 327
8.7平衡二叉樹(avl樹) 328
平板就是一個世界,當誘惑降臨,人心中的平衡被打破,世界就會混亂,最後留下的只有孤獨寂寞失敗。這種單調的機械化的社會,禁不住誘惑的侵蝕,最容易被侵蝕的,恰恰是最空虛的心靈。
8.7.1平衡二叉樹實現原理 330
8.7.2平衡二叉樹實現演算法 334
8.8多路查找樹(b樹) 341
要觀察一個公司是否嚴謹,看他們如何開會就知道了。如果開會時每一個人都只是帶一張嘴,即興發言,這肯定是一家不嚴謹的公司。
8.8.12-3樹 343
8.8.22-3-4樹 348
8.8.3b樹 349
8.8.4b+樹 351
8.9散列表查找(哈希表)概述 353
你很想學太極拳,聽說學校有個叫張三豐的人打得特別好,於是到學校學生處找人,工作人員拿出學生名單,最終告訴你,學校沒這個人,並說張三豐幾百年前就已經在武當山作古了。
8.9.1散列表查找定義 354
8.9.2散列表查找步驟 355
8.10散列函數的構造方法 356
8.10.1直接定址法 357
8.10.2數字分析法 358
8.10.3平方取中法 359
8.10.4折疊法 359
8.10.5除留余數法 359
8.10.6隨機數法 360
8.11處理散列沖突的方法 360
我們每個人都希望身體健康,雖然疾病可以預防,但不可避免,沒有任何人可以說,生下來到現在沒有生過一次病。
8.11.1開放定址法 361
8.11.2再散列函數法 363
8.11.3鏈地址法 363
8.11.4公共溢出區法 364
8.12散列表查找實現 365
8.12.1散列表查找演算法實現 365
8.12.2散列表查找性能分析 367
8.13總結回顧 368
8.14結尾語 369
如果我是個喜歡汽車的人,時常搜汽車信息。那麼當我在搜索框中輸入「甲殼蟲」、「美洲虎」等關鍵詞時,不要讓動物和人物成為搜索的頭條。
第9章排序 373
9.1開場白 374
假如我想買一台iphone4的手機,於是上了某電子商務網站去搜索。可搜索後發現,有8863個相關的物品,如此之多,這叫我如何選擇。我其實是想買便宜一點的,但是又怕遇到騙子,想找信譽好的商家,如何做?
9.2排序的基本概念與分類 375
比如我們某些大學為了選拔在主科上更優秀的學生,要求對所有學生的所有科目總分倒序排名,並且在同樣總分的情況下將語數外總分做倒序排名。這就是對總分和語數外總分兩個次關鍵字的組合排序。
9.2.1排序的穩定性 376
9.2.2內排序與外排序 377
9.2.3排序用到的結構與函數 378
9.3冒泡排序 378
無論你學習哪種編程語言,在學到循環和數組時,通常都會介紹一種排序演算法,而這個演算法一般就是冒泡排序。並不是它的名稱很好聽,而是說這個演算法的思路最簡單,最容易理解。
9.3.1最簡單排序實現 379
9.3.2冒泡排序演算法 380
9.3.3冒泡排序優化 382
9.3.4冒泡排序復雜度分析 383
9.4簡單選擇排序 384
還有一種做股票的人,他們很少出手,只是在不斷觀察和判斷,等時機一到,果斷買進或賣出。他們因為冷靜和沉著,以及交易的次數少,而最終收益頗豐。
9.4.1簡單選擇排序演算法 384
9.4.2簡單選擇排序復雜度分析 385
9.5直接插入排序 386
哪怕你是第一次玩撲克牌,只要認識這些數字,理牌的方法都是不用教的。將3和4移動到5的左側,再將2移動到最左側,順序就算是理好了。這里,我們的理牌方法,就是直接插入排序法。
9.5.1直接插入排序演算法 386
9.5.2直接插入排序復雜度分析 388
9.6希爾排序 389
不管怎麼說,希爾排序演算法的發明,使得我們終於突破了慢速排序的時代(超越了時間復雜度為o(n2)),之後,更為高效的排序演算法也就相繼出現了。
9.6.1希爾排序原理 391
9.6.2希爾排序演算法 391
9.6.3希爾排序復雜度分析 395
9.7堆排序 396
什麼叫堆結構呢?回憶一下我們小時候,特別是男同學,基本都玩過疊羅漢的惡作劇。通常都是先把某個要整的人按倒在地,然後大家就一擁而上撲了上去……後果?後果當然就是一笑了之。
9.7.1堆排序演算法 398
9.7.2堆排序復雜度分析 405
9.8歸並排序 406
即使你是你們班級第一、甚至年級第一名,如果你沒有上分數線,則說明你的成績排不到全省前1萬名,你也就基本失去了當年上本科的機會了。
9.8.1歸並排序演算法 407
9.8.2歸並排序復雜度分析 413
9.8.3非遞歸實現歸並排序 413
9.9快速排序 417
終於我們的高手要登場了,將來你工作後,你的老闆讓你寫個排序演算法,而你會的演算法中竟然沒有快速排序,我想你還是不要聲張,偷偷去把快速排序演算法找來敲進電腦,這樣至少你不至於被大夥兒取笑。
9.9.1快速排序演算法 417
9.9.2快速排序復雜度分析 421
9.9.3快速排序優化 422
9.10總結回顧 428
目前還沒有十全十美的排序演算法,有優點就會有缺點,即使是快速排序法,也只是在整體性能上優越,它也存在排序不穩定、需要大量輔助空間、對少量數據排序無優勢等不足。
9.11結尾語 430
如果你有夢想的話,就要去捍衛它。當別人做不到的時候,他們就想要告訴你,你也不能。如果你想要些什麼,就得去努力爭取。就這樣!
附錄參考文獻 435