示例#1
0
    DecodingTree*
    Huffman::obtainSubtree(uint symbol, uint k)
    {
    	BinaryNode *node = tree;

    	// Traversing the Huffman tree
    	for (uint i=1; i<=k; i++)
    	{
    		bool bit = ((symbol >> (k-i)) & 1);

    		if (bit == 0) node = node->leftChild;
    		else node = node->rightChild;
    	}

    	// Retrieving the subtree
    	vector<uint> xTree;
    	vector<uint> symbols;
    	uint bits = 0;
    	retrieveSubtree(node, &xTree, &bits, &symbols);

    	BitString *tree = new BitString(2*xTree.size());
    	for (uint i=0; i<xTree.size(); i++) tree->setBit(xTree[i]);

    	return new DecodingTree(symbol, tree, &symbols);
    }
示例#2
0
        pair<BitString *,uint> generateBitmap(size_t length,vector<pair<uint,uint> > &nodes ) {
            uint bitmap_pos = 0;
            BitString *bitmap = new BitString(length);
            size_t a,b;
            cst->Root(&a,&b);
            bitmap_pos++;
            // cout << "(" ;
            generateBitmapAux(make_pair(a,b),bitmap,bitmap_pos,nodes);
            bitmap->setBit(bitmap_pos);
            bitmap_pos++;
            // cout << ")";
            // cout << "nodes.size() = " << nodes.size() << endl;
            BitString *new_bitmap = new BitString(bitmap->getData(),bitmap_pos);
            // for (int i = 0 ; i < nodes.size();i++) {
            //     cout << nodes[i].first << endl;
            // }
            // cout << "=========== tree ==========" << endl;
            // for (int i = 0 ;i < bitmap_pos;i++) {
            //     if (bitmap->getBit(i)) 
            //         cout << ")";
            //     else 
            //         cout << "(";
            // }
            // cout << endl;

            return make_pair(new_bitmap,bitmap_pos);
        }