Exemplo n.º 1
0
 /// <summary>
 /// 对于线性探测散列表,调整大小是必须的,因为随着数组非null空间越来越少,
 /// 碰撞发生的几率会增加,并且散列表在填满时会进入无限循环
 /// </summary>
 private void resize(int p)
 {
     LinearProbingHashST<Key, Value> tmp = new LinearProbingHashST<Key, Value>(p);
     for (int i = 0; i < M; i++)
         if (keys[i] != null)
             tmp.Put(keys[i], values[i]);
     keys = tmp.keys;
     values = tmp.values;
     M = tmp.M;
 }
Exemplo n.º 2
0
        public void LinearProbingHashPut()
        {
            var bst = new LinearProbingHashST <char, int>();
            var i   = 0;

            foreach (var c in "SEARCHEXAMPLE".ToCharArray())
            {
                bst.Put(c, i++);
            }

            Assert.AreEqual(12, bst.Get('E'));
        }
Exemplo n.º 3
0
        public void Run()
        {
            Console.WriteLine("Choose file:");   // Prompt
            Console.WriteLine("1 - tinyST.txt"); // Prompt
            Console.WriteLine("or quit");        // Prompt

            var fileNumber = Console.ReadLine();
            var fieName    = string.Empty;

            switch (fileNumber)
            {
            case "1":
                fieName = "tinyST.txt";
                break;

            case "quit":
                return;

            default:
                return;
            }


            var @in       = new In($"Files\\Searching\\{fieName}");
            var keyValues = @in.ReadAllLines();

            //var list = words.Select(word => new StringComparable(word)).ToList();

            //var listComparable = list.Cast<IComparable>().ToList();
            //var arrayComparable = list.Cast<IComparable>().ToArray();
            //var listStrings = words.ToList();


            var st = new LinearProbingHashST <string, string>();


            foreach (var keyValue in keyValues)
            {
                var splittedKeyValue = keyValue.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                var key   = splittedKeyValue[0];
                var value = splittedKeyValue[1];
                st.Put(key, value);
            }
            // print results
            foreach (var item in st.Keys())
            {
                Console.WriteLine(item + " " + st.Get(item));
            }
            Console.ReadLine();
        }
Exemplo n.º 4
0
        public void LinearProbingHashSTTest2()
        {
            // testing indexer semantics
            LinearProbingHashST <int, string> st = new LinearProbingHashST <int, string>();

            st[99] = null;
            Assert.AreEqual(st.Count, 0);
            st[3] = "abc";
            st[2] = "cde";
            Assert.AreEqual(st[2], "cde");
            st[99] = null;
            st[2]  = null;
            Assert.AreEqual(st.Count, 1);
            st.Delete(3);
            Assert.AreEqual(st.Count, 0);
            try
            {
                string dummyS = st[99];
                Assert.IsNull(dummyS);
            }
            catch (Exception)
            {
                Assert.Fail("it is possible to look up an empty table");
            }

            st[4] = "def";
            Assert.IsNull(st[99]);
            Assert.IsNull(st[3]);
            Assert.IsNull(st[2]);
            st[3] = "101";
            int oldCount = st.Count;

            // delete non-existing key does nothing
            st.Delete(123456);
            Assert.AreEqual(oldCount, st.Count);

            LinearProbingHashST <int, int> st2 = new LinearProbingHashST <int, int>();

            st2[3]  = 22;
            st2[2]  = 33;
            st2[99] = 44;
            st2[2]  = 55;
            st2.Delete(3);
            Assert.IsFalse(st2.Contains(3));
            st2[3] = 101;
            Assert.AreEqual(101, st2[3]);
            st2.Delete(99);
            int dummy = st2[99]; // generate null exception
        }
Exemplo n.º 5
0
        void STTest()
        {
            var strArr = FileHandler.ReadFileAsStrArr("words3.txt");

            strArr.Show();
            //var st = new SequentialSearchST<string,int>();
            //var st = new BinarySearchST<string,int>(strArr.Length);
            //var st = new BST<string,int>();
            //var st = new RedBlackBST<string,int>();
            //var st = new SeparateChainingHash<string,int>();
            //var st = new SeparateChainingHashST<string,int>(10);
            //var st = new LinearProbingHashST<string,int>();
            var st = new LinearProbingHashST <int, string>();

            for (int i = 1; i < strArr.Length; i++)
            {
                //st.Put(strArr[i], i);
                st.Put(i, strArr[i]);
            }
            //st.Put("bad", 100);
            //Console.WriteLine(st.Get("aaa"));
            //Console.WriteLine(st.Get("bed"));
            //Console.WriteLine(st.Get("zoo"));
            //Console.WriteLine(st.Get("xxx"));
            //Console.WriteLine(st.Get("bad"));
            //Console.WriteLine(st.Get("yet"));
            //Console.WriteLine(st.Get("zzz"));
            #region int -> string
            st.Put(1, "111");
            Console.WriteLine(st.Get(0));
            Console.WriteLine(st.Get(1));
            Console.WriteLine(st.Get(10));
            Console.WriteLine(st.Get(34));
            Console.WriteLine(st.Get(35));
            Console.WriteLine(st.Get(100));
            #endregion
            #region Floor
            //Console.WriteLine();
            //Console.WriteLine(st.Floor("aaa"));
            //Console.WriteLine(st.Floor("bed"));
            //Console.WriteLine(st.Floor("zoo"));
            //Console.WriteLine(st.Floor("xxx"));
            //Console.WriteLine(st.Floor("bad"));
            //Console.WriteLine(st.Floor("baf"));
            //Console.WriteLine(st.Floor("yet"));
            //Console.WriteLine(st.Floor("zzz"));
            #endregion
            Console.ReadKey();
        }
