亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

數據結構之堆詳解

2020-01-26 15:22:10
字體:
來源:轉載
供稿:網友

1. 概述

堆(也叫優先隊列),是一棵完全二叉樹,它的特點是父節點的值大于(小于)兩個子節點的值(分別稱為大頂堆和小頂堆)。它常用于管理算法執行過程中的信息,應用場景包括堆排序,優先隊列等。

2. 堆的基本操作

堆是一棵完全二叉樹,高度為O(lg n),其基本操作至多與樹的高度成正比。在介紹堆的基本操作之前,先介紹幾個基本術語:

A:用于表示堆的數組,下標從1開始,一直到n
PARENT(t):節點t的父節點,即floor(t/2)
RIGHT(t):節點t的左孩子節點,即:2*t
LEFT(t):節點t的右孩子節點,即:2*t+1
HEAP_SIZE(A):堆A當前的元素數目
下面給出其主要的四個操作(以大頂堆為例):
2.1 Heapify(A,n,t)
該操作主要用于維持堆的基本性質。假定以RIGHT(t)和LEFT(t)為根的子樹都已經是堆,然后調整以t為根的子樹,使之成為堆。

復制代碼 代碼如下:

void Heapify(int A[], int n, int t)
 
{
 
  int left = LEFT(t);
 
  int right = RIGHT(t);
 
  int max = t;
 
  if(left <= n)     max = A[left] > A[max] ? left : max;
 
  if(right <= n)     max = A[right] > A[max] ? right : max;
 
  if(max != A[t])
 
  {
 
    swap(A, max, t);
 
    Heapify(A, n, max);
 
  }
 
}

2.2  BuildHeap(A,n)
該操作主要是將數組A轉化成一個大頂堆。思想是,先找到堆的最后一個非葉子節點(即為第n/2個節點),然后從該節點開始,從后往前逐個調整每個子樹,使之稱為堆,最終整個數組便是一個堆。
復制代碼 代碼如下:

void BuildHeap(int A[], int n)
 
{
 
  int i;
 
  for(i = n/2; i<=n; i++)
 
  Heapify(A, n, i);
 
}

2.3 GetMaximum(A,n)
該操作主要是獲取堆中最大的元素,同時保持堆的基本性質。堆的最大元素即為第一個元素,將其保存下來,同時將最后一個元素放到A[1]位置,之后從上往下調整A,使之成為一個堆。
復制代碼 代碼如下:

void GetMaximum(int A[], int n)
 
{
 
  int max = A[1];
 
  A[1] = A[n];
 
  n--;
 
  Heapify(A, n, 1);
 
  return max;
 
}

2.4  Insert(A, n, t)
向堆中添加一個元素t,同時保持堆的性質。算法思想是,將t放到A的最后,然后從該元素開始,自下向上調整,直至A成為一個大頂堆。
復制代碼 代碼如下:

void Insert(int A[], int n, int t)
 
{
 
  n++;
 
  A[n] = t;
 
  int p = n;
 
  while(p >1 && A[PARENT(p)] < t)
 
  {
 
    A[p] = A[PARENT(p)];
 
    p = PARENT(p);
 
  }
 
  A[p] = t;
 
  return max;
 
}

3.  堆的應用

3.1  堆排序
堆的最常見應用是堆排序,時間復雜度為O(N lg N)。如果是從小到大排序,用大頂堆;從大到小排序,用小頂堆。

3.2  在O(n lg k)時間內,將k個排序表合并成一個排序表,n為所有有序表中元素個數。

【解析】取前100 萬個整數,構造成了一棵數組方式存儲的具有小頂堆,然后接著依次取下一個整數,如果它大于最小元素亦即堆頂元素,則將其賦予堆頂元素,然后用Heapify調整整個堆,如此下去,則最后留在堆中的100萬個整數即為所求 100萬個數字。該方法可大大節約內存。
3.3 一個文件中包含了1億個隨機整數,如何快速的找到最大(小)的100萬個數字?(時間復雜度:O(n lg k))

4. 總結

堆是一種非?;A但很實用的數據結構,很多復雜算法或者數據結構的基礎就是堆,因而,了解和掌握堆這種數據結構顯得尤為重要。

5. 參考資料

