public IHuffmanTree CreateRoot( ) { var nodes = Frequency.Select(symbol => new CNode { Symbol = symbol.Key, Frequency = symbol.Value }).ToList(); while ( nodes.Count > 1 ) { var orderedNodes = nodes.OrderBy( node => node.Frequency ).ToList(); if (orderedNodes.Count < 2) continue; var child = orderedNodes.Take( 2 ).ToList(); var parent = new CNode { Symbol = 0x20, Frequency = child[0].Frequency + child[1].Frequency, Left = child[0], Right = child[1] }; nodes.Remove( child[0] ); nodes.Remove( child[1] ); nodes.Add( parent ); } IHashTable hash = new CHashTable(); var firstOrDefault = nodes.FirstOrDefault(); if (firstOrDefault != null) firstOrDefault.MakeHash( new List<bool>(), hash ); return new CHuffmanTree { Root = nodes.FirstOrDefault(), HashTable = hash }; }
public static void HashTableTest() { CHashTable <int, string> hashTable = new CHashTable <int, string>(10); hashTable.Insert(16, "야구"); hashTable.Insert(26, "농구"); hashTable.Insert(12, "축구"); Console.WriteLine(hashTable.GetValue(16)); Console.WriteLine(hashTable.GetValue(26)); Console.WriteLine(hashTable.GetValue(12)); Console.WriteLine(hashTable.GetValue(15)); CHashTable <Foo, int> hashTable2 = new CHashTable <Foo, int>(14); Foo key1 = new Foo(); key1.a = 1; Foo key2 = new Foo(); key2.a = 4; hashTable2.Insert(key1, 11); hashTable2.Insert(key1, 14); hashTable2.Insert(key2, 24); Console.WriteLine(hashTable2.GetValue(key1)); Console.WriteLine(hashTable2.GetValue(key2)); hashTable2.Remove(key2); Console.WriteLine(hashTable2.GetValue(key2)); hashTable.TestShow(); }
static void Main() { var hashTable = new CHashTable<int,string>(); hashTable.Add(0, "a"); hashTable.Add(1, "b"); hashTable.Add(2, "c"); hashTable.Add(3, "a"); hashTable.Add(4, "d"); hashTable.Add(5, "e"); hashTable.Add(0, "f"); foreach (var item in hashTable) { Console.WriteLine(item.Key + " " + item.Value); } Console.WriteLine(hashTable.Contains(4).ToString()); hashTable.Clear(); Console.WriteLine(hashTable.Count); }
public void Clear() { this.count = 0; this.values = new CHashTable <int, T>(); }