Exemplo n.º 1
0
 public void Add(T item)
 {
     if (!Contains(item))
     {
         data.Insert(item);
     }
     else
     {
         throw new ArgumentException($"Item {item} already in set");
     }
 }
Exemplo n.º 2
0
        public void ZigZagTest()
        {
            SplayTree <int> tree = new SplayTree <int>();

            tree.Insert(10);
            tree.Insert(15);
            tree.Insert(13);
            Assert.AreEqual(3, tree.Count);
            Assert.AreEqual(13, tree.Root.Value);
            Assert.AreEqual(15, tree.Root.Right.Value);
            Assert.AreEqual(10, tree.Root.Left.Value);
        }
Exemplo n.º 3
0
        public static void main(String[] args)
        {
            for (int i = 0; i <= 20; i++)
            {
                SplayTree t = new SplayTree();

                int  n = (int)Math.Pow(2, i);                   // number of elements at max size
                long m = 3 * n;                                 // number of operations (insert + lookup)
                long T = 0;                                     // number of single rotations

                if (n > Int32.MaxValue)
                {
                    throw new Exception();
                }

                for (int m1 = 0; m1 < n; m1++)
                {
                    t.Insert(m1);
                }

                lookupRand(t, n, m);
                lookupRand(t, n, m);

                T = t.NumRotations;
                double tm = (double)T / m;                              // T / m
                double ln = Math.Log(n) / Math.Log(2);                  // log_2(n)
                Console.WriteLine(i + ": ");
                Console.WriteLine(String.Format("({0}, {1})", ln, tm));
            }
        }
Exemplo n.º 4
0
        public void SplayTree_StressTest()
        {
            var nodeCount = 1000 * 10;

            var rnd           = new Random();
            var randomNumbers = Enumerable.Range(1, nodeCount)
                                .OrderBy(x => rnd.Next())
                                .ToList();

            var tree = new SplayTree <int>();

            for (int i = 0; i < nodeCount; i++)
            {
                tree.Insert(randomNumbers[i]);
                Assert.IsTrue(tree.Count == i + 1);
            }


            //shuffle again before deletion tests
            randomNumbers = Enumerable.Range(1, nodeCount)
                            .OrderBy(x => rnd.Next())
                            .ToList();


            for (int i = 0; i < nodeCount; i++)
            {
                tree.Delete(randomNumbers[i]);
                Assert.IsTrue(tree.Count == nodeCount - 1 - i);
            }

            Assert.IsTrue(tree.Count == 0);
        }
        public void Splay_ZigZag()
        {
            var arr  = new int[] { 7, 4, 3, 5, 1, 8 };
            var tree = new SplayTree <int>();

            foreach (var e in arr)
            {
                tree.Insert(e);
            }

            tree.Splay(tree.root.Left.Right);
            Assert.AreEqual(7, tree.root.Value);
            Assert.AreEqual(3, tree.root.Left.Value);
            Assert.AreEqual(1, tree.root.Left.Left.Value);
            Assert.AreEqual(5, tree.root.Left.Right.Value);
            Assert.AreEqual(4, tree.root.Left.Right.Left.Value);
            Assert.AreEqual(8, tree.root.Right.Value);

            tree.Splay(tree.root.Left.Right.Left);
            Assert.AreEqual(4, tree.root.Value);
            Assert.AreEqual(3, tree.root.Left.Value);
            Assert.AreEqual(1, tree.root.Left.Left.Value);
            Assert.AreEqual(7, tree.root.Right.Value);
            Assert.AreEqual(8, tree.root.Right.Right.Value);
            Assert.AreEqual(5, tree.root.Right.Left.Value);
        }
Exemplo n.º 6
0
        public void InsertTest()
        {
            IEnumerable <long> preOrderList = new List <long>()
            {
                30, 20, 10, -1, -1, -1, -1
            };

            var root = BST.ParseBST(ref preOrderList);
            var st   = new SplayTree(root);

            Assert.AreEqual("30(20(10,-),-)", st.ToString());

            st.Insert(15);
            Assert.AreEqual("15(10,30(20,-))", st.ToString());

            st.Insert(25);
            Assert.AreEqual("25(15(10,20),30)", st.ToString());

            st.Insert(23);
            Assert.AreEqual("23(20(15(10,-),-),25(-,30))", st.ToString());

            st.Insert(17);
            Assert.AreEqual("17(15(10,-),23(20,25(-,30)))", st.ToString());

            st.Insert(21);
            Assert.AreEqual("21(17(15(10,-),20),23(-,25(-,30)))", st.ToString());

            st.Insert(35);
            Assert.AreEqual("35(23(21(17(15(10,-),20),-),30(25,-)),-)", st.ToString());

            st.Insert(5);
            Assert.AreEqual("5(-,23(17(10(-,15),21(20,-)),35(30(25,-),-)))", st.ToString());
        }
