Ejemplo n.º 1
0
    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");
    }
Ejemplo n.º 2
0
        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;
        }