電子信息工程13(2)班 吳煥楠 歡迎加QQ1435378192相互學習 歡迎加入學霸交流群293194287 全文用楠妹的口吻編寫,為了增加趣味性 新版特性:追加楠妹語言,以及部分代碼。 感謝電信1班澤銳提出的錯誤(冒泡法那里) 注:僅列出電信專業(yè)考點 第一章考點:算法的效率、復(fù)雜度 時間復(fù)雜度:算法的時間量度,用“O(***)”表示 空間復(fù)雜度:算法所需存儲空間的量度 主要考題,計算某某語句的執(zhí)行次數(shù)(主要是循環(huán)體)。 方法: 1、for(i=x;i<n;i++){a} a語句執(zhí)行了n-x次,注意循環(huán)條件中沒有等于號 2、for(i=x;i<=n;i++){a} a語句執(zhí)行了n-x+1次,注意循環(huán)條件中有等于號,有等號就+1咯 3、for(i=x;i<n;i++) for(j=y;j<=m;j++){a} a語句執(zhí)行了(n-x)(m-y+1)次,嵌套循環(huán)時,要算兩者的乘積(前提是兩個循環(huán)的循環(huán)變量無瓜葛) 例題: 1、在下面的程序段的時間復(fù)雜度為( )【北京工商大學 2001 一、10(3分)煥楠修改版】 for(i=1;i<n;i++) for(j=1;j<=n;j++) x=x+1; A. O(2n) B.O(n) C.O(n2) D.O(log2n) 答案:C 解釋:先算 x=x+1;語句執(zhí)行的次數(shù)為  次,取最高次項。其實這題直接目測都可以啦,很簡單吧親! 2、計算機執(zhí)行下面的語句時,語句s的執(zhí)行次數(shù)為 _______ 。【南京理工大學2000二、1(1.5分)】 for(i=l;i<n-l;i++) for(j=n;j>=i;j--) s; 答案: 解釋:顯然,兩個循環(huán)的循環(huán)變量是有瓜葛滴!根據(jù)楠妹第二定律,只能慢慢推導(dǎo)咯! 如果插入位置不合理,拋出異常 - 如果順序表已滿,動態(tài)增加容量
- 從最后一個元素開始向前找到插入位置,并同時把它們后移
- 插入
- 表長+1
在順序表L的第i個位置之前插入元素e
(楠妹語言)
int ListInsert_Sq(SqList&L,int i,ElemType e)
{
if(插入位置不合理)
return 0;
if(空間不足)
{
申請空間;
if(空間申請失敗)
return 0;
else
{
讓順序表首地址指針指向新位置;
更新表的大小;
}
}
else
{
把從第i個到最后一個元素之間的所有元素逐個后移一個位置;
把元素e存儲在第i個位置;
表長增一;
return 1;
}
}
(代碼自己看書 )
順序表的刪除:
思路:
如果刪除位置不合理,拋出異常 - 取出刪除元素
3、從刪除元素位置開始向后到最后一個元素,并同時把它們前移
4、表長-1
(楠妹語言)
int ListDelete_Sq(SqList&L,int i,ElemType &e)
{
if(刪除位置不合理)
return 0;
把第i個位置到的數(shù)據(jù)放入e;
把從第i+1個打掃最后一個元素逐個前移一個位置;
表的長度減一;
return 1;
}
(代碼自己看書 )
單鏈表的插入:
思路:
順序棧的出棧操作: Status Push(SqStack &S,SElemType &e) //注意這里為什么要用引用參數(shù),不懂問楠妹哈 { if(棧空) return ERROR; e=*--S.top; return OK; } 注意: 判斷棧空的條件是:S.top==S.base e=*--S.top; 的理解: 先讓棧頂指針指向棧頂元素,然后賦值給e 實質(zhì):先減減,后刪除,因為非空棧的棧頂指針始終指向棧頂元素的下一個位置上 循環(huán)隊列的入隊: Status EnQueue(SqQueue &Q,QElemType e) { if((Q.rear+1)%MAXQSIZE==Q.front) //判斷隊列是否滿了 return ERROR; Q.base[Q.rear]=e; //e入隊 Q.rear=(Q.rear+1)%MAXQSIZE; //防止越界 return OK; } 循環(huán)隊列的出隊: Status DeQueue(SqQueue &Q,QElemType &e) { if(Q.rear==Q.front) //判斷隊列是否空 return ERROR; e=Q.base[Q.front]; //e出隊 Q.front=(Q.front+1)%MAXQSIZE; //保證循環(huán) return OK; } 第四章考點:串(堆分配內(nèi)存)的 連接、賦值 代碼都在 啦,自己背咯親  ! 第六章考點:二叉樹的遍歷、赫夫曼編碼 二叉樹的遍歷:(已經(jīng)定好了從左到右,以下僅對先序作說明,其它兩種自己推導(dǎo)啦親,嘻嘻!) 理解的關(guān)鍵是:遞歸的思想 先序(先訪問根) 把權(quán)值最小的兩葉子  相加作為一個新的結(jié)點  37 
- 總之這樣做下去啦,煩死楠妹啦,不做了!哼!!!我生氣了,不理你了!掛就掛唄!反正你掛又不關(guān)我事,嘻嘻。有什么鳥不起的呀!
- 最后,赫夫曼樹都為你弄好了,編碼好簡單呀:就把左樹枝為0,右樹枝為1,寫出編碼
如A 的編碼為:0100
第九章考點:哈希表、折半查找
哈希表例題:
設(shè)有一組關(guān)鍵字{14,,20,63,96,29,54},采用哈希函數(shù):H(key)=key mod 15 ,表長為16,用開放地址法的線性探測再散列方法解決沖突。要求:對該關(guān)鍵字序列構(gòu)造哈希表,給出每個元素的查找次數(shù),并計算查找成功的平均查找長度。(15分)(廣工—2012年6月28日考題)
答案: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
H(14) = 14 mod 15 = 14 H(20) = 5 H(63) = 3 H(96) = 6 H(29) = 14 H1= (14+1)mod 16 = 15 H(54) = 9 平均查找長度 ASL=(1*5 + 2*1)/6 =7/6 注意: 平均查找長度的計算, ,記住公式啦, O(∩_∩)O~~本題的關(guān)鍵是 線性探測再散列方法的使用 說明: i為沖突的次數(shù),每一次的 key都是第一次算出來那個喲  ! 如果 ,則為線性探測再散列 如果 ,則為二次探測再散列 如果 為偽隨機序列,則為偽隨機探測再散列 解釋:老師講過,不解釋了哦!不懂上Q問我。嘻嘻。
折半查找例題: 在有序表(6,12,16,27,28,36,38,48,56,60,67)中,用折半法查找關(guān)鍵值58,需做的關(guān)鍵值比較次數(shù)為。(廣工—2012年6月28日考題)
答案:3次 解釋:
分一半,以36為中心,58和36比較,58>36 有序表變?yōu)?8,48,56,60,67(注意從中心的下一個元素開始) - 再分一半,以56為中心,58和56比較,58>56
有序表變?yōu)?0,67 - 剩下兩個,沒得再分一半啦親,此時比較58和60,58<60,但是60左邊木有了,嗚嗚~~~~(>_<)~~~~ ,因此58不在有序表中,查找結(jié)束,一共比較3次親O(∩_∩)O~~
第十章考點:交換排序(冒泡法、快速排序法)、直接插入排序
冒泡法例題(楠妹出的,嘻嘻):(版本1.0和2.0中有錯)
親,你快點幫人家從小到大排列序列 56 23 77 21 ,要求用冒泡法,并且求比較次數(shù)啦親
答案:
第一輪比較:
1、56和23比較,56>23,56和23交換位置,序列變?yōu)椋?/font>
23 56 77 21
2、56和77比較,56<77,56和23不交換位置,序列變?yōu)椋?/font>
23 56 77 21
3、77和21比較,77>21,77和21交換位置,序列變?yōu)椋?/font>
23 56 21 77
第二輪比較:
1、23和56比較,23<56,不交換
2、56和21比較,56>21,交換,序列變?yōu)椋?/font>
23 21 56 77
3、56和77比較,56<77,不交換
第三輪比較:
1、23和21比較,23>21,交換,序列變?yōu)椋?/font>
23 56 77
2、23和56比較,不交換
3、56和77比較,不交換
排序完啦,嘻嘻,好開心!O(∩_∩)O~~ 并且比較次數(shù)為3輪,每一輪3次,共9次!
快夸夸楠妹吧!!(*^__^*) 嘻嘻……
解釋:
冒泡法排序的思路就是不斷地相間元素比較,交換
每一次必然是石沉大海,最大一個必然去了最后,比較小的慢慢向前浮上來,所以叫楠妹冒泡法!
冒泡法排序的比較輪數(shù)為: 元素個數(shù)-1
推薦大家看看這個視頻:
http://v.ku6.com/show/T4wLiqzZ9PCOFbmcjPDuew...html?ptag=vsogou
快速排序法例題(楠妹出的):
親,你快點幫人家從小到大排列序列 56 23 83 77 21 89 11 ,要求用快速排序法,并且求比較次數(shù)啦親
答案:
2、21和56比較,21小于56,21取代56的位置,記錄全部后移 5、77和21比較,77大于21,77與56比較,77大于56,77與23比較,77大于23,77與77比較,77等于77,故77留在原來位置 6、取出23,放入哨兵位置 7、23和21比較,23大于21,23與56比較,23小于56,23取代56的位置,記錄全部后移 10、56和21比較,56大于21,56和23比較,56大于23,56和56比較,56等于56,故56留在原來位置 11、因此,最終的排序為: 共比較10次 注: 冒泡法的時間復(fù)雜度為: 快速排序法的時間復(fù)雜度為:  直接插入排序的時間復(fù)雜度為: 可見,快速排序法,全球公認最快的排序法。專業(yè)排序30年,不要兩三百,不要四五百,只要998,對,你沒聽錯,只要998!你就可以擁有全球最快的排序法!趕快拿錢給楠妹吧,嘻嘻!!!(但是不穩(wěn)定……嗚嗚嗚~~~~(>_<)~~~~ ) 終于寫完啦,寫了五個小時呀,嗚嗚!!!認真看哦,(⊙o⊙)哦,(⊙o⊙)哦,(⊙o⊙)哦。。。。親!不認真看的,打死你打死你打死你,哼哼哼哼!!! 要說再見了,不舍得呀!!!嗚嗚嗚嗚嗚嗚嗚!!!O__O”… ~~~~(>_<)~~~~!!!! 2014年6月6日星期五 于廣東某供熱大學某實驗室
|