国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

備案 網(wǎng)站名稱 重復(fù)百度指數(shù)移動(dòng)版

備案 網(wǎng)站名稱 重復(fù),百度指數(shù)移動(dòng)版,寧波seo推廣公司電話,wordpress建什么網(wǎng)站好🌹個(gè)人主頁🌹:喜歡草莓熊的bear 🌹專欄🌹:數(shù)據(jù)結(jié)構(gòu) 目錄 前言 一、堆的實(shí)現(xiàn) 1.1 堆的向下調(diào)整算法 思路: 1.2 堆的向上調(diào)整算法 1.3 堆的創(chuàng)建 1.4 堆的復(fù)雜度計(jì)算 向下調(diào)整建堆的復(fù)雜度…

? ? ? ? ? ? ? ? ? ? ? ? ? ?🌹個(gè)人主頁🌹:喜歡草莓熊的bear

? ? ? ? ? ? ? ? ? ? ? ? ? ?🌹專欄🌹:數(shù)據(jù)結(jié)構(gòu)


目錄

前言

一、堆的實(shí)現(xiàn)

1.1 堆的向下調(diào)整算法

思路:

1.2 堆的向上調(diào)整算法

1.3?堆的創(chuàng)建

1.4?堆的復(fù)雜度計(jì)算

向下調(diào)整建堆的復(fù)雜度:

? 向上調(diào)整建堆的復(fù)雜度:

1.5?堆的插入

1.6?堆的刪除

1.7?堆的代碼實(shí)現(xiàn)

總結(jié)


前言

在上期內(nèi)容介紹了二叉樹、還簡單提了一下堆的概念和大堆、小堆?;仡櫼幌露咽鞘紫仁峭耆鏄?#xff0c;因?yàn)槭峭耆鏄渌允褂脭?shù)組儲(chǔ)存比較合理。

一、堆的實(shí)現(xiàn)

1.1 堆的向下調(diào)整算法

現(xiàn)在我們給出一個(gè)數(shù)組,邏輯上看做一顆完全二叉樹。我們通過從根節(jié)點(diǎn)開始的向下調(diào)整算法可以把它調(diào)整成一個(gè)小堆。向下調(diào)整算法有一個(gè)前提:左右子樹必須是一個(gè)堆,才能調(diào)整。
給上一個(gè)例子
int arr[] = {27,15,19,18,28,34,65,49,25,37};

?上面這幅圖就是向下調(diào)整的算法的過程圖

思路:

?假設(shè)我們通過向下調(diào)整算法建立小堆,我們就需要從根的左右子樹開始,比較得出左右子樹小的那一個(gè)和根比較,誰小誰就是根。我們之前還介紹父親節(jié)點(diǎn)和孩子節(jié)點(diǎn)的概念,我們這里就要使用到。根據(jù)我們上面的思路,向下調(diào)整算法需要通過比較還在節(jié)點(diǎn)后進(jìn)行調(diào)整。所以我們需要知道父親節(jié)點(diǎn)然后再找到孩子節(jié)點(diǎn)為什么要知道父親節(jié)點(diǎn)呢?我們通過數(shù)組儲(chǔ)存著堆,下標(biāo)就可以幫助我們找到孩子節(jié)點(diǎn)。

?大致思路就是這樣我們來寫代碼:

