資料結構之堆Heap_資料結構

來源:互聯網
上載者:User
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為根的子樹,使之成為堆。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 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)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.