Exemplo n.º 7
0
        private static void Main()
        {
            var splay = new SplayTree <int>();

            splay.Insert(3);
            splay.Preorder();
            splay.Insert(5);
            splay.Preorder();
            splay.Insert(7);
            splay.Preorder();
            splay.Insert(6);
            splay.Preorder();
            splay.Find(3);
            splay.Preorder();
            splay.Insert(1);
            splay.Preorder();
            splay.Remove(6);
            splay.Preorder();
            splay.Find(3);
            splay.Preorder();
            splay.Insert(10);
            splay.Insert(2);
            splay.Preorder();
            Console.ReadKey();
        }
        public void NotFailOnStackOverflow()
        {
            var tree = new SplayTree <int>();

            foreach (var e in Enumerable.Range(0, 10000))
            {
                tree.Insert(e);
                tree.Search(e);
            }
        }
Exemplo n.º 9
0
        public static void SplayTreeTest()
        {
            SplayTree tree = new SplayTree();

            for (int i = 7; i > 0; i--)
            {
                tree.Insert(i);
            }
            tree.Find(1);
            tree.Find(3);
        }
Exemplo n.º 10
0
        public void InsertDuplicateTest()
        {
            var st = new SplayTree();

            for (int i = 1; i < 100; i++)
            {
                st.Insert(1);
            }

            Assert.AreEqual("1", st.ToString());
        }
Exemplo n.º 11
0
        public void TestRemoveOne()
        {
            var arr  = new int[] { 30, 70, 15, 50, 5, 60, 85, 10, 20, 35, 40, 55, 65, 80, 90 };
            var tree = new SplayTree <int>();

            foreach (var e in arr)
            {
                tree.Insert(e);
            }
            tree.Remove(15);
            Assert.AreEqual(null, tree.Search(15));
        }
Exemplo n.º 12
0
        public void SplayTree_Accuracy_Test()
        {
            var nodeCount = 1000;

            var rnd           = new Random();
            var sorted        = Enumerable.Range(1, nodeCount).ToList();
            var randomNumbers = sorted
                                .OrderBy(x => rnd.Next())
                                .ToList();

            var tree = new SplayTree <int>();

            for (int i = 0; i < nodeCount; i++)
            {
                tree.Insert(randomNumbers[i]);
                tree.Root.VerifyCount();
                Assert.IsTrue(tree.Count == i + 1);
            }

            for (int i = 0; i < sorted.Count; i++)
            {
                Assert.AreEqual(sorted[i], tree.ElementAt(i));
                Assert.AreEqual(i, tree.IndexOf(sorted[i]));
            }

            //shuffle again before deletion tests
            randomNumbers = Enumerable.Range(1, nodeCount)
                            .OrderBy(x => rnd.Next())
                            .ToList();

            //IEnumerable test using linq
            Assert.AreEqual(tree.Count, tree.Count());
            Assert.AreEqual(tree.Count, tree.AsEnumerableDesc().Count());

            for (int i = 0; i < nodeCount; i++)
            {
                if (rnd.NextDouble() >= 0.5)
                {
                    tree.Delete(randomNumbers[i]);
                }
                else
                {
                    var index = tree.IndexOf(randomNumbers[i]);
                    Assert.AreEqual(tree.ElementAt(index), randomNumbers[i]);
                    tree.RemoveAt(index);
                }

                tree.Root.VerifyCount();
                Assert.IsTrue(tree.Count == nodeCount - 1 - i);
            }

            Assert.IsTrue(tree.Count == 0);
        }
Exemplo n.º 13
0
 public static SplayTree<int> InsertIntoTree(List<int> list)
 {
     var tree = new SplayTree<int>();
       var comparisons = 0;
       foreach (var n in list)
       {
     comparisons += tree.Insert(n);
       }
       System.Console.Out.WriteLine("Splay Tree");
       System.Console.Out.WriteLine("Insert");
       System.Console.Out.WriteLine("Comparisons: {0}", comparisons);
       return tree;
 }
