摘要:堆的算法優先隊列是一種抽象數據類型,最重要的操作是刪除最大元素和插入元素。用長度為的數組來表示一個大小為的堆,堆元素放在至中,不使用。由下至上的堆有序化上浮的實現由上至下的堆有序化下沉的實現堆實現的比較和交換方法
堆的算法
優先隊列是一種抽象數據類型,最重要的操作是刪除最大元素和插入元素。
用長度為N+1的數組pq[]來表示一個大小為N的堆,堆元素放在pq[1]至pq[N]中,不使用pq[0]。
function MaxPQ(){ var pq = [], n = 0; this.show = function(){ console.log(pq); } this.insert = function(v){ pq[++n] = v; swim(n); } this.delMax = function(){ var max = pq[1]; exch(1, n--); pq[n+1] = null; sink(1); return max; } //由下至上的堆有序化(上浮)的實現 function swim(k){ while((k > 1) && less(Math.floor(k/2), k)){ exch(Math.floor(k/2), k); k = Math.floor(k/2); } } //由上至下的堆有序化(下沉)的實現 function sink(k){ while(2*k <= n){ var j = 2*k; if((j < n) && less(j, j+1)){ j++; } if(!less(k, j)){ break; } exch(k, j); k = j; } } //堆實現的比較和交換方法 function less(i, j){ return pq[i] < pq[j]; } function exch(i, j){ var temp = pq[i]; pq[i] = pq[j]; pq[j] = temp; } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/90881.html
摘要:隊列是遵行先進先出原則的一組有序的項。優先隊列是默認隊列的變種,它的元素的添加和移除是基于優先級的。如此循環,直至隊列的長度等于,返回勝者行。同時,還掌握了很著名的優先隊列循環隊列這兩種結構。 《學習JavaScript數據結構與算法》讀書筆記。 隊列是遵行FIFO(First In First Out, 先進先出)原則的一組有序的項。隊列再尾部添加新元素,并從頂部移除元素。 在現實中...
摘要:隊列遵循原則的一組有序的項向隊列尾部添加一個項移除隊列的第一項返回隊列中第一項,對隊列本身不做修改判斷隊列是否為空返回隊列包含的元素個數優先隊列根據優先級添加項最小優先隊列移除隊列的第一項返回隊列中第一項,對隊列本身不做修改判斷隊列是否 隊列遵循FIFO(First In First Out)原則的一組有序的項 let Queue = (function () { let it...
摘要:棧被稱為一種后入先出的數據結構。散列使用的數據結構叫做散列表。這些操作需要求助于其他數據結構,比如下面介紹的二叉查找樹。 前言 在過去的幾年中,得益于Node.js的興起,JavaScript越來越廣泛地用于服務器端編程。鑒于JavaScript語言已經走出了瀏覽器,程序員發現他們需要更多傳統語言(比如C++和Java)提供的工具。這些工具包括傳統的數據結構(如鏈表,棧,隊列,圖等),...
摘要:解決最短路徑問題的算法被稱為廣度優先搜索。廣度優先搜索算法最早由年在如何從迷宮中尋找出路這一問題中提出。廣度優先搜索讓你能夠找出兩樣東西之間的最短距離。使用廣度優先搜索解決問題。 你經常需要解決最短路徑問題(shorterst-path problem)。解決最短路徑問題的算法被稱為廣度優先搜索。廣度優先搜索算法最早由Edward F. Moore 1959年在如何從迷宮中尋找出路這一...
閱讀 3564·2023-04-26 00:05
閱讀 954·2021-11-11 16:55
閱讀 3523·2021-09-26 09:46
閱讀 3517·2019-08-30 15:56
閱讀 909·2019-08-30 15:55
閱讀 2934·2019-08-30 15:53
閱讀 1940·2019-08-29 17:11
閱讀 814·2019-08-29 16:52