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); }
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(); }