コード例 #1
0
        public void BuildHeap_Recursively()
        {
            var heap = new MinBinaryHeap <int, string>(_keyValues);

            heap.BuildHeap_Recursively(heap.HeapArray.Count);

            Assert.AreEqual(9, heap.HeapArray.Count);
            Assert.IsTrue(HasMinOrderPropertyForHeap(_keyValues.Count, heap));
        }
コード例 #2
0
        public void GetNodeLevel()
        {
            var A = new KeyValuePair <int, string>(150, "A");
            var B = new KeyValuePair <int, string>(70, "B");
            var C = new KeyValuePair <int, string>(202, "C");
            var D = new KeyValuePair <int, string>(34, "D");
            var E = new KeyValuePair <int, string>(42, "E");
            var F = new KeyValuePair <int, string>(1, "F");
            var G = new KeyValuePair <int, string>(3, "G");
            var H = new KeyValuePair <int, string>(10, "H");
            var I = new KeyValuePair <int, string>(21, "I");

            var keyValues = new List <KeyValuePair <int, string> > {
                A, B, C, D, E, F, G, H, I
            };

            var heap = new MinBinaryHeap <int, string>(keyValues);

            heap.BuildHeap_Recursively(heap.HeapArray.Count);

            Assert.IsTrue(HasMinOrderPropertyForHeap(9, heap));

            /* This is the expected positions of keys. */
            Assert.AreEqual(0, keyValues.IndexOf(F));
            Assert.AreEqual(1, keyValues.IndexOf(H));
            Assert.AreEqual(2, keyValues.IndexOf(G));
            Assert.AreEqual(3, keyValues.IndexOf(I));
            Assert.AreEqual(4, keyValues.IndexOf(E));
            Assert.AreEqual(5, keyValues.IndexOf(C));
            Assert.AreEqual(6, keyValues.IndexOf(A));
            Assert.AreEqual(7, keyValues.IndexOf(D));
            Assert.AreEqual(8, keyValues.IndexOf(B));

            Assert.AreEqual(2, heap.GetNodeLevel(keyValues.IndexOf(A)));
            Assert.AreEqual(3, heap.GetNodeLevel(keyValues.IndexOf(B)));
            Assert.AreEqual(2, heap.GetNodeLevel(keyValues.IndexOf(C)));
            Assert.AreEqual(3, heap.GetNodeLevel(keyValues.IndexOf(D)));
            Assert.AreEqual(2, heap.GetNodeLevel(keyValues.IndexOf(E)));
            Assert.AreEqual(0, heap.GetNodeLevel(keyValues.IndexOf(F)));
            Assert.AreEqual(1, heap.GetNodeLevel(keyValues.IndexOf(G)));
            Assert.AreEqual(1, heap.GetNodeLevel(keyValues.IndexOf(H)));
            Assert.AreEqual(2, heap.GetNodeLevel(keyValues.IndexOf(I)));
        }