void Swap(HPDataType* x, HPDataType* y)//交換數(shù)據(jù)
{HPDataType tmp = *x;*x = *y;*y = tmp;
}void ADjustDown(HPDataType* a, int n,int parent)//向下調(diào)整
{int child = parent * 2 + 1;while (child < n){//假設(shè)法if (a[child] > a[child + 1] && child + 1 < n)//比較左右子樹,找到較小的子樹。{child++;}if (a[parent] > a[child])//數(shù)據(jù)交換{Swap(&a[child], &a[parent]);parent = child;child = parent * 2 + 1;}else{break;}}
}

?解釋一下個(gè)別代碼,child + 1? < n 防止數(shù)組越界。?

1.2 堆的向上調(diào)整算法

?向上調(diào)整我們需要從最后一層向上調(diào)整,所以我們是通過孩子節(jié)點(diǎn)得到父親節(jié)點(diǎn)。大致思路和向下調(diào)整一樣,比較孩子節(jié)點(diǎn)的大小后再和父親節(jié)點(diǎn)比較一直比較到根節(jié)點(diǎn)。根據(jù)child = parent *2+1 反推得到 parent = ( child -1 )/2 。

直接上代碼:

void Swap(HPDataType* x, HPDataType* y)//交換數(shù)據(jù)
{HPDataType tmp = *x;*x = *y;*y = tmp;
}void ADjustUp(HPDataType* a,int child)//向上調(diào)整
{int parent = (child - 1) / 2;while (child > 0){if (a[child] < a[parent]){Swap(&a[child], &a[parent]);child = parent;parent= (child - 1) / 2;}else{break;}}
}

1.3?堆的創(chuàng)建

下面我們給出一個(gè)數(shù)組,這個(gè)數(shù)組邏輯上可以看做一顆完全二叉樹,但是還不是一個(gè)堆,現(xiàn)在我們通過算法,把它構(gòu)建成一個(gè)堆。根節(jié)點(diǎn)左右子樹不是堆,我們?cè)趺凑{(diào)整呢?這里我們從倒數(shù)的第一個(gè)非葉子節(jié)點(diǎn)的子樹開始調(diào)整,一直調(diào)整到根節(jié)點(diǎn)的樹,就可以調(diào)整成堆。
給上一個(gè)例子:
int a[] = {1,5,3,8,7,6};

1.4?堆的復(fù)雜度計(jì)算

因?yàn)槎咽峭耆鏄?#xff0c;而滿二叉樹也是完全二叉樹,此處為了簡化使用滿二叉樹來證明 ( 時(shí)間復(fù)雜度本來看的就是近似值,多幾個(gè)節(jié)點(diǎn)不影響最終結(jié)果)

向下調(diào)整建堆的復(fù)雜度:

? 向上調(diào)整建堆的復(fù)雜度:

是O(N) = N * logN 得到方法和向下調(diào)整一樣推導(dǎo)就可以了。

1.5?堆的插入

先插入一個(gè) 10 到數(shù)組的尾上,再進(jìn)行向上調(diào)整算法,直到滿足堆。

?堆的插入需要用的向上調(diào)整

1.6?堆的刪除

刪除堆是刪除堆頂?shù)臄?shù)據(jù),將堆頂?shù)臄?shù)據(jù)根最后一個(gè)數(shù)據(jù)一換,然后刪除數(shù)組最后一個(gè)數(shù)據(jù),再進(jìn)行向下調(diào)整算法。

?

1.7?堆的代碼實(shí)現(xiàn)

堆的初始化、銷毀都是很簡單和之前寫的棧啊等等都十分相似。剩下一些 獲取堆頂元素、堆的個(gè)數(shù)、堆的判斷都比較簡單就不講解了給上了代碼。

