js實現prim 優先佇列

2021-08-01 10:55:05 字數 1956 閱讀 7830

最近在學演算法,沉迷於js的我,就想用js敲一敲這個prim演算法,至於prim演算法具體是什麼,怎麼回事,大家可以自行搜尋,這裡只貼上**和部分註解

資料是從檔案裡讀出來的所以用了一下node.js,資料格式如下

7 9

1 2 28

1 6 10

2 7 14

2 3 16

6 5 25

7 5 24

7 4 18

3 4 12

5 4 22

var fs = require('fs')

var path = require('path');

var q = require("q");

var max = 100000;

var dingdian;//頂點數

var bian;//邊數

var edge = ;//矩陣

var node = // 記錄節點

var addnew = ; //設定頂點是否加入到集合

// 優先佇列資料結構

function

priorityqueue

() this.element = element;

this.priority = priority;

}this.enqueue = function

(element, priority)

items.splice(i,0,queueelement); //

added = true;

break; // }}

if (!added)}};

this.dequeue = function

(); this.front = function

(); this.isempty = function

(); this.size = function

(); }

var q = new priorityqueue(); //建立優先佇列

//初始化輸入矩陣

function

initrect

(length)

}}//讀取資料

function

preadfile

(file)else

});return deferred.promise;

}var filein = path.resolve('input.txt')

preadfile(filein).then(function

(data)else

if(_arr.length === 3) else

}//求值

var result = prim(dingdian, edge);

var _arr = ;

for(key in result)

_arr.splice(0,1);

console.log(max)//結果是25

});// 開始prim演算法 prim([頂點數],[矩陣])

function

prim

(dingdian, edge)

node[i].element = i;

node[i].priority = max;

addnew[i] = false; //把所有點都設定成沒有放入

}// console.log('node',node[1])

node[1].priority = 0; //從起始點開始找

q.enqueue(node[1].element, node[1].priority)//把權最小的放入佇列

while(!q.isempty())

addnew[flag] = true;

for(var j=1; j1; j++) }}

return node

}

Prim最小生成樹 優先佇列優化

處理何種問題 求解無向連通圖的最小生成樹,適合於稠密圖,即點少邊多的無向圖。效能 時間複雜度為 o v loge v為點的個數,e為邊的個數 原理 貪心策略。實現步驟 正向模擬找連線點。即取任意一點,放入集合,找此點集合內最短的邊且邊的另一端點不在該集合內的點,將改點放入點集合內,重複此操作,直至所...

JS實現佇列

佇列是一種特殊的線性表,特殊之處在於它只允許在表的前端 front 進行刪除操作,而在表的後端 rear 進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。佇列是遵循fifo first in first out,先進先出,也稱為先來先服務 原...

js實現佇列

佇列是一種列表,不同的是佇列只能在隊尾插入元素,在隊首刪除元素。可以將佇列想象成在銀行前排隊的人群,排在最前面的人第乙個辦理業務,新來的人只能在後面排隊,直到輪到他們為止。push 向隊尾插入元素 queue 在隊首移除元素 peek 檢視隊首的元素 datestore 使用陣列儲存 var que...