Exemplo n.º 14
0
        public void AllOpsTest()
        {
            SplayTree <int> tree = new SplayTree <int>();

            tree.Insert(10);
            Assert.AreEqual(10, tree.Root.Value);
            tree.Insert(15);
            Assert.AreEqual(15, tree.Root.Value);
            tree.Insert(13);
            Assert.AreEqual(13, tree.Root.Value);
            Assert.AreEqual(10, tree.Root.Left.Value);
            Assert.AreEqual(15, tree.Root.Right.Value);
            tree.Insert(16);
            Assert.AreEqual(16, tree.Root.Value);
            Assert.AreEqual(15, tree.Root.Left.Value);
            Assert.AreEqual(13, tree.Root.Left.Left.Value);
            Assert.AreEqual(10, tree.Root.Left.Left.Left.Value);
            tree.Insert(18);
            Assert.AreEqual(18, tree.Root.Value);
            Assert.AreEqual(16, tree.Root.Left.Value);
            Assert.AreEqual(15, tree.Root.Left.Left.Value);
            Assert.AreEqual(13, tree.Root.Left.Left.Left.Value);
            Assert.AreEqual(10, tree.Root.Left.Left.Left.Left.Value);
            tree.Insert(17);
            Assert.AreEqual(17, tree.Root.Value);
            Assert.AreEqual(18, tree.Root.Right.Value);
            Assert.AreEqual(16, tree.Root.Left.Value);
            Assert.AreEqual(15, tree.Root.Left.Left.Value);
            Assert.AreEqual(13, tree.Root.Left.Left.Left.Value);
            Assert.AreEqual(10, tree.Root.Left.Left.Left.Left.Value);
            tree.Insert(14);
            Assert.AreEqual(14, tree.Root.Value);
            Assert.AreEqual(13, tree.Root.Left.Value);
            Assert.AreEqual(10, tree.Root.Left.Left.Value);
            Assert.AreEqual(16, tree.Root.Right.Value);
            Assert.AreEqual(15, tree.Root.Right.Left.Value);
            Assert.AreEqual(17, tree.Root.Right.Right.Value);
            Assert.AreEqual(18, tree.Root.Right.Right.Right.Value);
            tree.Insert(12);
            Assert.AreEqual(12, tree.Root.Value);
            Assert.AreEqual(10, tree.Root.Left.Value);
            Assert.AreEqual(14, tree.Root.Right.Value);
            Assert.AreEqual(13, tree.Root.Right.Left.Value);
            Assert.AreEqual(16, tree.Root.Right.Right.Value);
            Assert.AreEqual(15, tree.Root.Right.Right.Left.Value);
            Assert.AreEqual(17, tree.Root.Right.Right.Right.Value);
            Assert.AreEqual(18, tree.Root.Right.Right.Right.Right.Value);
            Assert.AreEqual(8, tree.Count);
        }
Exemplo n.º 15
0
        public void TestInsert()
        {
            var t = new SplayTree <ulong>();

            t.Insert(1);
            t.Insert(2);
            t.Insert(3);
            t.Insert(4);
            t.Insert(5);
            t.Insert(6);
            t.Insert(7);

            Assert.AreEqual("[6] [5] [7] [4] [3] [2] [1] ", t.ToString());
        }
Exemplo n.º 16
0
        public void TestInsert()
        {
            var t = new SplayTree<ulong>();

            t.Insert(1);
            t.Insert(2);
            t.Insert(3);
            t.Insert(4);
            t.Insert(5);
            t.Insert(6);
            t.Insert(7);

            Assert.AreEqual("[6] [5] [7] [4] [3] [2] [1] ", t.ToString());
        }
Exemplo n.º 17
0
        public void ZigTest()
        {
            SplayTree <int> tree = new SplayTree <int>();

            for (int i = 9; i >= 0; --i)
            {
                tree.Insert(i);
            }
            var head = tree.Root;

            Assert.AreEqual(10, tree.Count);
            for (int i = 0; i <= 9; ++i)
            {
                Assert.AreEqual(i, head.Value);
                head = head.Right;
            }
        }
