HuffmanCoding.HuffmanTree.Build C# (CSharp) Method

Build() public method

public Build ( string source ) : void
source string
return void
    public void Build(string source)
    {
      // 빈도수 계산하여 Frequencies에 저장
      for (int i = 0; i < source.Length; i++)
      {
        if (!Frequencies.ContainsKey(source[i]))
          Frequencies.Add(source[i], 0);
        Frequencies[source[i]]++;
      }

      // Test Dictionary<char, int> Frequencies
      foreach(var v in Frequencies)
      {
        System.Console.WriteLine(v.Key + "\t" + v.Value);
      }

      // List<Node> nodes를 만든다
      foreach (KeyValuePair<char, int> s in Frequencies)
        nodes.Add(new Node()
        {
          Symbol = s.Key,
          Frequency = s.Value
        });

      while(nodes.Count > 1)
      {
        List<Node> orderedNodes
          = nodes.OrderBy(Node => Node.Frequency).ToList<Node>();

        if(orderedNodes.Count >= 2)
        {
          List<Node> taken = orderedNodes.Take(2).ToList<Node>();

          Node parent = new Node()
          {
            Symbol = '*',
            Frequency = taken[0].Frequency + taken[1].Frequency,
            Left = taken[0],
            Right = taken[1]
          };

          nodes.Remove(taken[0]);
          nodes.Remove(taken[1]);
          nodes.Add(parent);

          this.Root = nodes.FirstOrDefault();
        }
      }
    }

Usage Example

        static void Main(string[] args)
        {
            Console.WriteLine("Please enter the string:");
            string      input       = Console.ReadLine();
            HuffmanTree huffmanTree = new HuffmanTree();

            // Build the Huffman tree
            huffmanTree.Build(input);

            // Encode
            BitArray encoded = huffmanTree.Encode(input);

            Console.Write("Encoded: ");
            foreach (bool bit in encoded)
            {
                Console.Write((bit ? 1 : 0) + "");
            }
            Console.WriteLine();

            // Decode
            string decoded = huffmanTree.Decode(encoded);

            Console.WriteLine("Decoded: " + decoded);

            Console.ReadLine();
        }
All Usage Examples Of HuffmanCoding.HuffmanTree::Build
HuffmanTree