int main(int nargs, char * args[]) { if(nargs < 2) { fprintf(stderr, "USAGE: %s <symbol_string>\n", args[0]); exit(EXIT_FAILURE); } //symbol index is symbol char val - 'a' //ASSUMES chars are all lowercase //determine frequency of symbols calcFrequency(args[1]); printFrequency(); //build the priority q for each char/frequency in frequency array initQueue(); buildQueue(); //priority queue is done so build the huffman tree root = NULL; buildHuffmanTree(); if(root == NULL) { freeQueue();//should already be empty, but just in case return(EXIT_FAILURE); } calcCodes(); if(nargs > 2) printHuffmanCode(args[2]); else printHuffmanCode(args[1]); freeTree(); return(EXIT_SUCCESS); }
void find(struct node * t, char * input) { int found; /*Send the user's input to the printFrequency function. If the input is not found, an exception is printed*/ found = printFrequency(t, input, 0); if(found == 0) { printf("no_such_key\n"); } }
int printFrequency(struct node * p,char * wordFind, int found) { int frequency; /*Recursive calls are made until the leaves of the tree are reached. If the word is matched, found is returned as true*/ if(p != NULL) { if(p->left) { found = printFrequency(p->left, wordFind, found); } if(p->right) { found = printFrequency(p->right,wordFind, found); } if(strcmp(p->word, wordFind) == 0) { frequency = p->frequency; printf("key: %s, frequency: %d\n", wordFind, frequency); found = 1; } } return found; }
int main(int argc, char *argv[]) { { fprintf(stdout, "uniform bases from 0 to 3.\n"); DepthCounter dc(2); dc.beginNewRead(0); for (int i = 0; i <= 3; i++){ dc.addBase(i); } printFrequency(dc.getFreqDist()); } { fprintf(stdout, "uniform let read started from 0 to 7, each read has length 2.\n"); DepthCounter dc(2); for (int i = 0; i < 7; i++){ dc.beginNewRead(i); dc.addBase(i); dc.addBase(i+1); } printFrequency(dc.getFreqDist()); } { fprintf(stdout, "uniform let read started from 10 to 17, each read has length 2.\n"); DepthCounter dc(2); for (int i = 10; i < 17; i++){ dc.beginNewRead(i); dc.addBase(i); dc.addBase(i+1); } printFrequency(dc.getFreqDist()); } { fprintf(stdout, "uniform let read started from 100 to 117, each read has length 2.\n"); DepthCounter dc(2); for (int i = 100; i < 117; i++){ dc.beginNewRead(i); dc.addBase(i); dc.addBase(i+1); } printFrequency(dc.getFreqDist()); } { fprintf(stdout, "1000 uniform read started from 0 to 10000, each read has length Poisson(35).\n"); DiscreteUniformGenerator runif(0, 10000); PoissonGenerator rpoi(35); int startPosition[1000]; DepthCounter dc(100); for (int i = 0; i < 1000; i++){ startPosition[i] = runif.next(); }; std::sort(startPosition, startPosition+1000); for (int i = 0; i < 1000; i++){ dc.beginNewRead(startPosition[i]); int l = rpoi.next(); for (int j = 0; j < l; j++) { dc.addBase(startPosition[i] + j); } }; printFrequency(dc.getFreqDist()); } return 0; }