Exemplo n.º 18
0
        public void PreoderTest()
        {
            var tree = new SplayTree <int>();

            int[] array    = { 10, 15, 20, 30, 40, 50, 25, 27, 14, 13, 35, 45 };
            int[] preorder = { 45, 35, 13, 10, 27, 14, 20, 15, 25, 30, 40, 50 };
            foreach (var item in array)
            {
                tree.Insert(item);
            }
            Assert.AreEqual(array.Length, tree.Count);
            int i = 0;

            foreach (var item in tree.GetPreorderTraversal())
            {
                Assert.AreEqual(preorder[i++], item);
            }
        }
        public void Splay_ZigZig()
        {
            var arr  = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
            var tree = new SplayTree <int>();

            foreach (var e in arr)
            {
                tree.Insert(e);
            }

            tree.Splay(tree.root.Left.Left);
            Assert.AreEqual(8, tree.root.Value);
            Assert.AreEqual(7, tree.root.Left.Value);
            Assert.AreEqual(6, tree.root.Left.Left.Value);
            Assert.AreEqual(5, tree.root.Left.Left.Left.Value);
            Assert.AreEqual(4, tree.root.Left.Left.Left.Left.Value);
            Assert.AreEqual(3, tree.root.Left.Left.Left.Left.Left.Value);
            Assert.AreEqual(2, tree.root.Left.Left.Left.Left.Left.Left.Value);
            Assert.AreEqual(1, tree.root.Left.Left.Left.Left.Left.Left.Left.Value);
            Assert.AreEqual(9, tree.root.Right.Value);
            Assert.AreEqual(10, tree.root.Right.Right.Value);

            var arr2  = new int[] { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 };
            var tree2 = new SplayTree <int>();

            foreach (var e in arr2)
            {
                tree2.Insert(e);
            }

            tree2.Splay(tree2.root.Right.Right);
            Assert.AreEqual(3, tree2.root.Value);
            Assert.AreEqual(4, tree2.root.Right.Value);
            Assert.AreEqual(5, tree2.root.Right.Right.Value);
            Assert.AreEqual(6, tree2.root.Right.Right.Right.Value);
            Assert.AreEqual(7, tree2.root.Right.Right.Right.Right.Value);
            Assert.AreEqual(8, tree2.root.Right.Right.Right.Right.Right.Value);
            Assert.AreEqual(9, tree2.root.Right.Right.Right.Right.Right.Right.Value);
            Assert.AreEqual(10, tree2.root.Right.Right.Right.Right.Right.Right.Right.Value);
            Assert.AreEqual(2, tree2.root.Left.Value);
            Assert.AreEqual(1, tree2.root.Left.Left.Value);
        }
Exemplo n.º 20
0
        public void ContainsAndFindTest()
        {
            var tree = new SplayTree <int>();
            int N    = 200;

            for (int i = 0; i < N; ++i)
            {
                tree.Insert(i + 10);
            }
            Assert.AreEqual(N, tree.Count);
            for (int i = N - 1; i >= 0; --i)
            {
                Assert.AreEqual(10 + i, tree.Find(i + 10).Value);
            }
            for (int i = 0; i < N * N; ++i)
            {
                tree.Find(N - 1);
            }
            Assert.AreEqual(N - 1, tree.Root.Value);
        }
        public void TestInsertAndSearch()
        {
            var arr  = new int[] { 30, 70, 15, 50, 5, 60, 85, 10, 20, 35, 40, 55, 65, 80, 90 };
            var tree = new SplayTree <int>();

            foreach (var e in arr)
            {
                tree.Insert(e);
            }
            var tr = true;

            foreach (var item in arr)
            {
                if (tree.Search(item) == null)
                {
                    tr = false;
                }
            }
            Assert.AreEqual(tr, true);
        }
Exemplo n.º 22
0
        public void MergeTrees()
        {
            var arr1  = new int[] { 10, 15, 7, 5, 29, 6, 14, 26, 4, 1, 8, 21, 23, 19, 20, 13, 11 };
            var tree1 = new SplayTree <int>();

            foreach (var e in arr1)
            {
                tree1.Insert(e);
            }

            var arr2  = new int[] { 30, 70, 45, 50, 56, 60, 85, 101, 201, 35, 40, 55, 65, 80, 90 };
            var tree2 = new SplayTree <int>();

            foreach (var e in arr2)
            {
                tree2.Insert(e);
            }

            tree1.Merge(tree1, tree2);


            var tr = true;

            foreach (var item in arr1)
            {
                if (tree1.Search(item) == null)
                {
                    tr = false;
                }
            }
            Assert.AreEqual(tr, true);
            ;
            foreach (var item in arr2)
            {
                if (tree1.Search(item) == null)
                {
                    tr = false;
                }
            }
            Assert.AreEqual(tr, true);
        }
        public void SplayForRoot()
        {
            var arr  = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
            var tree = new SplayTree <int>();

            foreach (var e in arr)
            {
                tree.Insert(e);
            }

            tree.Splay(tree.root);
            Assert.AreEqual(10, tree.root.Value);
            Assert.AreEqual(9, tree.root.Left.Value);
            Assert.AreEqual(8, tree.root.Left.Left.Value);
            Assert.AreEqual(7, tree.root.Left.Left.Left.Value);
            Assert.AreEqual(6, tree.root.Left.Left.Left.Left.Value);
            Assert.AreEqual(5, tree.root.Left.Left.Left.Left.Left.Value);
            Assert.AreEqual(4, tree.root.Left.Left.Left.Left.Left.Left.Value);
            Assert.AreEqual(3, tree.root.Left.Left.Left.Left.Left.Left.Left.Value);
            Assert.AreEqual(2, tree.root.Left.Left.Left.Left.Left.Left.Left.Left.Value);
            Assert.AreEqual(1, tree.root.Left.Left.Left.Left.Left.Left.Left.Left.Left.Value);
        }
