public void RUPQBinaryIndexedTree()
        {
            var rand = new Random();

            for (int a = 0; a < _sourceArrays.Length; ++a)
            {
                int[] sourceArray           = _sourceArrays[a];
                var   rupqBinaryIndexedTree = new RUPQBinaryIndexedTree(sourceArray);

                for (int r = 0; r < 1000; ++r)
                {
                    int firstIndex  = rand.Next(0, sourceArray.Length);
                    int secondIndex = rand.Next(0, sourceArray.Length);
                    int startIndex  = Math.Min(firstIndex, secondIndex);
                    int endIndex    = Math.Max(firstIndex, secondIndex);
                    int mode        = rand.Next(2);

                    if (mode == 0)
                    {
                        NaiveBinaryIndexedTreeAlternatives.RangeUpdate(sourceArray, startIndex, endIndex, delta: r);
                        rupqBinaryIndexedTree.RangeUpdate(startIndex, endIndex, delta: r);
                    }
                    else
                    {
                        int expected = NaiveBinaryIndexedTreeAlternatives.ValueQuery(sourceArray, firstIndex);
                        Assert.AreEqual(expected, rupqBinaryIndexedTree.ValueQuery(firstIndex));
                    }
                }
            }
        }
Exemplo n.º 2
0
        private void NaiveRangeUpdate()
        {
            for (int i = 0; i < _randomRangesCount; ++i)
            {
                Tuple <int, int> range = _randomRanges[i];

                NaiveBinaryIndexedTreeAlternatives.RangeUpdate(_array, range.Item1, range.Item2, 1);
            }
        }
Exemplo n.º 3
0
        private void NaiveSumQuery()
        {
            for (int i = 0; i < _randomRangesCount; ++i)
            {
                Tuple <int, int> range = _randomRanges[i];

                NaiveBinaryIndexedTreeAlternatives.SumQuery(_array, range.Item1, range.Item2);
            }
        }
Exemplo n.º 4
0
        private void NaiveRandomOperation()
        {
            for (int i = 0; i < _randomRangesCount; ++i)
            {
                Tuple <int, int> range = _randomRanges[i];

                if (range.Item1 % 2 == 0)
                {
                    NaiveBinaryIndexedTreeAlternatives.SumQuery(_array, range.Item1, range.Item2);
                }
                else
                {
                    NaiveBinaryIndexedTreeAlternatives.RangeUpdate(_array, range.Item1, range.Item2, 1);
                }
            }
        }
        public void PURQBinaryIndexedTree2D_2()
        {
            var rand = new Random();

            for (int rowCount = 1; rowCount < 10; ++rowCount)
            {
                for (int columnCount = 1; columnCount < 10; ++columnCount)
                {
                    int[,] sourceArray = new int[rowCount, columnCount];
                    var purqBinaryIndexedTree2D = new PURQBinaryIndexedTree2D(rowCount, columnCount);

                    for (int r = 0; r < 100; ++r)
                    {
                        int rowIndex1       = rand.Next(0, rowCount);
                        int rowIndex2       = rand.Next(0, rowCount);
                        int columnIndex1    = rand.Next(0, columnCount);
                        int columnIndex2    = rand.Next(0, columnCount);
                        int nearRowIndex    = Math.Min(rowIndex1, rowIndex2);
                        int nearColumnIndex = Math.Min(columnIndex1, columnIndex2);
                        int farRowIndex     = Math.Max(rowIndex1, rowIndex2);
                        int farColumnIndex  = Math.Max(columnIndex1, columnIndex2);

                        int mode = rand.Next(2);

                        if (mode == 0)
                        {
                            NaiveBinaryIndexedTreeAlternatives.PointUpdate(sourceArray, nearRowIndex, farColumnIndex, delta: r);
                            purqBinaryIndexedTree2D.PointUpdate(nearRowIndex, farColumnIndex, delta: r);
                        }
                        else
                        {
                            int expected = NaiveBinaryIndexedTreeAlternatives.SumQuery(sourceArray,
                                                                                       nearRowIndex, nearColumnIndex, farRowIndex, farColumnIndex);
                            Assert.AreEqual(expected, purqBinaryIndexedTree2D.SumQuery(
                                                nearRowIndex, nearColumnIndex, farRowIndex, farColumnIndex));
                        }
                    }
                }
            }
        }