Esempio n. 1
0
        public void TestInsert()
        {
            var list = new List<int> { 1, 9, 3, 6, 5, 2, 7, 11, 9 };
            var maxHeap = new MaxHeap();

            list.ForEach(elem => maxHeap.Add(elem));

            Assert.AreEqual(11, maxHeap.peekMax());
        }
Esempio n. 2
0
        // Adds a num into the data structure.
        public void AddNum(double num)
        {
            if (upperPortion.Count() == lowerPortion.Count())
            {
                // Insert the new element where it belongs
                if (upperPortion.Count() > 0 && num > upperPortion.peekMin())
                {
                    upperPortion.Add(num);
                    lowerPortion.Add(upperPortion.removeMin()); // Rebalance the heaps so that lowerPortion has N/2 + 1 elements
                }
                else
                {
                    lowerPortion.Add(num);
                }
            }

            else // after the insertion we'll have an even number of elements
            {
                if (upperPortion.Count() > 0 && num > upperPortion.peekMin())
                {
                    upperPortion.Add(num);
                    if (upperPortion.Count() > lowerPortion.Count())
                    {
                        lowerPortion.Add(upperPortion.removeMin());
                    }
                }
                else
                {
                    lowerPortion.Add(num);
                    if (lowerPortion.Count() > upperPortion.Count())
                    {
                        upperPortion.Add(lowerPortion.removeMax());
                    }
                }
            }
        }
Esempio n. 3
0
        public void testBunchOfInsertionsAndDeletions()
        {
            var list = new List<double> { 74, 101, 11, 1000, 4, -101, -1000 };
            var maxHeap = new MaxHeap();

            list.ForEach(elem => maxHeap.Add(elem));

            list.Sort();
            list.Reverse();
            var maxes = new List<double>();

            for (int i = 0; i < list.Count; i++)
            {
                maxes.Add(maxHeap.removeMax());
            }

            List<Tuple<double, double>> expectedVsActual = list.Zip(maxes, Tuple.Create).ToList();

            foreach(var tuple in expectedVsActual)
            {
                Assert.AreEqual(tuple.Item1, tuple.Item2);
            }
        }