Advertisement
Guest User

Untitled

a guest
Nov 24th, 2014
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.33 KB | None | 0 0
  1. public class Node
  2. {
  3. public int frekvens; //Frequency
  4. public char tegn; //Symbol
  5. public Node venstre; //Left child
  6. public Node høyre; //Right child
  7. public string s; //result string
  8. public Node (char c) // Node constructor containing symbol.
  9. {
  10. frekvens = 1;
  11. if (tegn == ' ')
  12. {
  13. tegn = '_';
  14. }
  15. else
  16. {
  17. tegn = c;
  18. }
  19. }
  20.  
  21. public Node (int f, Node venstre, Node høyre) // Node Constructor containing frequency and children
  22. {
  23. frekvens = f;
  24. this.venstre = venstre;
  25. this.høyre = høyre;
  26. }
  27.  
  28. public Node (Node node) // Node constructor containing a node
  29. {
  30. frekvens = node.frekvens;
  31. tegn = node.tegn;
  32. this.venstre = venstre;
  33. this.høyre = høyre;
  34. }
  35.  
  36. public void ØkMed1() // Inkrement frequency by one
  37. {
  38. frekvens = frekvens + 1;
  39. }
  40.  
  41.  
  42. public char getVenstreTegn ()
  43. {
  44. return venstre.tegn;
  45. }
  46.  
  47. public char getHøyreTegn ()
  48. {
  49. return venstre.tegn;
  50. }
  51.  
  52. public int getVenstreFrekvens ()
  53. {
  54. return venstre.frekvens;
  55. }
  56.  
  57. public int getHøyreFrekvens ()
  58. {
  59. return høyre.frekvens;
  60. }
  61.  
  62. public int getFrekvens()
  63. {
  64. return frekvens;
  65. }
  66.  
  67. public bool ErTegn(char c)
  68. {
  69. if ( c == tegn)
  70. {
  71. return false;
  72. }
  73. else
  74. {
  75. return true;
  76. }
  77. }
  78.  
  79. //Pretty sure this does not work as intended
  80. public string traverser (Node n) //Traverse the tree
  81. {
  82. if (n.tegn != null) //If the node containes a symbol --> a leaf
  83. {
  84. return s;
  85. }
  86. else
  87. {
  88. if (n.getVenstreTegn() == null) //If left child does not have a symbol
  89. {
  90. s += "0";
  91. traverser(n);
  92. }
  93. if (n.getHøyreTegn() == null) //If right child does not have a symbol
  94. {
  95. s += "1";
  96. traverser(n);
  97. }
  98. }
  99. return s;
  100. }
  101.  
  102.  
  103. public string Resultat() //Used priviously to check if i got the correct huffman tree
  104. {
  105. string resultat;
  106. resultat = "Tegn: " + Convert.ToString(tegn) +" frekvens: " + Convert.ToString(frekvens) + "n";
  107. return resultat;
  108. }
  109. }
  110.  
  111. private void btnKomprimer_Click(object sender, System.Windows.RoutedEventArgs e)
  112. {
  113. string input; //The string input I want to compress
  114. bool funnet; //Found
  115. char karakter; //character
  116. input = txtInput.Text; //initialize input to text input
  117. input = input.ToLower();
  118. txtOutput.Text = "";
  119.  
  120. List<Node> noder = new List<Node>(); //The list of nodes
  121. //List<Node> tatt = new List<Node>();
  122. for (int i = 0; i < input.Length;i++) //Loops through string and sets character
  123. //with coresponding freqeuncy in the node list
  124. {
  125. karakter = input[i];
  126. funnet = false; //default
  127. for (int j = 0; j< noder.Count; j++)
  128. {
  129. if (noder[j].ErTegn(karakter) == false) //if the character already exists
  130. {
  131. noder[j].ØkMed1(); //inkrement frequency by one
  132. funnet = true;
  133. break;
  134. }
  135. }
  136. if (!funnet) //if the character does not exist
  137. {
  138. noder.Add(new Node(karakter)); //add the character to list
  139. }
  140. }
  141. //Sorting node list acending by frequency
  142. var sortertListe = noder.OrderBy(c => c.frekvens).ToList();
  143.  
  144. noder = sortertListe;
  145. foreach(Node n in noder) //Prints the characters with frequency
  146. {
  147. txtOutput.Text += n.Resultat();
  148. }
  149. do
  150. {
  151. noder.Add(new Node((noder[0].frekvens + noder[1].frekvens), noder[0],noder[1]));
  152. //tatt.Add(new Node(noder[0]));
  153. //tatt.Add(new Node(noder[1]));
  154. //Remove the leaf nodes
  155. noder.RemoveAt(0);
  156. noder.RemoveAt(0);
  157. } while(noder.Count >= 2);
  158.  
  159.  
  160.  
  161. foreach (Node n in noder) //Prints the root frequency
  162. {
  163. txtOutput.Text += n.Resultat();
  164. }
  165.  
  166. txtOutput.Text += "n" + noder[0].traverser(noder[0]); //Result
  167. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement