示例#1
0
        public static MyHashtable FromFile(string filename, bool countComparisons = false)
        {
            if (!File.Exists(filename))
            {
                throw new FileNotFoundException();
            }

            var hashtable = new MyHashtable();

            using (var reader = new StreamReader(filename))
            {
                var separators = new[] { ' ', '\n', '\t' };
                var words      = reader.ReadToEnd().Split(separators, StringSplitOptions.RemoveEmptyEntries);
                foreach (var word in words)
                {
                    hashtable.Add(word);
                }

                if (countComparisons)
                {
                    var list = new List <int>();
                    foreach (var word in words)
                    {
                        int c;
                        Debug.Assert(hashtable.Contains(word, out c));
                        list.Add(c);
                    }

                    hashtable.AverageComparisons = list.Max();
                }
            }

            return(hashtable);
        }
示例#2
0
        static void Main(string[] args)
        {
            #if DEBUG
            args = new[] { @"..\..\lorem.txt" };
            #endif

            if (args.Length != 1)
            {
                Console.WriteLine("Использование:\nalg1.exe <filepath>");
                Console.ReadKey();
                return;
            }

            try
            {
                var hashtable = MyHashtable.FromFile(args[0], true);
                Console.WriteLine("Идентификаторы: " + hashtable.ElementCount);
                Console.WriteLine("Хэш-коды: " + hashtable.HashCount);
                Console.WriteLine("\nКоллизии: {0} ({1:P0})", hashtable.CollisionCount, hashtable.AverageCollisions);
                Console.WriteLine("Средний размер коллизии: " + hashtable.AverageCollisionSize);
                Console.WriteLine("Среднее кол-во сравнений при поиске: " + hashtable.AverageComparisons);
            }
            catch (FileNotFoundException)
            {
                Console.WriteLine("Ошибка: файл не найден.");
            }

            Console.ReadKey();
        }