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);
}
Exemplo n.º 2
0
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");
    }
}
Exemplo n.º 3
0
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;
}
Exemplo n.º 4
0
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;
}