示例#1
0
        /// <summary>
        /// Builds the Huffman tree
        /// </summary>
        /// <param name="source">The source to build the Hufftree from</param>
        /// <exception cref="ArgumentNullException">Thrown when source is null or empty</exception>
        public void BuildTree(string source)
        {
            if (string.IsNullOrEmpty(source))
            {
                throw new ArgumentNullException("source");
            }

            Frequencies.Accept(source);
            BuildTree();
        }
示例#2
0
 public void Accept(IFeedVisitor visitor)
 {
     Agencies.Accept(visitor);
     Stops.Accept(visitor);
     Routes.Accept(visitor);
     Trips.Accept(visitor);
     StopTimes.Accept(visitor);
     Calendars.Accept(visitor);
     CalendarDates.Accept(visitor);
     FareAttributes.Accept(visitor);
     FareRules.Accept(visitor);
     Shapes.Accept(visitor);
     Frequencies.Accept(visitor);
     Transfers.Accept(visitor);
     FeedInfos.Accept(visitor);
 }
示例#3
0
 public void Accept(IFeedVisitor visitor)
 {
     Parallel.Invoke(
         () => Agencies.Accept(visitor),
         () => Stops.Accept(visitor),
         () => Routes.Accept(visitor),
         () => Trips.Accept(visitor),
         () => StopTimes.Accept(visitor),
         () => Calendars.Accept(visitor),
         () => CalendarDates.Accept(visitor),
         () => FareAttributes.Accept(visitor),
         () => FareRules.Accept(visitor),
         () => Shapes.Accept(visitor),
         () => Frequencies.Accept(visitor),
         () => Transfers.Accept(visitor),
         () => FeedInfos.Accept(visitor)
         );
 }
示例#4
0
 /// <summary>
 /// Builds the Huffman tree
 /// </summary>
 /// <param name="source">The source to build the Hufftree from</param>
 /// <exception cref="ArgumentNullException">Thrown when source is null or empty</exception>
 public void BuildTree(string source)
 {
     nodes.Clear();     //As we build a new tree, first make sure it's clean :)
     if (string.IsNullOrEmpty(source))
     {
         throw new ArgumentNullException("source");
     }
     else
     {
         Frequencies.Accept(source);
         foreach (KeyValuePair <char, int> symbol in Frequencies.FrequencyTable)
         {
             nodes.Add(new HuffmanNode()
             {
                 Character = symbol.Key, Frequency = symbol.Value
             });
         }
         while (nodes.Count > 1)
         {
             List <HuffmanNode> orderedNodes = nodes.OrderBy(node => node.Frequency).ToList();
             if (orderedNodes.Count >= 2)
             {
                 List <HuffmanNode> takenNodes = orderedNodes.Take(2).ToList();
                 HuffmanNode        parent     = new HuffmanNode()
                 {
                     Character = null,
                     Frequency = takenNodes[0].Frequency + takenNodes[1].Frequency,
                     Left      = takenNodes[0],
                     Right     = takenNodes[1]
                 };
                 //Remove the childnodes from the original node list and add the new parent node
                 nodes.Remove(takenNodes[0]);
                 nodes.Remove(takenNodes[1]);
                 nodes.Add(parent);
             }
         }
         Root = nodes.FirstOrDefault();
     }
 }