예제 #1
0
        public void RemoveTestTwoChildrenNotRootRightmostIsNotLeft()
        {
            SGTree <int> sgt = new SGTree <int>(0.75);

            SGTNode <int> x = new SGTNode <int>(10);
            SGTNode <int> a = new SGTNode <int>(0);
            SGTNode <int> b = new SGTNode <int>(1);
            SGTNode <int> c = new SGTNode <int>(2);
            SGTNode <int> d = new SGTNode <int>(3);
            SGTNode <int> e = new SGTNode <int>(4);

            sgt.insertFirst(x);
            sgt.insertAfter(x, a);
            sgt.insertAfter(a, e);
            sgt.insertBefore(a, b);
            sgt.insertAfter(b, c);
            sgt.insertBefore(c, d);

            sgt.Remove(a);

            bool b1 = sgt.Query(c, d);
            bool b2 = sgt.Query(c, b);

            Assert.IsTrue(b1 && b2);
        }
예제 #2
0
        public bool AddEdge(int v, int w)
        {
            // When a new arc (v, w) has v>w, do the search by calling VERTEX-GUIDEDSEARCH(v,w)
            if (_nodeOrder.Query(_nodes[v], _nodes[w]))
            {
                return(SoftThresholdSearch(v, w));
            }
            else
            {
                _nodes[v].Value.Outgoing.Add(_nodes[w]);
                _nodes[w].Value.Incoming.Add(_nodes[v]);
            }

            return(true);
        }
예제 #3
0
        public void insertTestBasic()
        {
            SGTree <int>  sgt  = new SGTree <int>(0.75);
            SGTNode <int> root = sgt.insertFirst(1);
            SGTNode <int> two  = sgt.insertAfter(root, 2);

            Assert.IsTrue(sgt.Query(two, root));
        }
예제 #4
0
        public void insertTestBasic()
        {
            SGTree<int> sgt = new SGTree<int>(0.75);
            SGTNode<int> root = sgt.insertFirst(1);
            SGTNode<int> two = sgt.insertAfter(root, 2);

            Assert.IsTrue(sgt.Query(two, root));
        }
예제 #5
0
        public void insertBeforeTest()
        {
            // a < root
            // b < a
            // a < c
            // d < a && d < b

            SGTree <int>  sgt  = new SGTree <int>(0.75);
            SGTNode <int> root = sgt.insertFirst(1);
            SGTNode <int> a    = sgt.insertBefore(root, 2);
            SGTNode <int> b    = sgt.insertBefore(a, 3);
            SGTNode <int> c    = sgt.insertBefore(root, 4);
            SGTNode <int> d    = sgt.insertBefore(b, 5);

            bool aGTroot = sgt.Query(root, a);
            bool bGTa    = sgt.Query(a, b);
            bool aGTc    = sgt.Query(c, a);
            bool dGTa    = sgt.Query(a, d);
            bool dGTb    = sgt.Query(b, d);

            Assert.IsTrue(aGTroot && bGTa && aGTc && dGTa && dGTb);
        }
예제 #6
0
        public void RemoveTestTwoChildrenNotRootRighstmostIsLeft()
        {
            SGTree <int> sgt = new SGTree <int>(0.75);

            SGTNode <int> a = new SGTNode <int>(0);
            SGTNode <int> b = new SGTNode <int>(1);
            SGTNode <int> c = new SGTNode <int>(2);
            SGTNode <int> d = new SGTNode <int>(3);

            sgt.insertFirst(a);
            sgt.insertBefore(a, b);
            sgt.insertBefore(b, c);
            sgt.insertAfter(b, d);

            sgt.Remove(b);

            bool b1 = sgt.Query(a, c);
            bool b2 = sgt.Query(a, d);
            bool b3 = sgt.Query(d, c);

            Assert.IsTrue(b1 && b2 && b3);
        }