Exemplo n.º 6
0
        public void LinearProbingHashDelete()
        {
            var bst = new LinearProbingHashST <char, int>(1);
            var i   = 0;

            foreach (var c in "SEARCHEXAMPLE".ToCharArray())
            {
                bst.Put(c, i++);
            }
            Assert.AreEqual(12, bst.Get('E'));
            bst.Delete('E');
            Assert.AreEqual(default(int), bst.Get('E'));
            bst.Put('E', 20);
            Assert.AreEqual(20, bst.Get('E'));
        }
        public void Run()
        {
            Console.WriteLine("Choose file:"); // Prompt
            Console.WriteLine("1 - tinyST.txt"); // Prompt
            Console.WriteLine("or quit"); // Prompt

            var fileNumber = Console.ReadLine();
            var fieName = string.Empty;
            switch (fileNumber)
            {
                case "1":
                    fieName = "tinyST.txt";
                    break;
                case "quit":
                    return;
                default:
                    return;
            }

            var @in = new In($"Files\\Searching\\{fieName}");
            var keyValues = @in.ReadAllLines();

            //var list = words.Select(word => new StringComparable(word)).ToList();

            //var listComparable = list.Cast<IComparable>().ToList();
            //var arrayComparable = list.Cast<IComparable>().ToArray();
            //var listStrings = words.ToList();

            var st = new LinearProbingHashST<string,string>();

            foreach (var keyValue in keyValues)
            {
                var splittedKeyValue = keyValue.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries);
                var key = splittedKeyValue[0];
                var value = splittedKeyValue[1];
                st.Put(key,value);
            }
            // print results
            foreach (var item in st.Keys())
            {
                Console.WriteLine(item + " " + st.Get(item));
            }
            Console.ReadLine();
        }
        protected override ISymbolTable<string, int?> CreateST()
        {
            var hash = new LinearProbingHashST<string, int?>();

            hash.Put("S", 0);
            hash.Put("E", 1);
            hash.Put("A", 2);
            hash.Put("R", 3);
            hash.Put("C", 4);
            hash.Put("H", 5);
            hash.Put("E", 6);
            hash.Put("X", 7);
            hash.Put("A", 8);
            hash.Put("M", 9);
            hash.Put("P", 10);
            hash.Put("L", 11);
            hash.Put("E", 12);

            return hash;
        }
Exemplo n.º 9
0
        public void LinearProbingHashSTTest1()
        {
            // testing Get/Put semantics
            LinearProbingHashST <string, int> st = new LinearProbingHashST <string, int>();

            Assert.IsTrue(st.IsEmpty);

            // making sure we can delete all from ST
            st.Put("asd", 355);
            st.Put("dsd", 25);
            st.Put("esd", 15);
            st.Delete("esd");
            st.Delete("dsd");
            st.Delete("asd");
            Assert.IsTrue(st.IsEmpty);

            string[] keys = { "to", "be", "or", "not", "to", "be", "is", "quest" };
            for (int i = 0; i < keys.Length; i++)
            {
                st.Put(keys[i], i);
            }
            Assert.IsTrue(!(st.IsEmpty) && (st.Count == 6));

            string key = "not";

            Assert.IsTrue(st.Contains(key));
            st.Delete(key);
            Assert.IsFalse(st.Contains(key));
            Assert.IsNull(st.Get(key));

            object value = st.Get("is");

            Assert.AreEqual(6, value);

            value = st.Get("world");
            Assert.IsNull(value);

            int dummy = (int)st.Get("hello"); // generate null exception
        }
Exemplo n.º 10
0
        static void Main(string[] args)
        {
            ST <string, string> st;

            st = new SequentialSearchST <string, string>();
            st.Put("a", "1");
            st.Put("b", "2");
            int size = st.Size();

            st.Delete("a");
            size = st.Size();

            SortedST <string, string> sortedSt;

            sortedSt = new BST <string, string>();
            sortedSt.Put("r", "1");
            sortedSt.Put("b", "2");
            sortedSt.Put("h", "3");
            sortedSt.Put("t", "4");
            sortedSt.Delete("b");

            st = new SeparateChainingHashST <string, string>();
            st.Put("f", "1");
            st.Put("a", "3");
            st.Put("d", "4");
            st.Put("h", "9");
            st.Put("k", "8");
            var v = st.Get("h");

            st = new LinearProbingHashST <string, string>();
            st.Put("f", "1");
            st.Put("a", "3");
            st.Put("d", "4");
            st.Put("h", "9");
            st.Put("u", "8");
            v = st.Get("u");

            Console.ReadKey();
        }