(1)經典算法教程《算法導論》

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕亚洲一区二区三区五十路| 日本精品一区二区三区在线播放视频| 亚洲成人av资源网| 国产精品自拍小视频| 欧美裸体男粗大视频在线观看| 亚洲图片欧美午夜| 日本成人激情视频| 日韩av电影在线播放| 日韩精品中文字幕在线播放| 国产精品嫩草影院久久久| 亚洲精品国精品久久99热| 日韩在线中文字| 亚洲国产欧美日韩精品| 国产欧美日韩中文字幕在线| 国产一区二区三区免费视频| 日韩免费观看视频| 欧美性猛交xxxx黑人| 国产97在线播放| 午夜精品久久久久久久久久久久久| 欧美影院久久久| 国产精品99导航| 国产精品日日做人人爱| 国产精品极品在线| 亚洲深夜福利在线| 欧美—级a级欧美特级ar全黄| 欧美精品成人91久久久久久久| 亚洲精品一区二区三区不| 国产亚洲欧美日韩美女| 亚洲图片欧美日产| 久久中文字幕在线| 日韩av电影院| 91精品久久久久久久| 色偷偷av一区二区三区乱| 欧美性少妇18aaaa视频| 成人高清视频观看www| 成人乱人伦精品视频在线观看| 欧美视频中文在线看| 久久婷婷国产麻豆91天堂| 成人xxxxx| 亚洲毛片在线免费观看| 欧美国产日韩一区二区三区| 精品成人乱色一区二区| 欧美日韩精品在线观看| 国产精品一区二区久久久久| 久久不射电影网| 亚洲国产精品小视频| 久久综合电影一区| 久久久精品国产亚洲| 精品视频在线播放免| 欧美成人自拍视频| 亚洲久久久久久久久久| 亚洲国内精品视频| 日韩av在线播放资源| 国产精品一香蕉国产线看观看| 草民午夜欧美限制a级福利片| 欧美激情第三页| 91网站在线看| 亚洲国产精品美女| 另类天堂视频在线观看| 一本色道久久综合狠狠躁篇的优点| 7m第一福利500精品视频| 色播久久人人爽人人爽人人片视av| 国产成人精彩在线视频九色| 成人福利视频在线观看| 少妇高潮久久77777| 色综合导航网站| 97在线免费观看视频| 亚洲欧美中文日韩在线v日本| 欧美乱大交做爰xxxⅹ性3| 91精品国产色综合| 国产婷婷97碰碰久久人人蜜臀| 国产一区二区三区在线观看视频| 日韩亚洲国产中文字幕| www.欧美精品| 欧美成人午夜剧场免费观看| 福利视频导航一区| 尤物yw午夜国产精品视频明星| 久久这里只有精品99| 热99在线视频| 91久久久久久久久久久久久| 亚洲在线观看视频| 国产精品第三页| 韩剧1988免费观看全集| 亚洲国产美女精品久久久久∴| 国产在线不卡精品| 亚洲人午夜精品免费| 欧美在线视频网站| 欧美乱大交xxxxx| 岛国av一区二区| 国产精品视频大全| 亚洲免费人成在线视频观看| 热99精品只有里视频精品| 亚洲国产精品va在线观看黑人| 97超视频免费观看| 中文字幕一区日韩电影| 91国语精品自产拍在线观看性色| 永久免费毛片在线播放不卡| 成人黄色大片在线免费观看| 国色天香2019中文字幕在线观看| 亚洲国产精品久久久久秋霞不卡| 欧美视频不卡中文| 亚洲精品按摩视频| 欧美精品少妇videofree| 国产成人精品免高潮在线观看| 亚洲国产精品电影| 91探花福利精品国产自产在线| 亚洲欧美综合精品久久成人| 国产精品免费电影| 欧美国产日韩xxxxx| 97在线视频免费看| 久久久国产成人精品| 亚洲天堂2020| 国模叶桐国产精品一区| 欧美激情中文字幕乱码免费| 久久久久国产一区二区三区| 亚洲丝袜av一区| 亚洲欧美日韩一区二区在线| 国产91精品久久久久久| 国产精品丝袜久久久久久高清| 欧美性xxxx极品hd满灌| 91精品国产电影| 日韩欧美在线观看视频| 精品中文字幕久久久久久| 中文在线不卡视频| 国产欧美日韩综合精品| 亚洲高清久久网| 国产精品91一区| 国外日韩电影在线观看| 亚洲综合精品一区二区| 亚洲网址你懂得| 尤物99国产成人精品视频| 欧美日韩中文字幕综合视频| 91av视频在线免费观看| 亚洲欧洲成视频免费观看| 国产精品欧美日韩久久| 国产精品精品久久久| 精品一区二区电影| 国产91精品久久久| 自拍偷拍亚洲在线| 久久视频在线观看免费| 97国产精品视频人人做人人爱| 91麻豆国产精品| 在线日韩日本国产亚洲| 国产精品视频网| 国产一区av在线| 成人av色在线观看| 红桃视频成人在线观看| 一区二区成人精品| 亚洲第一区中文99精品| 91精品国产91久久久久久最新| 91高清在线免费观看| 日韩精品极品在线观看播放免费视频| 国产在线精品成人一区二区三区| 成人精品视频久久久久| www亚洲精品| 亚洲午夜av电影| 91在线高清视频| 热久久美女精品天天吊色| 亚洲区中文字幕| 国产精品视频1区| 插插插亚洲综合网| 欧洲美女免费图片一区| 91在线直播亚洲| 97国产成人精品视频|