Guest User

Untitled

a guest
Jun 23rd, 2018
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.94 KB | None | 0 0
  1. #include <iostream>
  2. #include <main.h>
  3. #include <stdlib.h>
  4. #include <fstream>
  5.  
  6. using namespace std;
  7.  
  8.  
  9.  
  10. int count =0;
  11. node *tree = NULL;
  12. int *freqArray = new int[256];
  13. int *sortArray = new int[256];
  14. //node *nodeArray = new *node[256];
  15. node* nodeArray[256];
  16. int nodeSize = 256;
  17.  
  18.  
  19.  
  20. int main(int argc, char** argv)
  21. {
  22. char *fileName = argv[1];
  23. for(int i=0; i<256; i++)
  24. {
  25. freqArray[i]=0;
  26. sortArray[i]=0;
  27. }
  28.  
  29.  
  30.  
  31. int character =0;
  32. char realCharacter= ' ';
  33.  
  34. ifstream inputFile(fileName);
  35. if(inputFile.is_open())
  36. {
  37. inputFile>>realCharacter;
  38.  
  39. while(!inputFile.eof())
  40. {
  41. character = realCharacter;
  42. freqArray[character]++;
  43. sortArray[character]++;
  44. inputFile >> realCharacter;
  45. }
  46. }
  47.  
  48. cout << "Size of node = " << sizeof(node) << endl;
  49.  
  50. for(int i=0; i<256;i++)
  51. {
  52. node *newNode = new node;
  53. int useThis = findMax();
  54. newNode->letter=useThis;
  55. newNode->weight=freqArray[useThis];
  56. nodeArray[i] = newNode;
  57.  
  58.  
  59. }
  60.  
  61. while (nodeSize>1)
  62. {
  63.  
  64. int firstMin =0;
  65. int secondMin=0;
  66. node *tempNode = new node;
  67. firstMin=findMin(-1);
  68. secondMin = findMin(firstMin);
  69. if(nodeArray[firstMin]->letter > -1)
  70. {
  71. tempNode->left=nodeArray[firstMin];
  72. tempNode->right=nodeArray[secondMin];
  73. }
  74. else
  75. {
  76. tempNode->right=nodeArray[firstMin];
  77. tempNode->left= nodeArray[secondMin];
  78. }
  79.  
  80. tempNode->letter=-1;
  81. // cout<<someCount<<endl;
  82. //cout<<tempNode->left->letter<<endl;
  83. // cout<<tempNode->right->letter<<endl;
  84. /*
  85. if(tempNode->left->letter== tempNode->right->letter)
  86. {
  87. cout<<"Left node: "<<tempNode->left->letter<<" Right node: "<<tempNode->right->letter<<endl;
  88. cout<<"First min: "<<firstMin<<" Second min: "<<secondMin<<endl;
  89. cout<<"Size: " <<nodeSize<<endl;
  90. }*/
  91.  
  92. tempNode->weight = tempNode->left->weight + tempNode->right->weight;
  93.  
  94. if(firstMin<secondMin)
  95. {
  96. nodeArray[firstMin] = tempNode;
  97. nodeArray[secondMin]= nodeArray[nodeSize-1];
  98. }
  99. else
  100. {
  101. nodeArray[secondMin] = tempNode;
  102. nodeArray[firstMin]=nodeArray[nodeSize-1];
  103. }
  104. nodeSize--;
  105.  
  106. }
  107.  
  108. cout<<"Left node: "<<nodeArray[0]->left->left->left->left->left->left->letter<<endl;
  109. cout<<"Right node: "<<nodeArray[0]->right->letter<<endl;
  110. //cout<<freqArray[101]<<endl;
  111.  
  112.  
  113.  
  114.  
  115.  
  116. }
  117.  
  118. //Finds the maximum of sortArray
  119. int findMin (int skip)
  120. {
  121. int currentMin;
  122. int currentIndex;
  123. if(skip!=nodeSize-1)
  124. {
  125. currentMin =nodeArray[nodeSize-1]->weight;
  126. currentIndex = nodeSize-1;
  127. }
  128. else
  129. {
  130. currentMin = nodeArray[nodeSize-2]->weight;
  131. currentIndex = nodeSize-2;
  132. }
  133.  
  134.  
  135. for(int i=nodeSize-1;i>-1;i--)
  136. {
  137. if(i!=skip && nodeArray[i]->weight < currentMin)
  138. {
  139.  
  140. currentMin = nodeArray[i]->weight;
  141. currentIndex = i;
  142. }
  143. }
  144. return currentIndex;
  145. }
  146.  
  147. int findWeight(node *root)
  148. {
  149. if(root->letter>-1)
  150. return freqArray[root->letter];
  151. if(root->weight>-1)
  152. return root->weight;
  153. else
  154. return (findWeight(root->left)+findWeight(root->right));
  155. }
  156.  
  157. int findMax ()
  158. {
  159. int currentMax = -1;
  160. int currentIndex =0;
  161. for(int i=0;i<256;i++)
  162. {
  163. if(sortArray[i]>currentMax)
  164. {
  165. currentMax=sortArray[i];
  166. currentIndex = i;
  167. }
  168. }
  169. sortArray[currentIndex] = -2;
  170. return currentIndex;
  171. }
  172.  
  173.  
  174.  
  175. HEADER FILE FOLLOWS:
  176.  
  177. struct node
  178. {
  179. int letter;
  180. int weight;
  181. node *left;
  182. node *right;
  183.  
  184. };
  185.  
  186. int findMin (int skip);
  187. int findWeight(node *root);
  188. int findMax ();
Add Comment
Please, Sign In to add comment