2019計(jì)算機(jī)考研專業(yè)課核心考點(diǎn)梳理(二)
帶權(quán)圖的最短路徑算法及應(yīng)用
迪杰斯特拉(Dijkstra)算法求單源最短路徑,算法思想:
設(shè)S為最短距離已確定的頂點(diǎn)集(看作紅點(diǎn)集),V-S是最短距離尚未確定的頂點(diǎn)集(看作藍(lán)點(diǎn)集)。
1.初始化:初始化時,只有源點(diǎn)s的最短距離是已知的(SD(s)=0),故紅點(diǎn)集S={s},藍(lán)點(diǎn)集為空。
2.重復(fù)以下工作,按路徑長度遞增次序產(chǎn)生各頂點(diǎn)最短路徑,在當(dāng)前藍(lán)點(diǎn)集中選擇一個最短距離最小的藍(lán)點(diǎn)來擴(kuò)充紅點(diǎn)集,以保證算法按路徑長度遞增的次序產(chǎn)生各頂點(diǎn)的最短路徑。當(dāng)藍(lán)點(diǎn)集中僅剩下最短距離為∞的藍(lán)點(diǎn),或者所有藍(lán)點(diǎn)已擴(kuò)充到紅點(diǎn)集時,s到所有頂點(diǎn)的最短路徑就求出來了。
注意:①若從源點(diǎn)到藍(lán)點(diǎn)的路徑不存在,則可假設(shè)該藍(lán)點(diǎn)的最短路徑是一條長度為無窮大的虛擬路徑。②從源點(diǎn)s到終點(diǎn)v的最短路徑簡稱為v的最短路徑;s到v的最短路徑長度簡稱為v的最短距離,并記為SD(v)。
堆排序
大根堆的定義:完全二叉樹,任一非葉子結(jié)點(diǎn)都大于等于它的孩子,也就是說根結(jié)點(diǎn)是最大的。而且顯然大根堆的任一棵子樹也是大根堆。
堆排序的基本思想:記錄區(qū)的分為無序區(qū)和有序區(qū)前后兩部分;用無序區(qū)的數(shù)建大根堆,得到的根(最大的數(shù))和無序區(qū)的最后一個數(shù)交換,也就是將該根歸入有序區(qū)的最前端;如此重復(fù)下去,直至有序區(qū)擴(kuò)展至整個記錄區(qū)。
具體操作可按下面步驟實(shí)現(xiàn):
1.建大根堆
2.交換根和無序區(qū)最后一個數(shù)
3.重建大根堆,因?yàn)榻粨Q只是使根改變了,所以左右子樹依然分別是大根堆。
4.比較根,左子樹的根和右子樹的根,如果根最大,則無須再作調(diào)整,樹已經(jīng)是大根堆了;如果左子樹的根最大,交換它與根,再遞歸調(diào)整左子樹;如果右子樹的根最大,交換它與根,再遞歸調(diào)整右子數(shù)。
5.遞歸調(diào)整到葉子的時候,樹就是大根堆了。
各類排序算法的特點(diǎn)及比較
幾種主要的排序算法:冒泡排序、選擇排序、插入排序、快速排序、歸并排序、Shell排序、堆排序等。
冒泡排序算法思想:將待排序的元素看作是豎著排列的“氣泡”,較小的元素比較輕,從而要往上浮。在冒泡排序算法中我們要對這個“氣泡”序列處理若干遍。所謂一遍處理,就是自底向上檢查一遍這個序列,并時刻注意兩個相鄰的元素的順序是否正確。如果發(fā)現(xiàn)兩個相鄰元素的順序不對,即“輕”的元素在下面,就交換它們的位置。
選擇排序算法思想:選擇排序的基本思想是對待排序的記錄序列進(jìn)行n-1遍的處理,第i遍處理是將L[i..n]中最小者與L[i]交換位置。這樣,經(jīng)過i遍處理之后,前i個記錄的位置已經(jīng)是正確的了。
插入排序算法思想:經(jīng)過i-1遍處理后,L[1..i-1]己排好序。第i遍處理僅將L[i]插入L[1..i-1]的適當(dāng)位置,使得L[1..i]又是排好序的序列。
快速排序算法思想:快速排序的基本思想是基于分治策略的。對于輸入的子序列L[p..r],如果規(guī)模足夠小則直接進(jìn)行排序,否則分三步處理:1.分解(Divide):將輸入的序列L[p..r]劃分成兩個非空子序列L[p..q]和L[q+1..r],使L[p..q]中任一元素的值不大于L[q+1..r]中任一元素的值。2.遞歸求解(Conquer):通過遞歸調(diào)用快速排序算法分別對L[p..q]和L[q+1..r]進(jìn)行排序。3.合并(Merge):由于對分解出的兩個子序列的排序是就地進(jìn)行的,所以在L[p..q]和L[q+1..r]都排好序后不需要執(zhí)行任何計(jì)算L[p..r]就已排好序。
歸并排序算法思想:分而治之(divide - conquer)。每個遞歸過程涉及三個步驟:1.分解,把待排序的n個元素的序列分解成兩個子序列,每個子序列包括n/2個元素。2.治理,對每個子序列分別調(diào)用歸并排序MergeSort,進(jìn)行遞歸操作。3.合并,合并兩個排好序的子序列,生成排序結(jié)果。
Shell排序算法思想:算法先將要排序的一組數(shù)按某個增量d分成若干組,每組中記錄的下標(biāo)相差d.對每組中全部元素進(jìn)行排序,然后再用一個較小的增量對它進(jìn)行,在每組中再進(jìn)行排序。當(dāng)增量減到1時,整個要排序的數(shù)被分成一組,排序完成。
堆排序算法思想:用大根堆排序的基本思想:1.先將初始文件R[1..n]建成一個大根堆,此堆為初始的無序區(qū)。2.再將關(guān)鍵字最大的記錄R[1](即堆頂)和無序區(qū)的最后一個記錄R[n]交換,由此得到新的無序區(qū)R[1..n-1]和有序區(qū)R[n],且滿足R[1..n-1].keys≤R[n].key。3.由于交換后新的根R[1]可能違反堆性質(zhì),故應(yīng)將當(dāng)前無序區(qū)R[1..n-1]調(diào)整為堆。
2022考研初復(fù)試已經(jīng)接近尾聲,考研學(xué)子全面進(jìn)入2023屆備考,跨考為23考研的考生準(zhǔn)備了10大課包全程準(zhǔn)備、全年復(fù)習(xí)備考計(jì)劃、目標(biāo)院校專業(yè)輔導(dǎo)、全真復(fù)試模擬練習(xí)和全程針對性指導(dǎo);2023考研的小伙伴針也已經(jīng)開始擇校和復(fù)習(xí)了,跨考考研暢學(xué)5.0版本全新升級,無論你在校在家都可以更自如的完成你的考研復(fù)習(xí),暑假集訓(xùn)營帶來了院校專業(yè)初步選擇,明確方向;考研備考全年規(guī)劃,核心知識點(diǎn)入門;個性化制定備考方案,助你贏在起跑線,早出發(fā)一點(diǎn)離成功就更近一點(diǎn)!
考研院校專業(yè)選擇和考研復(fù)習(xí)計(jì)劃 | |||
2023備考學(xué)習(xí) | 2023線上線下隨時學(xué)習(xí) | 34所自劃線院??佳袕?fù)試分?jǐn)?shù)線匯總 | |
2022考研復(fù)試最全信息整理 | 全國各招生院??佳袕?fù)試分?jǐn)?shù)線匯總 | ||
2023全日制封閉訓(xùn)練 | 全國各招生院校考研調(diào)劑信息匯總 | ||
2023考研先知 | 考研考試科目有哪些? | 如何正確看待考研分?jǐn)?shù)線? | |
不同院校相同專業(yè)如何選擇更適合自己的 | 從就業(yè)說考研如何擇專業(yè)? | ||
手把手教你如何選專業(yè)? | 高校研究生教育各學(xué)科門類排行榜 |
相關(guān)推薦
跨考考研課程
班型 | 定向班型 | 開班時間 | 高定班 | 標(biāo)準(zhǔn)班 | 課程介紹 | 咨詢 |
秋季集訓(xùn) | 沖刺班 | 9.10-12.20 | 168000 | 24800起 | 小班面授+專業(yè)課1對1+專業(yè)課定向輔導(dǎo)+協(xié)議加強(qiáng)課程(高定班)+專屬規(guī)劃答疑(高定班)+精細(xì)化答疑+復(fù)試資源(高定班)+復(fù)試課包(高定班)+復(fù)試指導(dǎo)(高定班)+復(fù)試班主任1v1服務(wù)(高定班)+復(fù)試面授密訓(xùn)(高定班)+復(fù)試1v1(高定班) | |
2023集訓(xùn)暢學(xué) | 非定向(政英班/數(shù)政英班) | 每月20日 | 22800起(協(xié)議班) | 13800起 | 先行階在線課程+基礎(chǔ)階在線課程+強(qiáng)化階在線課程+真題階在線課程+沖刺階在線課程+專業(yè)課針對性一對一課程+班主任全程督學(xué)服務(wù)+全程規(guī)劃體系+全程測試體系+全程精細(xì)化答疑+擇校擇專業(yè)能力定位體系+全年關(guān)鍵環(huán)節(jié)指導(dǎo)體系+初試加強(qiáng)課+初試專屬服務(wù)+復(fù)試全科標(biāo)準(zhǔn)班服務(wù) |