private static void Compute() { var size = 200; var quickFind = new QuickFindUf(size); var quickUnion = new QuickUnionUf(size); var weightedQuickUnion = new WeightedQuickUnionUf(size); var connections = ErdosRenyi.Generate(size); var quickFindResult = new int[size]; var quickUnionResult = new int[size]; var weightedQuickUnionResult = new int[size]; int p, q; for (var i = 0; i < size; i++) { p = connections[i].P; q = connections[i].Q; quickFind.Union(p, q); quickUnion.Union(p, q); weightedQuickUnion.Union(p, q); quickFindResult[i] = quickFind.ArrayVisitCount; quickUnionResult[i] = quickUnion.ArrayVisitCount; weightedQuickUnionResult[i] = weightedQuickUnion.ArrayParentVisitCount + weightedQuickUnion.ArraySizeVisitCount; quickFind.ResetArrayCount(); quickUnion.ResetArrayCount(); weightedQuickUnion.ResetArrayCount(); } Draw(quickFindResult, "Quick-Find"); Draw(quickUnionResult, "Quick-Union"); Draw(weightedQuickUnionResult, "Weighted Quick-Union"); }
public Percolation(int size) { _gridSize = size; _grid = new bool[size, size]; _openSites = 0; var count = size * size; _wquGrid = new WeightedQuickUnionUf(count + 2); _wquGridFull = new WeightedQuickUnionUf(count + 1); _virtualTop = count; _virtualBottom = count + 1; }