• <sub id="h4knl"><ol id="h4knl"></ol></sub>
    <sup id="h4knl"></sup>
      <sub id="h4knl"></sub>

      <sub id="h4knl"><ol id="h4knl"><em id="h4knl"></em></ol></sub><s id="h4knl"></s>
      1. <strong id="h4knl"></strong>

      2. 計(jì)算機(jī)專(zhuān)業(yè)考研大綱核心考點(diǎn)解析

        時(shí)間:2020-12-26 11:41:50 考研大綱 我要投稿

        計(jì)算機(jī)專(zhuān)業(yè)考研大綱核心考點(diǎn)解析

          隊(duì)列和棧結(jié)構(gòu)的概念理解

        計(jì)算機(jī)專(zhuān)業(yè)考研大綱核心考點(diǎn)解析

          棧是僅限制在表的一端進(jìn)行插入和刪除運(yùn)算的線性表,稱(chēng)插入、刪除這一端為棧頂。表中無(wú)元素時(shí)為空棧。棧的修改是按后進(jìn)先出的原則進(jìn)行的。通常棧有順序棧和鏈棧兩種存儲(chǔ)結(jié)構(gòu)。

          隊(duì)列是一種運(yùn)算受限的線性表,插入在表的一端進(jìn)行,而刪除在表的另一端進(jìn)行,允許刪除的一端稱(chēng)為隊(duì)頭,允許插入的一端稱(chēng)為隊(duì)尾,隊(duì)列的操作原則是先進(jìn)先出的。隊(duì)列也有順序存儲(chǔ)和鏈?zhǔn)酱鎯?chǔ)兩種存儲(chǔ)結(jié)構(gòu)。

          線性表中單鏈表相關(guān)算法設(shè)計(jì)與實(shí)現(xiàn)

          一些基礎(chǔ)但又重要的單鏈表相關(guān)算法,如:

          1、打印單鏈表,void PrintList(List list);使用一個(gè)指針遍歷所有鏈表節(jié)點(diǎn)。

          2、兩個(gè)升序鏈表,打印tarList中的相應(yīng)元素,這些元素的序號(hào)由SeqList指定,void PrintLots(List tarList,List seqList);使用兩個(gè)指針?lè)謩e遍歷兩個(gè)鏈表,每次取出序列鏈表的一個(gè)序號(hào)后,根據(jù)該序號(hào),到達(dá)目標(biāo)鏈表指定節(jié)點(diǎn)。

          3、兩個(gè)升序鏈表的交集,List Intersect(List l1,List l2);

          4、兩個(gè)升序鏈表的并集,List Join(List l1,List l2);

          5、單鏈表就地置逆,void Reverse(List l);使用三個(gè)指針表示前驅(qū),當(dāng)前和后繼節(jié)點(diǎn),每次將當(dāng)前節(jié)點(diǎn)的Next指向前驅(qū)節(jié)點(diǎn),然后向后遍歷直到鏈表末尾。

          二叉樹(shù)的遍歷

          遍歷的過(guò)程就是把非線性結(jié)構(gòu)的二叉樹(shù)中的結(jié)點(diǎn)排成一個(gè)線性序列的過(guò)程。

          二叉樹(shù)遍歷方法可分為兩大類(lèi),一類(lèi)是"寬度優(yōu)先"法,即從根結(jié)點(diǎn)開(kāi)始,由上到下,從左往右一層一層的遍歷;另一類(lèi)是"深度優(yōu)先法",即一棵子樹(shù)一棵子樹(shù)的遍歷。

          從二叉樹(shù)結(jié)構(gòu)的整體看,二叉樹(shù)可以分為根結(jié)點(diǎn),左子樹(shù)和右子樹(shù)三部分,只要遍歷了這三部分,就算遍歷了二叉樹(shù)。設(shè)D表示根結(jié)點(diǎn),L表示左子樹(shù),R表示右子樹(shù),則DLR的組合共有6種,即DLR,DRL,LDR,LRD,RDL,RLD。若限定先左后右,則只有DLR,LDR,LRD三種,分別稱(chēng)為先(前)序法(先根次序法),中序法(中根次序法,對(duì)稱(chēng)法),后序法(后根次序法)。三種遍歷的遞歸算法如下:

          1、先序法(DLR)

          若二叉樹(shù)為空,則空操作,否則:訪問(wèn)根結(jié)點(diǎn)?先序遍歷左子樹(shù)?先序遍歷右子樹(shù)。

          2、中序法(LDR)

          若二叉樹(shù)為空,則空操作,否則:中序遍歷左子樹(shù)?訪問(wèn)根結(jié)點(diǎn)?中序遍歷右子樹(shù)。

          3、后序法(LRD)

          若二叉樹(shù)為空,則空操作,否則:后序遍歷左子樹(shù)?后序遍歷右子樹(shù)?訪問(wèn)根結(jié)點(diǎn)。

          完全二叉樹(shù)中有關(guān)結(jié)點(diǎn)個(gè)數(shù)計(jì)算

          完全二叉樹(shù)的定義:深度為k,有n個(gè)結(jié)點(diǎn)的二叉樹(shù)當(dāng)且僅當(dāng)其每一個(gè)結(jié)點(diǎn)都與深度為k的`滿二叉樹(shù)中編號(hào)從1至n的結(jié)點(diǎn)一一對(duì)應(yīng)時(shí),稱(chēng)為完全二叉樹(shù)。

          完全二叉樹(shù)的葉子數(shù)為(n+1)/2取下整。

          森林與二叉樹(shù)之間的轉(zhuǎn)換以及轉(zhuǎn)換過(guò)程中結(jié)點(diǎn)之間的關(guān)系

          將一棵樹(shù)轉(zhuǎn)換為二叉樹(shù)的方法是:

          1、樹(shù)中所有相鄰兄弟之間加一條連線。

          2、對(duì)樹(shù)中的每個(gè)結(jié)點(diǎn),只保留其與第一個(gè)孩子結(jié)點(diǎn)之間的連線,刪去其與其它孩子結(jié)點(diǎn)之間的連線。

          3、以樹(shù)的根結(jié)點(diǎn)為軸心,將整棵樹(shù)順時(shí)針旋轉(zhuǎn)一定的角度,使之結(jié)構(gòu)層次分明。

          森林轉(zhuǎn)換為二叉樹(shù)的方法如下:

          1、將森林中的每棵樹(shù)轉(zhuǎn)換成相應(yīng)的二叉樹(shù)。

          2、第一棵二叉樹(shù)不動(dòng),從第二棵二叉樹(shù)開(kāi)始,依次把后一棵二叉樹(shù)的根結(jié)點(diǎn)作為前一棵二叉樹(shù)根結(jié)點(diǎn)的右孩子,當(dāng)所有二叉樹(shù)連在一起后,所得到的二叉樹(shù)就是由森林轉(zhuǎn)換得到的二叉樹(shù)。

          樹(shù)和森林都可以轉(zhuǎn)換為二叉樹(shù),二者的不同是:樹(shù)轉(zhuǎn)換成的二叉樹(shù),其根結(jié)點(diǎn)必然無(wú)右孩子,而森林轉(zhuǎn)換后的二叉樹(shù),其根結(jié)點(diǎn)有右孩子。將一棵二叉樹(shù)還原為樹(shù)或森林,具體方法如下:

          1、若某結(jié)點(diǎn)是其雙親的左孩子,則把該結(jié)點(diǎn)的右孩子、右孩子的右孩子、……都與該結(jié)點(diǎn)的雙親結(jié)點(diǎn)用線連起來(lái)。

          2、刪掉原二叉樹(shù)中所有雙親結(jié)點(diǎn)與右孩子結(jié)點(diǎn)的連線。3.整理由1、2兩步所得到的樹(shù)或森林,使之結(jié)構(gòu)層次分明。

          對(duì)無(wú)向連通圖特性的理解

          無(wú)向圖的每條邊,在頂點(diǎn)計(jì)算度的過(guò)程中,都要兩次參與計(jì)算(與邊兩關(guān)聯(lián)的2個(gè)頂點(diǎn)),因此所有頂點(diǎn)的度之和為偶數(shù)。

          具有n個(gè)頂點(diǎn)的無(wú)向連通圖,其邊數(shù)大于或等于n-1。

          在無(wú)向連通圖中,所有頂點(diǎn)的度數(shù)都有可能大于1。

          對(duì)m階B樹(shù)定義的理解

          一棵m階的B樹(shù)滿足下列條件:

          1、每個(gè)結(jié)點(diǎn)至多有m棵子樹(shù)。

          2、除根結(jié)點(diǎn)外,其它每個(gè)分支至少有m/2棵子樹(shù)。

          3、根結(jié)點(diǎn)至少有兩棵子樹(shù)(除非B樹(shù)只有一個(gè)結(jié)點(diǎn))。

          4、所有葉結(jié)點(diǎn)在同一層上。B樹(shù)的葉結(jié)點(diǎn)可以看成一種外部結(jié)點(diǎn),不包含任何信息。

          5、有j個(gè)孩子的非葉結(jié)點(diǎn)恰好有j-1個(gè)關(guān)鍵碼,關(guān)鍵碼按遞增次序排列。結(jié)點(diǎn)中包含的信息為∶(p0,k1,p1,k2,p2,…,kj-1,pj-1),其中,ki為關(guān)鍵碼。

          帶權(quán)圖的最短路徑算法及應(yīng)用

          迪杰斯特拉(Di jkstra)算法求單源最短路徑,算法思想:

          設(shè)S為最短距離已確定的頂點(diǎn)集(看作紅點(diǎn)集),V-S是最短距離尚未確定的頂點(diǎn)集(看作藍(lán)點(diǎn)集)。

          1、初始化:初始化時(shí),只有源點(diǎn)s的最短距離是已知的(SD(s)=0),故紅點(diǎn)集S={s},藍(lán)點(diǎn)集為空。

          2、重復(fù)以下工作,按路徑長(zhǎng)度遞增次序產(chǎn)生各頂點(diǎn)最短路徑,在當(dāng)前藍(lán)點(diǎn)集中選擇一個(gè)最短距離最小的藍(lán)點(diǎn)來(lái)擴(kuò)充紅點(diǎn)集,以保證算法按路徑長(zhǎng)度遞增的次序產(chǎn)生各頂點(diǎn)的最短路徑。當(dāng)藍(lán)點(diǎn)集中僅剩下最短距離為∞的藍(lán)點(diǎn),或者所有藍(lán)點(diǎn)已擴(kuò)充到紅點(diǎn)集時(shí),s到所有頂點(diǎn)的最短路徑就求出來(lái)了。

          注意:①若從源點(diǎn)到藍(lán)點(diǎn)的路徑不存在,則可假設(shè)該藍(lán)點(diǎn)的最短路徑是一條長(zhǎng)度為無(wú)窮大的虛擬路徑。②從源點(diǎn)s到終點(diǎn)v的最短路徑簡(jiǎn)稱(chēng)為v的最短路徑;s到v的最短路徑長(zhǎng)度簡(jiǎn)稱(chēng)為v的最短距離,并記為SD(v)。

          堆排序

          大根堆的定義:完全二叉樹(shù),任一非葉子結(jié)點(diǎn)都大于等于它的孩子,也就是說(shuō)根結(jié)點(diǎn)是最大的。而且顯然大根堆的任一棵子樹(shù)也是大根堆。

          堆排序的基本思想:記錄區(qū)的分為無(wú)序區(qū)和有序區(qū)前后兩部分;用無(wú)序區(qū)的數(shù)建大根堆,得到的根(最大的數(shù))和無(wú)序區(qū)的最后一個(gè)數(shù)交換,也就是將該根歸入有序區(qū)的最前端;如此重復(fù)下去,直至有序區(qū)擴(kuò)展至整個(gè)記錄區(qū)。

          具體操作可按下面步驟實(shí)現(xiàn):

          1、建大根堆

          2、交換根和無(wú)序區(qū)最后一個(gè)數(shù)

          3、重建大根堆,因?yàn)榻粨Q只是使根改變了,所以左右子樹(shù)依然分別是大根堆。

          4、比較根,左子樹(shù)的根和右子樹(shù)的根,如果根最大,則無(wú)須再作調(diào)整,樹(shù)已經(jīng)是大根堆了;如果左子樹(shù)的根最大,交換它與根,再遞歸調(diào)整左子樹(shù);如果右子樹(shù)的根最大,交換它與根,再遞歸調(diào)整右子數(shù)。

          5、遞歸調(diào)整到葉子的時(shí)候,樹(shù)就是大根堆了。

          各類(lèi)排序算法的特點(diǎn)及比較

          幾種主要的排序算法:冒泡排序、選擇排序、插入排序、快速排序、歸并排序、Shell排序、堆排序等。

          冒泡排序算法思想:將待排序的元素看作是豎著排列的"氣泡",較小的元素比較輕,從而要往上浮。在冒泡排序算法中我們要對(duì)這個(gè)"氣泡"序列處理若干遍。所謂一遍處理,就是自底向上檢查一遍這個(gè)序列,并時(shí)刻注意兩個(gè)相鄰的元素的順序是否正確。如果發(fā)現(xiàn)兩個(gè)相鄰元素的順序不對(duì),即"輕"的元素在下面,就交換它們的位置。

          選擇排序算法思想:選擇排序的基本思想是對(duì)待排序的記錄序列進(jìn)行n-1遍的處理,第i遍處理是將L[i..n]中最小者與L[i]交換位置。這樣,經(jīng)過(guò)i遍處理之后,前i個(gè)記錄的位置已經(jīng)是正確的了。

          插入排序算法思想:經(jīng)過(guò)i-1遍處理后,L[1..i-1]己排好序。第i遍處理僅將L[i]插入L[1..i-1]的適當(dāng)位置,使得L[1..i]又是排好序的序列。

          快速排序算法思想:快速排序的基本思想是基于分治策略的。對(duì)于輸入的子序列L[p..r],如果規(guī)模足夠小則直接進(jìn)行排序,否則分三步處理:1.分解(Divide):將輸入的序列L[p..r]劃分成兩個(gè)非空子序列L[p..q]和L[q+1..r],使L[p..q]中任一元素的值不大于L[q+1..r]中任一元素的值。2.遞歸求解(Conquer):通過(guò)遞歸調(diào)用快速排序算法分別對(duì)L[p..q]和L[q+1..r]進(jìn)行排序。3.合并(Merge):由于對(duì)分解出的兩個(gè)子序列的排序是就地進(jìn)行的,所以在L[p..q]和L[q+1..r]都排好序后不需要執(zhí)行任何計(jì)算L[p..r]就已排好序。

          歸并排序算法思想:分而治之(divide-conquer)。每個(gè)遞歸過(guò)程涉及三個(gè)步驟:1.分解,把待排序的n個(gè)元素的序列分解成兩個(gè)子序列,每個(gè)子序列包括n/2個(gè)元素。2.治理,對(duì)每個(gè)子序列分別調(diào)用歸并排序MergeSort,進(jìn)行遞歸操作。3.合并,合并兩個(gè)排好序的子序列,生成排序結(jié)果。

          Shell排序算法思想:算法先將要排序的一組數(shù)按某個(gè)增量d分成若干組,每組中記錄的下標(biāo)相差d.對(duì)每組中全部元素進(jìn)行排序,然后再用一個(gè)較小的增量對(duì)它進(jìn)行,在每組中再進(jìn)行排序。當(dāng)增量減到1時(shí),整個(gè)要排序的數(shù)被分成一組,排序完成。

          堆排序算法思想:用大根堆排序的基本思想:1.先將初始文件R[1..n]建成一個(gè)大根堆,此堆為初始的無(wú)序區(qū)。2.再將關(guān)鍵字最大的記錄R[1](即堆頂)和無(wú)序區(qū)的最后一個(gè)記錄R[n]交換,由此得到新的無(wú)序區(qū)R[1..n-1]和有序區(qū)R[n],且滿足R[1..n-1].keys≤R[n].key。3.由于交換后新的根R[1]可能違反堆性質(zhì),故應(yīng)將當(dāng)前無(wú)序區(qū)R[1..n-1]調(diào)整為堆。

        《&.doc》
        将本文的Word文档下载到电脑,方便收藏和打印
        推荐度:
        点击下载文档

        【計(jì)算機(jī)專(zhuān)業(yè)考研大綱核心考點(diǎn)解析】相關(guān)文章:

        2017年教育學(xué)考研50個(gè)核心考點(diǎn)11-22

        歷年核心考點(diǎn):教師職業(yè)道德02-28

        2017年考研數(shù)學(xué)的重要考點(diǎn)09-28

        2017考研數(shù)學(xué)的三大重要考點(diǎn)11-14

        如何利用2017年考研大綱獲取高分11-12

        職稱(chēng)英語(yǔ)等級(jí)考試各重點(diǎn)語(yǔ)法考點(diǎn)解析10-09

        職稱(chēng)英語(yǔ)的常考語(yǔ)法考點(diǎn)解析之被動(dòng)語(yǔ)態(tài)12-26

        計(jì)算機(jī)類(lèi):計(jì)算機(jī)專(zhuān)業(yè)簡(jiǎn)歷范文10-12

        2021計(jì)算機(jī)專(zhuān)業(yè)簡(jiǎn)歷05-06

        計(jì)算機(jī)專(zhuān)業(yè)模板簡(jiǎn)歷07-05

        在线咨询
        国产高潮无套免费视频_久久九九兔免费精品6_99精品热6080YY久久_国产91久久久久久无码
      3. <sub id="h4knl"><ol id="h4knl"></ol></sub>
        <sup id="h4knl"></sup>
          <sub id="h4knl"></sub>

          <sub id="h4knl"><ol id="h4knl"><em id="h4knl"></em></ol></sub><s id="h4knl"></s>
          1. <strong id="h4knl"></strong>

          2. 日日狠狠久久偷偷色综合 | 免费观看国产v片在线 | 午夜免费人成视频在线 | 日韩中文字幕美少妇视频 | 亚洲愉拍一区二区三区 | 在线视频不卡欧美 |

            計(jì)算機(jī)專(zhuān)業(yè)考研大綱核心考點(diǎn)解析

              隊(duì)列和棧結(jié)構(gòu)的概念理解

            計(jì)算機(jī)專(zhuān)業(yè)考研大綱核心考點(diǎn)解析

              棧是僅限制在表的一端進(jìn)行插入和刪除運(yùn)算的線性表,稱(chēng)插入、刪除這一端為棧頂。表中無(wú)元素時(shí)為空棧。棧的修改是按后進(jìn)先出的原則進(jìn)行的。通常棧有順序棧和鏈棧兩種存儲(chǔ)結(jié)構(gòu)。

              隊(duì)列是一種運(yùn)算受限的線性表,插入在表的一端進(jìn)行,而刪除在表的另一端進(jìn)行,允許刪除的一端稱(chēng)為隊(duì)頭,允許插入的一端稱(chēng)為隊(duì)尾,隊(duì)列的操作原則是先進(jìn)先出的。隊(duì)列也有順序存儲(chǔ)和鏈?zhǔn)酱鎯?chǔ)兩種存儲(chǔ)結(jié)構(gòu)。

              線性表中單鏈表相關(guān)算法設(shè)計(jì)與實(shí)現(xiàn)

              一些基礎(chǔ)但又重要的單鏈表相關(guān)算法,如:

              1、打印單鏈表,void PrintList(List list);使用一個(gè)指針遍歷所有鏈表節(jié)點(diǎn)。

              2、兩個(gè)升序鏈表,打印tarList中的相應(yīng)元素,這些元素的序號(hào)由SeqList指定,void PrintLots(List tarList,List seqList);使用兩個(gè)指針?lè)謩e遍歷兩個(gè)鏈表,每次取出序列鏈表的一個(gè)序號(hào)后,根據(jù)該序號(hào),到達(dá)目標(biāo)鏈表指定節(jié)點(diǎn)。

              3、兩個(gè)升序鏈表的交集,List Intersect(List l1,List l2);

              4、兩個(gè)升序鏈表的并集,List Join(List l1,List l2);

              5、單鏈表就地置逆,void Reverse(List l);使用三個(gè)指針表示前驅(qū),當(dāng)前和后繼節(jié)點(diǎn),每次將當(dāng)前節(jié)點(diǎn)的Next指向前驅(qū)節(jié)點(diǎn),然后向后遍歷直到鏈表末尾。

              二叉樹(shù)的遍歷

              遍歷的過(guò)程就是把非線性結(jié)構(gòu)的二叉樹(shù)中的結(jié)點(diǎn)排成一個(gè)線性序列的過(guò)程。

              二叉樹(shù)遍歷方法可分為兩大類(lèi),一類(lèi)是"寬度優(yōu)先"法,即從根結(jié)點(diǎn)開(kāi)始,由上到下,從左往右一層一層的遍歷;另一類(lèi)是"深度優(yōu)先法",即一棵子樹(shù)一棵子樹(shù)的遍歷。

              從二叉樹(shù)結(jié)構(gòu)的整體看,二叉樹(shù)可以分為根結(jié)點(diǎn),左子樹(shù)和右子樹(shù)三部分,只要遍歷了這三部分,就算遍歷了二叉樹(shù)。設(shè)D表示根結(jié)點(diǎn),L表示左子樹(shù),R表示右子樹(shù),則DLR的組合共有6種,即DLR,DRL,LDR,LRD,RDL,RLD。若限定先左后右,則只有DLR,LDR,LRD三種,分別稱(chēng)為先(前)序法(先根次序法),中序法(中根次序法,對(duì)稱(chēng)法),后序法(后根次序法)。三種遍歷的遞歸算法如下:

              1、先序法(DLR)

              若二叉樹(shù)為空,則空操作,否則:訪問(wèn)根結(jié)點(diǎn)?先序遍歷左子樹(shù)?先序遍歷右子樹(shù)。

              2、中序法(LDR)

              若二叉樹(shù)為空,則空操作,否則:中序遍歷左子樹(shù)?訪問(wèn)根結(jié)點(diǎn)?中序遍歷右子樹(shù)。

              3、后序法(LRD)

              若二叉樹(shù)為空,則空操作,否則:后序遍歷左子樹(shù)?后序遍歷右子樹(shù)?訪問(wèn)根結(jié)點(diǎn)。

              完全二叉樹(shù)中有關(guān)結(jié)點(diǎn)個(gè)數(shù)計(jì)算

              完全二叉樹(shù)的定義:深度為k,有n個(gè)結(jié)點(diǎn)的二叉樹(shù)當(dāng)且僅當(dāng)其每一個(gè)結(jié)點(diǎn)都與深度為k的`滿二叉樹(shù)中編號(hào)從1至n的結(jié)點(diǎn)一一對(duì)應(yīng)時(shí),稱(chēng)為完全二叉樹(shù)。

              完全二叉樹(shù)的葉子數(shù)為(n+1)/2取下整。

              森林與二叉樹(shù)之間的轉(zhuǎn)換以及轉(zhuǎn)換過(guò)程中結(jié)點(diǎn)之間的關(guān)系

              將一棵樹(shù)轉(zhuǎn)換為二叉樹(shù)的方法是:

              1、樹(shù)中所有相鄰兄弟之間加一條連線。

              2、對(duì)樹(shù)中的每個(gè)結(jié)點(diǎn),只保留其與第一個(gè)孩子結(jié)點(diǎn)之間的連線,刪去其與其它孩子結(jié)點(diǎn)之間的連線。

              3、以樹(shù)的根結(jié)點(diǎn)為軸心,將整棵樹(shù)順時(shí)針旋轉(zhuǎn)一定的角度,使之結(jié)構(gòu)層次分明。

              森林轉(zhuǎn)換為二叉樹(shù)的方法如下:

              1、將森林中的每棵樹(shù)轉(zhuǎn)換成相應(yīng)的二叉樹(shù)。

              2、第一棵二叉樹(shù)不動(dòng),從第二棵二叉樹(shù)開(kāi)始,依次把后一棵二叉樹(shù)的根結(jié)點(diǎn)作為前一棵二叉樹(shù)根結(jié)點(diǎn)的右孩子,當(dāng)所有二叉樹(shù)連在一起后,所得到的二叉樹(shù)就是由森林轉(zhuǎn)換得到的二叉樹(shù)。

              樹(shù)和森林都可以轉(zhuǎn)換為二叉樹(shù),二者的不同是:樹(shù)轉(zhuǎn)換成的二叉樹(shù),其根結(jié)點(diǎn)必然無(wú)右孩子,而森林轉(zhuǎn)換后的二叉樹(shù),其根結(jié)點(diǎn)有右孩子。將一棵二叉樹(shù)還原為樹(shù)或森林,具體方法如下:

              1、若某結(jié)點(diǎn)是其雙親的左孩子,則把該結(jié)點(diǎn)的右孩子、右孩子的右孩子、……都與該結(jié)點(diǎn)的雙親結(jié)點(diǎn)用線連起來(lái)。

              2、刪掉原二叉樹(shù)中所有雙親結(jié)點(diǎn)與右孩子結(jié)點(diǎn)的連線。3.整理由1、2兩步所得到的樹(shù)或森林,使之結(jié)構(gòu)層次分明。

              對(duì)無(wú)向連通圖特性的理解

              無(wú)向圖的每條邊,在頂點(diǎn)計(jì)算度的過(guò)程中,都要兩次參與計(jì)算(與邊兩關(guān)聯(lián)的2個(gè)頂點(diǎn)),因此所有頂點(diǎn)的度之和為偶數(shù)。

              具有n個(gè)頂點(diǎn)的無(wú)向連通圖,其邊數(shù)大于或等于n-1。

              在無(wú)向連通圖中,所有頂點(diǎn)的度數(shù)都有可能大于1。

              對(duì)m階B樹(shù)定義的理解

              一棵m階的B樹(shù)滿足下列條件:

              1、每個(gè)結(jié)點(diǎn)至多有m棵子樹(shù)。

              2、除根結(jié)點(diǎn)外,其它每個(gè)分支至少有m/2棵子樹(shù)。

              3、根結(jié)點(diǎn)至少有兩棵子樹(shù)(除非B樹(shù)只有一個(gè)結(jié)點(diǎn))。

              4、所有葉結(jié)點(diǎn)在同一層上。B樹(shù)的葉結(jié)點(diǎn)可以看成一種外部結(jié)點(diǎn),不包含任何信息。

              5、有j個(gè)孩子的非葉結(jié)點(diǎn)恰好有j-1個(gè)關(guān)鍵碼,關(guān)鍵碼按遞增次序排列。結(jié)點(diǎn)中包含的信息為∶(p0,k1,p1,k2,p2,…,kj-1,pj-1),其中,ki為關(guān)鍵碼。

              帶權(quán)圖的最短路徑算法及應(yīng)用

              迪杰斯特拉(Di jkstra)算法求單源最短路徑,算法思想:

              設(shè)S為最短距離已確定的頂點(diǎn)集(看作紅點(diǎn)集),V-S是最短距離尚未確定的頂點(diǎn)集(看作藍(lán)點(diǎn)集)。

              1、初始化:初始化時(shí),只有源點(diǎn)s的最短距離是已知的(SD(s)=0),故紅點(diǎn)集S={s},藍(lán)點(diǎn)集為空。

              2、重復(fù)以下工作,按路徑長(zhǎng)度遞增次序產(chǎn)生各頂點(diǎn)最短路徑,在當(dāng)前藍(lán)點(diǎn)集中選擇一個(gè)最短距離最小的藍(lán)點(diǎn)來(lái)擴(kuò)充紅點(diǎn)集,以保證算法按路徑長(zhǎng)度遞增的次序產(chǎn)生各頂點(diǎn)的最短路徑。當(dāng)藍(lán)點(diǎn)集中僅剩下最短距離為∞的藍(lán)點(diǎn),或者所有藍(lán)點(diǎn)已擴(kuò)充到紅點(diǎn)集時(shí),s到所有頂點(diǎn)的最短路徑就求出來(lái)了。

              注意:①若從源點(diǎn)到藍(lán)點(diǎn)的路徑不存在,則可假設(shè)該藍(lán)點(diǎn)的最短路徑是一條長(zhǎng)度為無(wú)窮大的虛擬路徑。②從源點(diǎn)s到終點(diǎn)v的最短路徑簡(jiǎn)稱(chēng)為v的最短路徑;s到v的最短路徑長(zhǎng)度簡(jiǎn)稱(chēng)為v的最短距離,并記為SD(v)。

              堆排序

              大根堆的定義:完全二叉樹(shù),任一非葉子結(jié)點(diǎn)都大于等于它的孩子,也就是說(shuō)根結(jié)點(diǎn)是最大的。而且顯然大根堆的任一棵子樹(shù)也是大根堆。

              堆排序的基本思想:記錄區(qū)的分為無(wú)序區(qū)和有序區(qū)前后兩部分;用無(wú)序區(qū)的數(shù)建大根堆,得到的根(最大的數(shù))和無(wú)序區(qū)的最后一個(gè)數(shù)交換,也就是將該根歸入有序區(qū)的最前端;如此重復(fù)下去,直至有序區(qū)擴(kuò)展至整個(gè)記錄區(qū)。

              具體操作可按下面步驟實(shí)現(xiàn):

              1、建大根堆

              2、交換根和無(wú)序區(qū)最后一個(gè)數(shù)

              3、重建大根堆,因?yàn)榻粨Q只是使根改變了,所以左右子樹(shù)依然分別是大根堆。

              4、比較根,左子樹(shù)的根和右子樹(shù)的根,如果根最大,則無(wú)須再作調(diào)整,樹(shù)已經(jīng)是大根堆了;如果左子樹(shù)的根最大,交換它與根,再遞歸調(diào)整左子樹(shù);如果右子樹(shù)的根最大,交換它與根,再遞歸調(diào)整右子數(shù)。

              5、遞歸調(diào)整到葉子的時(shí)候,樹(shù)就是大根堆了。

              各類(lèi)排序算法的特點(diǎn)及比較

              幾種主要的排序算法:冒泡排序、選擇排序、插入排序、快速排序、歸并排序、Shell排序、堆排序等。

              冒泡排序算法思想:將待排序的元素看作是豎著排列的"氣泡",較小的元素比較輕,從而要往上浮。在冒泡排序算法中我們要對(duì)這個(gè)"氣泡"序列處理若干遍。所謂一遍處理,就是自底向上檢查一遍這個(gè)序列,并時(shí)刻注意兩個(gè)相鄰的元素的順序是否正確。如果發(fā)現(xiàn)兩個(gè)相鄰元素的順序不對(duì),即"輕"的元素在下面,就交換它們的位置。

              選擇排序算法思想:選擇排序的基本思想是對(duì)待排序的記錄序列進(jìn)行n-1遍的處理,第i遍處理是將L[i..n]中最小者與L[i]交換位置。這樣,經(jīng)過(guò)i遍處理之后,前i個(gè)記錄的位置已經(jīng)是正確的了。

              插入排序算法思想:經(jīng)過(guò)i-1遍處理后,L[1..i-1]己排好序。第i遍處理僅將L[i]插入L[1..i-1]的適當(dāng)位置,使得L[1..i]又是排好序的序列。

              快速排序算法思想:快速排序的基本思想是基于分治策略的。對(duì)于輸入的子序列L[p..r],如果規(guī)模足夠小則直接進(jìn)行排序,否則分三步處理:1.分解(Divide):將輸入的序列L[p..r]劃分成兩個(gè)非空子序列L[p..q]和L[q+1..r],使L[p..q]中任一元素的值不大于L[q+1..r]中任一元素的值。2.遞歸求解(Conquer):通過(guò)遞歸調(diào)用快速排序算法分別對(duì)L[p..q]和L[q+1..r]進(jìn)行排序。3.合并(Merge):由于對(duì)分解出的兩個(gè)子序列的排序是就地進(jìn)行的,所以在L[p..q]和L[q+1..r]都排好序后不需要執(zhí)行任何計(jì)算L[p..r]就已排好序。

              歸并排序算法思想:分而治之(divide-conquer)。每個(gè)遞歸過(guò)程涉及三個(gè)步驟:1.分解,把待排序的n個(gè)元素的序列分解成兩個(gè)子序列,每個(gè)子序列包括n/2個(gè)元素。2.治理,對(duì)每個(gè)子序列分別調(diào)用歸并排序MergeSort,進(jìn)行遞歸操作。3.合并,合并兩個(gè)排好序的子序列,生成排序結(jié)果。

              Shell排序算法思想:算法先將要排序的一組數(shù)按某個(gè)增量d分成若干組,每組中記錄的下標(biāo)相差d.對(duì)每組中全部元素進(jìn)行排序,然后再用一個(gè)較小的增量對(duì)它進(jìn)行,在每組中再進(jìn)行排序。當(dāng)增量減到1時(shí),整個(gè)要排序的數(shù)被分成一組,排序完成。

              堆排序算法思想:用大根堆排序的基本思想:1.先將初始文件R[1..n]建成一個(gè)大根堆,此堆為初始的無(wú)序區(qū)。2.再將關(guān)鍵字最大的記錄R[1](即堆頂)和無(wú)序區(qū)的最后一個(gè)記錄R[n]交換,由此得到新的無(wú)序區(qū)R[1..n-1]和有序區(qū)R[n],且滿足R[1..n-1].keys≤R[n].key。3.由于交換后新的根R[1]可能違反堆性質(zhì),故應(yīng)將當(dāng)前無(wú)序區(qū)R[1..n-1]調(diào)整為堆。