typedef int HPDataType;typedef struct Heap//因?yàn)槎训亩x就是滿二叉樹與完全二叉樹,用數(shù)組儲(chǔ)存非常好。
{HPDataType* a;//數(shù)組int size;int capacity;
}Heap;//小堆情況下的初始化
void HPInit(Heap* php)
{assert(php);php->a = NULL;php->size = php->capacity = 0;
}//銷毀
void HPDestory(Heap* php)
{assert(php);free(php->a);php->a = NULL;php->size = php->capacity = 0;
}void Swap(HPDataType* x, HPDataType* y)//交換數(shù)據(jù)
{HPDataType tmp = *x;*x = *y;*y = tmp;
}void ADjustUp(HPDataType* a,int child)//向上調(diào)整
{int parent = (child - 1) / 2;while (child > 0){if (a[child] < a[parent]){Swap(&a[child], &a[parent]);child = parent;parent= (child - 1) / 2;}else{break;}}
}void ADjustDown(HPDataType* a, int n,int parent)//向下調(diào)整
{int child = parent * 2 + 1;while (child < n){//假設(shè)法if (a[child] > a[child + 1] && child + 1 < n){child++;}if (a[parent] > a[child]){Swap(&a[child], &a[parent]);parent = child;child = parent * 2 + 1;}else{break;}}
}//入堆
void HPPush(Heap* php, HPDataType x)
{assert(php);//擴(kuò)容if (php->size == php->capacity){int Newcapacity = php->capacity == 0 ? 4 : php->capacity * 2;HPDataType* tmp = (HPDataType*)realloc(php->a, Newcapacity * sizeof(HPDataType));if (tmp == NULL){perror("ralloc fail");return;}php->a = tmp;php->capacity = Newcapacity;}php->a[php->size++] = x; ADjustUp(php->a,php->size - 1);
}//出堆(消除堆頂數(shù)據(jù))
void HPPop(Heap* php)
{assert(php);assert(php->size > 0);Swap(&php->a[0], &php->a[php->size - 1]);php->size--;ADjustDown(php->a,php->size,0);
}//取堆頂數(shù)據(jù)
HPDataType HPTop(Heap* php)
{assert(php);assert(php->size > 0);return php->a[0];
}//堆的數(shù)據(jù)個(gè)數(shù)
int HPSize(Heap* php)
{assert(php);return php->size;
}//堆的判空
bool HPEmpty(Heap* php)
{assert(php);return php->size == 0;
}

總結(jié)

本節(jié)重點(diǎn)堆的向上、向下調(diào)整算法的代碼實(shí)現(xiàn) 和 復(fù)雜度計(jì)算。

http://m.aloenet.com.cn/news/40148.html

相關(guān)文章:

  • 帝國手機(jī)網(wǎng)站模板我想在百度發(fā)布信息
  • 網(wǎng)站數(shù)據(jù)分析工具有哪些網(wǎng)站推廣seo是什么
  • wamp做的網(wǎng)站外網(wǎng)怎么訪問自媒體推廣渠道有哪些
  • 為客戶做網(wǎng)站的方案上海seo優(yōu)化公司
  • 南昌做網(wǎng)站今日要聞
  • 亳州電商網(wǎng)站建設(shè)南京百度網(wǎng)站推廣
  • 增城網(wǎng)站建設(shè)網(wǎng)站seo優(yōu)化是什么意思
  • 成免費(fèi)crm是什么鄭州網(wǎng)站優(yōu)化
  • 官方網(wǎng)站套餐最近社會(huì)熱點(diǎn)新聞事件
  • 織夢做的網(wǎng)站首頁打不開守游網(wǎng)絡(luò)推廣平臺(tái)
  • 做商城網(wǎng)站那個(gè)好上海網(wǎng)站制作推廣
  • 廈門網(wǎng)站制作公司推薦html制作網(wǎng)頁代碼
  • 電子商務(wù)自助建網(wǎng)站百度入口提交
  • 品牌展板設(shè)計(jì)制作seo免費(fèi)軟件
  • 網(wǎng)站被模仿如何維權(quán)青島seo整站優(yōu)化哪家專業(yè)
  • ps企業(yè)網(wǎng)站模板免費(fèi)下載百度網(wǎng)盤官方
  • 重慶企業(yè)網(wǎng)站推廣公司合肥網(wǎng)
  • 羅湖中心區(qū)做網(wǎng)站怎么樣建一個(gè)網(wǎng)站
  • 廣州設(shè)計(jì)公司網(wǎng)站廣告營銷案例100例
  • 網(wǎng)站開發(fā)費(fèi)入什么費(fèi)用中國十大企業(yè)培訓(xùn)公司
  • 國外做美食視頻網(wǎng)站有哪些寧波seo外包服務(wù)
  • 柳市網(wǎng)站托管西安網(wǎng)站制作建設(shè)
  • 河池建設(shè)銀行招聘網(wǎng)站百度推廣客服投訴電話
  • 溫州網(wǎng)站設(shè)計(jì)定制市場營銷最有效的手段
  • mvc5網(wǎng)站開發(fā)之美電子版可靠的網(wǎng)站優(yōu)化
  • dnf怎么做提卡網(wǎng)站谷歌網(wǎng)站收錄提交入口
  • 山東網(wǎng)站排行免費(fèi)的關(guān)鍵詞優(yōu)化軟件
  • 自己做pc網(wǎng)站建設(shè)愛站網(wǎng)挖掘詞
  • 哪些企業(yè)需要網(wǎng)站建設(shè)的微信客戶管理系統(tǒng)
  • 網(wǎng)站建設(shè)時(shí)如何建立客戶信賴感杭州seo排名