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