美文网首页
nodejs 并查集

nodejs 并查集

作者: XiangCheng | 来源:发表于2014-08-07 11:17 被阅读0次

function UnionFind(row, col, idx){

var o = new Object();

o.array = new Array(row*col);

o.isRandom = new Array(row*col);

o.init = function(row, col, idx){

for (var i = 0; i < row*col; i++){

o.isRandom[i] = 0;

o.array[i] = i;

}

for (var i = 0; i < idx; i++){

var num = Math.round(Math.random()*row*col);

//console.log(num);

if (o.isRandom[num]) i--;

else {

o.isRandom[num] = 1;

if (num%row>0 && o.isRandom[num-1]) o.union(num, num-1);

if (num%row<row-1 && o.isRandom[num+1]) o.union(num, num+1);

if (num%row>0 && o.isRandom[num-row]) o.union(num, num-row);

if (num%row<col-1 && o.isRandom[num+row]) o.union(num, num+);

}

}

//console.log(uf.printArray(100,100));

};

o.root = function(i){

while (i != o.array[i]){

o.array[i] = o.array[o.array[i]];

i = o.array[i];

}

return i;

};

o.connected = function(p, q){

return o.root(p) == o.root(q);

};

o.union = function(p, q){

o.array[o.root(p)] = o.root(q);

};

o.percolation = function(row, col){

for (var i = 0; i < row; i++){

for (var j = 0; j < col; j++){

//console.log(o.printArray(20,20));

//console.log(o.connected(i, (row-1)*col+j));

if(o.connected(i, (row-1)*col+j)) return true;

}

}

return false;

};

o.printArray = function(row, col){

for (var i = 0; i < col; i++){

console.log(o.array.slice(i*row, (i+1)*row));

}

};

return o;

}

var uf = new UnionFind(100, 100, 1);

var j = 1;

//uf.init(100, 100, 1100);

//console.log(uf.printArray(100,100));

//uf.percolation(100, 100)

var sum = 0;

//console.log(uf.printArray(100,100));

for (var i = 0; i < 1000; i++){

var j = 1;

uf.init(100, 100, 1);

//console.log(uf.printArray(100, 100));

while(!uf.percolation(100, 100)){

uf.init(100, 100, j);

j = j+1;

}

sum += j;

console.log(j/10000);

}

console.log(sum/10000000);

相关文章

  • nodejs 并查集

    function UnionFind(row, col, idx){ var o = new Object(); ...

  • markdown学习

    #并查集 ##并查集的定义 ##并查集的操作

  • 算法模板(四)并查集

    并查集 路径压缩并查集

  • 并查集入门使用

    本文参考自《算法笔记》并查集篇 并查集的定义 什么是并查集?并查集可以理解为是一种维护数据集合的结构。名字中并查集...

  • 并查集练习

    并查集 参考《算法笔记》 三要素:并,查,集。 并差集与一个算法有关,kruskal算法,就可通过并查集实现。 1...

  • 并查集

    并查集 并查集是什么 并查集是一种用来管理元素分组情况的数据结构,并查集可以高效地进行如下操作: 查询元素a和元素...

  • 数据结构与算法(十二)并查集(Union Find)

    本文主要包括以下内容: 并查集的概念 并查集的操作 并查集的实现和优化Quick FindQuick Union基...

  • 并查集

    并查集是什么 并查集是一种用来管理元素分组情况的数据结构。并查集可以高效地进行如下操作。不过需要注意并查集虽然可以...

  • 并查集

    开始时让每个元素构成一个个单元素集合(注意初始化时应使每个元素各成一组)按照一定顺序将属于同一组元素所在的集合合并...

  • 并查集

网友评论

      本文标题:nodejs 并查集

      本文链接:https://www.haomeiwen.com/subject/jlletttx.html