Exemplo n.º 24
0
        public void TestSplit()
        {
            var arr  = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
            var tree = new SplayTree <int>();

            foreach (var e in arr)
            {
                tree.Insert(e);
            }

            Tuple <SplayNode <int>, SplayNode <int> > tuple = tree.Split(5);

            Assert.AreEqual(4, tuple.Item1.Value);
            Assert.AreEqual(3, tuple.Item1.Left.Value);
            Assert.AreEqual(2, tuple.Item1.Left.Left.Value);
            Assert.AreEqual(1, tuple.Item1.Left.Left.Left.Value);

            Assert.AreEqual(5, tuple.Item2.Value);
            Assert.AreEqual(10, tuple.Item2.Right.Value);
            Assert.AreEqual(8, tuple.Item2.Right.Left.Value);
            Assert.AreEqual(6, tuple.Item2.Right.Left.Left.Value);
            Assert.AreEqual(9, tuple.Item2.Right.Left.Right.Value);
            Assert.AreEqual(7, tuple.Item2.Right.Left.Left.Right.Value);
        }
Exemplo n.º 25
0
        public void SplayTree_Smoke_Test()
        {
            //insert test
            var tree = new SplayTree <int>();


            tree.Insert(11);
            tree.Insert(6);
            tree.Insert(8);
            tree.Insert(19);
            tree.Insert(4);
            tree.Insert(10);
            tree.Insert(5);
            tree.Insert(17);
            tree.Insert(43);
            tree.Insert(49);
            tree.Insert(31);

            //delete
            tree.Delete(43);
            tree.Delete(11);
            tree.Delete(6);
            tree.Delete(8);
            tree.Delete(19);
            tree.Delete(4);
            tree.Delete(10);
            tree.Delete(5);
            tree.Delete(17);
            tree.Delete(49);
            tree.Delete(31);

            Assert.AreEqual(tree.Count, 0);

            tree.Insert(31);
        }
Exemplo n.º 26
0
        public void GlobalTest()
        {
            SplayTree tree = new SplayTree(100);

            tree.Insert(50);
            Assert.AreEqual(50, tree.root.value);
            tree.Insert(101);
            Assert.AreEqual(101, tree.root.value);
            tree.Insert(0);
            Assert.AreEqual(0, tree.root.value);
            tree.Insert(1);
            Assert.AreEqual(1, tree.root.value);
            tree.Insert(-100);
            Assert.AreEqual(-100, tree.root.value);
            tree.Insert(90);
            Assert.AreEqual(90, tree.root.value);
            tree.Insert(70);
            Assert.AreEqual(70, tree.root.value);
            tree.Insert(1000);
            Assert.AreEqual(1000, tree.root.value);
            tree.Insert(1010);
            Assert.AreEqual(1010, tree.root.value);
            tree.Insert(-9000);
            Assert.AreEqual(-9000, tree.root.value);
            tree.Insert(65);
            Assert.AreEqual(65, tree.root.value);
            tree.Insert(9999);
            Assert.AreEqual(9999, tree.root.value);
            tree.Insert(346);
            Assert.AreEqual(346, tree.root.value);
            tree.Insert(23412);
            Assert.AreEqual(23412, tree.root.value);
            tree.Insert(-558);
            Assert.AreEqual(-558, tree.root.value);
            tree.Insert(63453);
            Assert.AreEqual(63453, tree.root.value);
        }