예제 #7
0
        public void insertTestNotSequential()
        {
            // root > a
            // a > b
            // c > a
            // a > d && b > d

            SGTree <int>  sgt  = new SGTree <int>(0.75);
            SGTNode <int> root = sgt.insertFirst(1);
            SGTNode <int> a    = sgt.insertAfter(root, 2);
            SGTNode <int> b    = sgt.insertAfter(a, 3);
            SGTNode <int> c    = sgt.insertAfter(root, 4);
            SGTNode <int> d    = sgt.insertAfter(b, 5);

            bool aGTroot = sgt.Query(a, root);
            bool bGTa    = sgt.Query(b, a);
            bool aGTc    = sgt.Query(a, c);
            bool dGTa    = sgt.Query(d, a);
            bool dGTb    = sgt.Query(d, b);

            Assert.IsTrue(aGTroot && bGTa && aGTc && dGTa && dGTb);
        }
예제 #8
0
        public void RemoveTestLeftChildIsRoot()
        {
            SGTree <int> sgt = new SGTree <int>(0.75);

            SGTNode <int> a = new SGTNode <int>(0);
            SGTNode <int> b = new SGTNode <int>(1);
            SGTNode <int> c = new SGTNode <int>(2);
            SGTNode <int> d = new SGTNode <int>(3);

            sgt.insertFirst(a);
            sgt.insertBefore(a, b);
            sgt.insertBefore(b, c);
            sgt.insertBefore(c, d);

            sgt.Remove(a);

            bool b1 = sgt.Query(c, d);
            bool b2 = sgt.Query(b, c);
            bool b3 = sgt.Query(b, d);

            Assert.IsTrue(b1 && b2 && b3);
        }
예제 #9
0
        public void insertBeforeTest()
        {
            // a < root
            // b < a
            // a < c
            // d < a && d < b

            SGTree<int> sgt = new SGTree<int>(0.75);
            SGTNode<int> root = sgt.insertFirst(1);
            SGTNode<int> a = sgt.insertBefore(root, 2);
            SGTNode<int> b = sgt.insertBefore(a, 3);
            SGTNode<int> c = sgt.insertBefore(root, 4);
            SGTNode<int> d = sgt.insertBefore(b, 5);

            bool aGTroot = sgt.Query(root, a);
            bool bGTa = sgt.Query(a, b);
            bool aGTc = sgt.Query(c, a);
            bool dGTa = sgt.Query(a, d);
            bool dGTb = sgt.Query(b, d);

            Assert.IsTrue(aGTroot && bGTa && aGTc && dGTa && dGTb);
        }
예제 #10
0
        public void insertTestNotSequential()
        {
            // root > a
            // a > b
            // c > a
            // a > d && b > d

            SGTree<int> sgt = new SGTree<int>(0.75);
            SGTNode<int> root = sgt.insertFirst(1);
            SGTNode<int> a = sgt.insertAfter(root, 2);
            SGTNode<int> b = sgt.insertAfter(a, 3);
            SGTNode<int> c = sgt.insertAfter(root, 4);
            SGTNode<int> d = sgt.insertAfter(b, 5);

            bool aGTroot = sgt.Query(a, root);
            bool bGTa = sgt.Query(b, a);
            bool aGTc = sgt.Query(a, c);
            bool dGTa = sgt.Query(d, a);
            bool dGTb = sgt.Query(d, b);

            Assert.IsTrue(aGTroot && bGTa && aGTc && dGTa && dGTb);
        }
예제 #11
0
        public void RemoveTestLeftChildIsRoot()
        {
            SGTree<int> sgt = new SGTree<int>(0.75);

            SGTNode<int> a = new SGTNode<int>(0);
            SGTNode<int> b = new SGTNode<int>(1);
            SGTNode<int> c = new SGTNode<int>(2);
            SGTNode<int> d = new SGTNode<int>(3);

            sgt.insertFirst(a);
            sgt.insertBefore(a, b);
            sgt.insertBefore(b, c);
            sgt.insertBefore(c, d);

            sgt.Remove(a);

            bool b1 = sgt.Query(c, d);
            bool b2 = sgt.Query(b, c);
            bool b3 = sgt.Query(b, d);

            Assert.IsTrue(b1 && b2 && b3);
        }
