diff --git a/Src/FileCompression/input.txt b/Src/FileCompression/input.txt new file mode 100644 index 0000000..df362f3 --- /dev/null +++ b/Src/FileCompression/input.txt @@ -0,0 +1,62 @@ +aaabbcddddeeeeffffggghhhiiijjklllmmnoopqqrrrssstttuuuvwwwxxyyzzz +thequickbrownfoxjumpsoverthelazydogthequickbrownfoxjumpsoverthelazydog +aaabbbbcccccdddddeeeeeffffffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuu +huffmanencodingexampletextwithrandomlettersandvaryingfrequencies +aaaaaaaabbbbccccccdddddddeeeeeeeeeefffffffggghhhiiijkllllmmnnopprrrsstttt +fnaidfaoisdfhaoidfnasfnakdbfkasjdbjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj +aaabbcddddeeeeffffggghhhiiijjklllmmnoopqqrrrssstttuuuvwwwxxyyzzz +thequickbrownfoxjumpsoverthelazydogthequickbrownfoxjumpsoverthelazydog +aaabbbbcccccdddddeeeeeffffffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuu +huffmanencodingexampletextwithrandomlettersandvaryingfrequencies +aaaaaaaabbbbccccccdddddddeeeeeeeeeefffffffggghhhiiijkllllmmnnopprrrsstttt +fnaidfaoisdfhaoidfnasfnakdbfkasjdbjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjkjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjasbdjasbdoabnsldnaaaabbcddddeeeeffffggghhhiiijjklllmmnoopqqrrrssstttuuuvwwwxxyyzzz +thequickbrownfoxjumpsoverthelazydogthequickbrownfoxjumpsoverthelazydog +aaabbbbcccccdddddeeeeeffffffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuu +huffmanencodingexampletextwithrandomlettersandvaryingfrequencies +aaaaaaaabbbbccccccdddddddeeeeeeeeeefffffffggghhhiiijkllllmmnnopprrrsstttt +fnaidfaoisdfhaoidfnasfnakdbfkasjdbjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjkjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjasbdjasbdoabnsldnaaaabbcddddeeeeffffggghhhiiijjklllmmnoopqqrrrssstttuuuvwwwxxyyzzz +thequickbrownfoxjumpsoverthelazydogthequickbrownfoxjumpsoverthelazydog +aaabbbbcccccdddddeeeeeffffffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuu +huffmanencodingexampletextwithrandomlettersandvaryingfrequencies +aaaaaaaabbbbccccccdddddddeeeeeeeeeefffffffggghhhiiijkllllmmnnopprrrsstttt +fnaidfaoisdfhaoidfnasfnakdbfkasjdbjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjkjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjasbdjasbdoabnsldnaaaabbcddddeeeeffffggghhhiiijjklllmmnoopqqrrrssstttuuuvwwwxxyyzzz +thequickbrownfoxjumpsoverthelazydogthequickbrownfoxjumpsoverthelazydog +aaabbbbcccccdddddeeeeeffffffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuu +huffmanencodingexampletextwithrandomlettersandvaryingfrequencies +aaaaaaaabbbbccccccdddddddeeeeeeeeeefffffffggghhhiiijkllllmmnnopprrrsstttt +fnaidfaoisdfhaoidfnasfnakdbfkasjdbjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjkjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjasbdjasbdoabnsldnaaaabbcddddeeeeffffggghhhiiijjklllmmnoopqqrrrssstttuuuvwwwxxyyzzz +thequickbrownfoxjumpsoverthelazydogthequickbrownfoxjumpsoverthelazydog +aaabbbbcccccdddddeeeeeffffffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuu +huffmanencodingexampletextwithrandomlettersandvaryingfrequencies +aaaaaaaabbbbccccccdddddddeeeeeeeeeefffffffggghhhiiijkllllmmnnopprrrsstttt +fnaidfaoisdfhaoidfnasfnakdbfkasjdbjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjkjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjasbdjasbdoabnsldnaaaabbcddddeeeeffffggghhhiiijjklllmmnoopqqrrrssstttuuuvwwwxxyyzzz +thequickbrownfoxjumpsoverthelazydogthequickbrownfoxjumpsoverthelazydog +aaabbbbcccccdddddeeeeeffffffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuu +huffmanencodingexampletextwithrandomlettersandvaryingfrequencies +aaaaaaaabbbbccccccdddddddeeeeeeeeeefffffffggghhhiiijkllllmmnnopprrrsstttt +fnaidfaoisdfhaoidfnasfnakdbfkasjdbjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjkjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjasbdjasbdoabnsldnaaaabbcddddeeeeffffggghhhiiijjklllmmnoopqqrrrssstttuuuvwwwxxyyzzz +thequickbrownfoxjumpsoverthelazydogthequickbrownfoxjumpsoverthelazydog +aaabbbbcccccdddddeeeeeffffffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuu +huffmanencodingexampletextwithrandomlettersandvaryingfrequencies +aaaaaaaabbbbccccccdddddddeeeeeeeeeefffffffggghhhiiijkllllmmnnopprrrsstttt +fnaidfaoisdfhaoidfnasfnakdbfkasjdbjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjkjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjasbdjasbdoabnsldnaaaabbcddddeeeeffffggghhhiiijjklllmmnoopqqrrrssstttuuuvwwwxxyyzzz +thequickbrownfoxjumpsoverthelazydogthequickbrownfoxjumpsoverthelazydog +aaabbbbcccccdddddeeeeeffffffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuu +huffmanencodingexampletextwithrandomlettersandvaryingfrequencies +aaaaaaaabbbbccccccdddddddeeeeeeeeeefffffffggghhhiiijkllllmmnnopprrrsstttt +fnaidfaoisdfhaoidfnasfnakdbfkasjdbjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjkjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjasbdjasbdoabnsldnaaaabbcddddeeeeffffggghhhiiijjklllmmnoopqqrrrssstttuuuvwwwxxyyzzz +thequickbrownfoxjumpsoverthelazydogthequickbrownfoxjumpsoverthelazydog +aaabbbbcccccdddddeeeeeffffffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuu +huffmanencodingexampletextwithrandomlettersandvaryingfrequencies +aaaaaaaabbbbccccccdddddddeeeeeeeeeefffffffggghhhiiijkllllmmnnopprrrsstttt +fnaidfaoisdfhaoidfnasfnakdbfkasjdbjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjkjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjasbdjasbdoabnsldnaaaabbcddddeeeeffffggghhhiiijjklllmmnoopqqrrrssstttuuuvwwwxxyyzzz +thequickbrownfoxjumpsoverthelazydogthequickbrownfoxjumpsoverthelazydog +aaabbbbcccccdddddeeeeeffffffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuu +huffmanencodingexampletextwithrandomlettersandvaryingfrequencies +aaaaaaaabbbbccccccdddddddeeeeeeeeeefffffffggghhhiiijkllllmmnnopprrrsstttt +fnaidfaoisdfhaoidfnasfnakdbfkasjdbjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjkjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjasbdjasbdoabnsldnaaaabbcddddeeeeffffggghhhiiijjklllmmnoopqqrrrssstttuuuvwwwxxyyzzz +thequickbrownfoxjumpsoverthelazydogthequickbrownfoxjumpsoverthelazydog +aaabbbbcccccdddddeeeeeffffffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuu +huffmanencodingexampletextwithrandomlettersandvaryingfrequencies +aaaaaaaabbbbccccccdddddddeeeeeeeeeefffffffggghhhiiijkllllmmnnopprrrsstttt +fnaidfaoisdfhaoidfnasfnakdbfkasjdbjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjkjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjasbdjasbdoabnsldnajjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjkjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjasbdjasbdoabnsldna \ No newline at end of file diff --git a/Src/FileCompression/main.cpp b/Src/FileCompression/main.cpp new file mode 100644 index 0000000..5692d6d --- /dev/null +++ b/Src/FileCompression/main.cpp @@ -0,0 +1,100 @@ +#include +using namespace std; + +struct Node { + char ch; + int freq; + Node* left; + Node* right; + + Node(char c, int f, Node* l = nullptr, Node* r = nullptr) + : ch(c), freq(f), left(l), right(r) {} +}; +struct Compare { + bool operator()(Node* a, Node* b) { + return a->freq > b->freq; + } +}; +unordered_map encodings; + +void prefix(Node* root,string s){ + if(root->ch!='*'){ + encodings[root->ch]=s; + return; + } + if(root->left !=NULL)prefix(root->left,s+'0'); + if(root->right !=NULL)prefix(root->right, s+'1'); +} + +int main(){ + ifstream file("input.txt"); + if(!file.is_open()){ + cout<<"file could not be opened"< hashmap; + char ch; + while(file.get(ch)){ + hashmap[ch]++; + } + file.close(); + priority_queue, Compare> pq; + string orignal=""; + + + for(auto it=hashmap.begin();it!=hashmap.end();it++){ + char c=it->first; + orignal+=c; + int f=it->second; + cout< 1) { + Node* left = pq.top(); pq.pop(); + Node* right = pq.top(); pq.pop(); + + Node* parent = new Node('*', left->freq + right->freq, left, right); + pq.push(parent); + } + Node* root=pq.top(); + prefix(root,""); + + for(auto it=encodings.begin();it!=encodings.end();it++){ + cout<< it->first<< " : "<second< bytes; + unsigned char current=0; + int count=0; + + for(char bit: bitstream){ + current=current>>1|bit-'0'; + count++; + + if(count==8){ + bytes.push_back(current); + current=0; + count=0; + } + } + if(count > 0) { + current <<= (8 - count); + bytes.push_back(current); + } + + ofstream out("output.bin",ios::binary); + for(unsigned char b:bytes){ + out.write((char*)&b,1); + + } + out.close(); + + +} \ No newline at end of file diff --git a/Src/FileCompression/main.exe b/Src/FileCompression/main.exe new file mode 100644 index 0000000..541767c Binary files /dev/null and b/Src/FileCompression/main.exe differ diff --git a/Src/FileCompression/output.bin b/Src/FileCompression/output.bin new file mode 100644 index 0000000..1e13048 Binary files /dev/null and b/Src/FileCompression/output.bin differ