예제 #12
0
        public void RemoveTestNoChildrenNotRoot()
        {
            SGTree <int> sgt = new SGTree <int>(0.75);

            SGTNode <int> a = new SGTNode <int>(0);
            SGTNode <int> b = new SGTNode <int>(1);
            SGTNode <int> c = new SGTNode <int>(2);

            sgt.insertFirst(a);
            sgt.insertBefore(a, b);
            sgt.insertBefore(b, c);

            sgt.Remove(c);

            bool b1 = sgt.Query(a, b);

            Assert.IsTrue(b1);
        }
예제 #13
0
        public void RemoveTestTwoChildrenIsRootRightmostIsLeft()
        {
            SGTree <int> sgt = new SGTree <int>(0.75);

            SGTNode <int> b = new SGTNode <int>(1);
            SGTNode <int> c = new SGTNode <int>(2);
            SGTNode <int> d = new SGTNode <int>(3);

            sgt.insertFirst(b);
            sgt.insertBefore(b, c);
            sgt.insertAfter(b, d);

            sgt.Remove(b);

            bool b1 = sgt.Query(d, c);

            Assert.IsTrue(b1);
        }
예제 #14
0
        public void RemoveTestTwoChildrenNotRootRightmostIsNotLeft()
        {
            SGTree<int> sgt = new SGTree<int>(0.75);

            SGTNode<int> x = new SGTNode<int>(10);
            SGTNode<int> a = new SGTNode<int>(0);
            SGTNode<int> b = new SGTNode<int>(1);
            SGTNode<int> c = new SGTNode<int>(2);
            SGTNode<int> d = new SGTNode<int>(3);
            SGTNode<int> e = new SGTNode<int>(4);

            sgt.insertFirst(x);
            sgt.insertAfter(x, a);
            sgt.insertAfter(a, e);
            sgt.insertBefore(a, b);
            sgt.insertAfter(b, c);
            sgt.insertBefore(c, d);

            sgt.Remove(a);

            bool b1 = sgt.Query(c, d);
            bool b2 = sgt.Query(c, b);

            Assert.IsTrue(b1 && b2);
        }
예제 #15
0
        public void RemoveTestTwoChildrenNotRootRighstmostIsLeft()
        {
            SGTree<int> sgt = new SGTree<int>(0.75);

            SGTNode<int> a = new SGTNode<int>(0);
            SGTNode<int> b = new SGTNode<int>(1);
            SGTNode<int> c = new SGTNode<int>(2);
            SGTNode<int> d = new SGTNode<int>(3);

            sgt.insertFirst(a);
            sgt.insertBefore(a, b);
            sgt.insertBefore(b, c);
            sgt.insertAfter(b, d);

            sgt.Remove(b);

            bool b1 = sgt.Query(a, c);
            bool b2 = sgt.Query(a, d);
            bool b3 = sgt.Query(d, c);

            Assert.IsTrue(b1 && b2 && b3);
        }
예제 #16
0
        public void RemoveTestTwoChildrenIsRootRightmostIsLeft()
        {
            SGTree<int> sgt = new SGTree<int>(0.75);

            SGTNode<int> b = new SGTNode<int>(1);
            SGTNode<int> c = new SGTNode<int>(2);
            SGTNode<int> d = new SGTNode<int>(3);

            sgt.insertFirst(b);
            sgt.insertBefore(b, c);
            sgt.insertAfter(b, d);

            sgt.Remove(b);

            bool b1 = sgt.Query(d, c);

            Assert.IsTrue(b1);
        }
예제 #17
0
        public void RemoveTestNoChildrenNotRoot()
        {
            SGTree<int> sgt = new SGTree<int>(0.75);

            SGTNode<int> a = new SGTNode<int>(0);
            SGTNode<int> b = new SGTNode<int>(1);
            SGTNode<int> c = new SGTNode<int>(2);

            sgt.insertFirst(a);
            sgt.insertBefore(a, b);
            sgt.insertBefore(b, c);

            sgt.Remove(c);

            bool b1 = sgt.Query(a, b);

            Assert.IsTrue(b1);
        }