/huffman

Huffman coding in C

Primary LanguageCMIT LicenseMIT

huffman

Huffman coding in C

Copyright (c) 2013 the authors listed at the following URL, and/or
the authors of referenced articles or incorporated external code:
http://en.literateprograms.org/Huffman_coding_(C_Plus_Plus)?action=history&offset=20090129100015

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Retrieved from: http://en.literateprograms.org/Huffman_coding_(C_Plus_Plus)?oldid=16057
huffpack enwik9
size: 256, symbols: 206
   9: 100101001111111
  10: 010100
  32: 101
  33: 1001111100111
  34: 10001011110
  35: 10010100101
  36: 010000011101
  37: 1000101110
  38: 11011111
  39: 1001101
  40: 110111100
  41: 110111101
  42: 110100111
  43: 10010100110101
  44: 1001000
  45: 01011011
  46: 1101000
  47: 11110111
  48: 0000010
  49: 0000011
  50: 10011110
  51: 00000001
  52: 111101000
  53: 111101001
  54: 100111011
  55: 100100101
  56: 100111111
  57: 01010101
  58: 01011010
  59: 0100001
  60: 11110110
  61: 10010101
  62: 11110101
  63: 0100000110110
  64: 00000000101100000
  65: 01010100
  66: 100100100
  67: 10001010
  68: 010101100
  69: 010000010
  70: 000000111
  71: 000000101
  72: 010000001
  73: 100111000
  74: 1000101101
  75: 0000001100
  76: 010000000
  77: 100111010
  78: 000000100
  79: 1000101100
  80: 100101000
  81: 1001010010001
  82: 010101101
  83: 10001000
  84: 01010111
  85: 1001111101
  86: 10011111000
  87: 000000000
  88: 1000100100100
  89: 100101001110
  90: 01000001100
  91: 111000
  92: 1001010011000
  93: 111001
  94: 010000011110000
  95: 10001011111
  96: 1000100100110000111
  97: 0110
  98: 1001011
  99: 111100
 100: 00001
 101: 1100
 102: 010001
 103: 010111
 104: 01001
 105: 0011
 106: 0000001101
 107: 10010011
 108: 10000
 109: 110101
 110: 0001
 111: 0010
 112: 100011
 113: 110100110
 114: 11111
 115: 11101
 116: 0111
 117: 110110
 118: 0101100
 119: 1001100
 120: 100111001
 121: 1101110
 122: 1000100111
 123: 1000100101
 124: 11010010
 125: 1000100110
 126: 1001010011011101
 128: 1001010011110
 129: 01000001111101
 130: 0000000011100
 131: 1001010011001
 132: 100010010011100
 133: 010000011010100
 134: 000000001101001
 135: 000000001101000
 136: 010000011110011
 137: 010000011010000
 138: 1001010011010000
 139: 1001010011011000
 140: 000000001101100
 141: 010000011111000
 142: 0000000010110001
 143: 1001010010011011
 144: 010000011110010
 145: 000000001010101
 146: 1001010010011001
 147: 00000000101111
 148: 00000000111111
 149: 100101001001110
 150: 000000001010010
 151: 000000001010100
 152: 010000011010001
 153: 10010100100000
 154: 0100000111000011
 155: 1001111100101001
 156: 100101001111110
 157: 010000011110001
 158: 000000001010011
 159: 000000001110111
 160: 100010010010101
 161: 10010100111110
 162: 000000001110110
 163: 100010010011101
 164: 10001001001101
 165: 010000011100000
 166: 010000011010111
 167: 00000000101110
 168: 00000000110101
 169: 1001010010010
 170: 100010010010100
 171: 010000011111001
 172: 1001010010011010
 173: 01000001101001
 174: 000000001011001
 175: 000000001111100
 176: 10011111001011
 177: 100101001101111
 178: 00000000111010
 179: 10001001001111
 180: 100101001101101
 181: 00000000110111
 182: 100111110010101
 183: 010000011010101
 184: 0100000111001
 185: 00000000101000
 186: 00000000110001
 187: 00000000101011
 188: 10010100100001
 189: 00000000111101
 190: 00000000111100
 191: 000000001111101
 194: 01000001101110
 195: 10001001000
 196: 00000000101101
 197: 01000001110001
 198: 10001001001100000111
 199: 1000100100110000110
 200: 1000100100110000011000
 201: 10010100110111001
 202: 00000000101100001
 203: 100101001101110000
 204: 010000011100001000
 205: 1000100100110000011001
 206: 01000001101111
 207: 000000001101101
 208: 00000000100
 209: 0100000111111
 210: 100101001101110001010
 211: 1000100100110000011011
 212: 10001001001100000110101
 213: 10010100110111000100
 214: 100010010011000000
 215: 1001111100100
 216: 00000000110000
 217: 100101001001111
 218: 1000100100110000010
 219: 010000011100001001
 220: 1001010011011100010111
 222: 10001001001100000110100
 224: 0000000011001
 225: 100010010011001
 226: 0100000111101
 227: 1001111100110
 228: 1001010010011000
 229: 10001001001011
 230: 100101001101001
 231: 010000011010110
 232: 1001111100101000
 233: 1001010011011001
 234: 100010010011000010
 235: 1000100100110001
 236: 1001010011010001
 237: 01000001110000101
 238: 10010100110111000101101
 239: 1001010011011100011
 240: 10010100110111000101100

\-root
  |-Bit0
  | |-Bit0
  | | |-Bit0
  | | | |-Bit0
  | | | | |-Bit0
  | | | | | |-Bit0
  | | | | | | |-Bit0
  | | | | | | | |-Bit0
  | | | | | | | | |-Bit0 = 87
  | | | | | | | | \-Bit1
  | | | | | | | |   |-Bit0
  | | | | | | | |   | |-Bit0 = 208
  | | | | | | | |   | \-Bit1
  | | | | | | | |   |   |-Bit0
  | | | | | | | |   |   | |-Bit0
  | | | | | | | |   |   | | |-Bit0 = 185
  | | | | | | | |   |   | | \-Bit1
  | | | | | | | |   |   | |   |-Bit0 = 150
  | | | | | | | |   |   | |   \-Bit1 = 158
  | | | | | | | |   |   | \-Bit1
  | | | | | | | |   |   |   |-Bit0
  | | | | | | | |   |   |   | |-Bit0 = 151
  | | | | | | | |   |   |   | \-Bit1 = 145
  | | | | | | | |   |   |   \-Bit1 = 187
  | | | | | | | |   |   \-Bit1
  | | | | | | | |   |     |-Bit0
  | | | | | | | |   |     | |-Bit0
  | | | | | | | |   |     | | |-Bit0
  | | | | | | | |   |     | | | |-Bit0
  | | | | | | | |   |     | | | | |-Bit0 = 64
  | | | | | | | |   |     | | | | \-Bit1 = 202
  | | | | | | | |   |     | | | \-Bit1 = 142
  | | | | | | | |   |     | | \-Bit1 = 174
  | | | | | | | |   |     | \-Bit1 = 196
  | | | | | | | |   |     \-Bit1
  | | | | | | | |   |       |-Bit0 = 167
  | | | | | | | |   |       \-Bit1 = 147
  | | | | | | | |   \-Bit1
  | | | | | | | |     |-Bit0
  | | | | | | | |     | |-Bit0
  | | | | | | | |     | | |-Bit0
  | | | | | | | |     | | | |-Bit0 = 216
  | | | | | | | |     | | | \-Bit1 = 186
  | | | | | | | |     | | \-Bit1 = 224
  | | | | | | | |     | \-Bit1
  | | | | | | | |     |   |-Bit0
  | | | | | | | |     |   | |-Bit0
  | | | | | | | |     |   | | |-Bit0 = 135
  | | | | | | | |     |   | | \-Bit1 = 134
  | | | | | | | |     |   | \-Bit1 = 168
  | | | | | | | |     |   \-Bit1
  | | | | | | | |     |     |-Bit0
  | | | | | | | |     |     | |-Bit0 = 140
  | | | | | | | |     |     | \-Bit1 = 207
  | | | | | | | |     |     \-Bit1 = 181
  | | | | | | | |     \-Bit1
  | | | | | | | |       |-Bit0
  | | | | | | | |       | |-Bit0 = 130
  | | | | | | | |       | \-Bit1
  | | | | | | | |       |   |-Bit0 = 178
  | | | | | | | |       |   \-Bit1
  | | | | | | | |       |     |-Bit0 = 162
  | | | | | | | |       |     \-Bit1 = 159
  | | | | | | | |       \-Bit1
  | | | | | | | |         |-Bit0
  | | | | | | | |         | |-Bit0 = 190
  | | | | | | | |         | \-Bit1 = 189
  | | | | | | | |         \-Bit1
  | | | | | | | |           |-Bit0
  | | | | | | | |           | |-Bit0 = 175
  | | | | | | | |           | \-Bit1 = 191
  | | | | | | | |           \-Bit1 = 148
  | | | | | | | \-Bit1 = 51
  | | | | | | \-Bit1
  | | | | | |   |-Bit0
  | | | | | |   | |-Bit0 = 78
  | | | | | |   | \-Bit1 = 71
  | | | | | |   \-Bit1
  | | | | | |     |-Bit0
  | | | | | |     | |-Bit0 = 75
  | | | | | |     | \-Bit1 = 106
  | | | | | |     \-Bit1 = 70
  | | | | | \-Bit1
  | | | | |   |-Bit0 = 48
  | | | | |   \-Bit1 = 49
  | | | | \-Bit1 = 100
  | | | \-Bit1 = 110
  | | \-Bit1
  | |   |-Bit0 = 111
  | |   \-Bit1 = 105
  | \-Bit1
  |   |-Bit0
  |   | |-Bit0
  |   | | |-Bit0
  |   | | | |-Bit0
  |   | | | | |-Bit0
  |   | | | | | |-Bit0
  |   | | | | | | |-Bit0 = 76
  |   | | | | | | \-Bit1 = 72
  |   | | | | | \-Bit1
  |   | | | | |   |-Bit0 = 69
  |   | | | | |   \-Bit1
  |   | | | | |     |-Bit0
  |   | | | | |     | |-Bit0 = 90
  |   | | | | |     | \-Bit1
  |   | | | | |     |   |-Bit0
  |   | | | | |     |   | |-Bit0
  |   | | | | |     |   | | |-Bit0
  |   | | | | |     |   | | | |-Bit0 = 137
  |   | | | | |     |   | | | \-Bit1 = 152
  |   | | | | |     |   | | \-Bit1 = 173
  |   | | | | |     |   | \-Bit1
  |   | | | | |     |   |   |-Bit0
  |   | | | | |     |   |   | |-Bit0 = 133
  |   | | | | |     |   |   | \-Bit1 = 183
  |   | | | | |     |   |   \-Bit1
  |   | | | | |     |   |     |-Bit0 = 231
  |   | | | | |     |   |     \-Bit1 = 166
  |   | | | | |     |   \-Bit1
  |   | | | | |     |     |-Bit0 = 63
  |   | | | | |     |     \-Bit1
  |   | | | | |     |       |-Bit0 = 194
  |   | | | | |     |       \-Bit1 = 206
  |   | | | | |     \-Bit1
  |   | | | | |       |-Bit0
  |   | | | | |       | |-Bit0
  |   | | | | |       | | |-Bit0
  |   | | | | |       | | | |-Bit0
  |   | | | | |       | | | | |-Bit0 = 165
  |   | | | | |       | | | | \-Bit1
  |   | | | | |       | | | |   |-Bit0
  |   | | | | |       | | | |   | |-Bit0
  |   | | | | |       | | | |   | | |-Bit0 = 204
  |   | | | | |       | | | |   | | \-Bit1 = 219
  |   | | | | |       | | | |   | \-Bit1 = 237
  |   | | | | |       | | | |   \-Bit1 = 154
  |   | | | | |       | | | \-Bit1 = 197
  |   | | | | |       | | \-Bit1 = 184
  |   | | | | |       | \-Bit1 = 36
  |   | | | | |       \-Bit1
  |   | | | | |         |-Bit0
  |   | | | | |         | |-Bit0
  |   | | | | |         | | |-Bit0
  |   | | | | |         | | | |-Bit0 = 94
  |   | | | | |         | | | \-Bit1 = 157
  |   | | | | |         | | \-Bit1
  |   | | | | |         | |   |-Bit0 = 144
  |   | | | | |         | |   \-Bit1 = 136
  |   | | | | |         | \-Bit1 = 226
  |   | | | | |         \-Bit1
  |   | | | | |           |-Bit0
  |   | | | | |           | |-Bit0
  |   | | | | |           | | |-Bit0 = 141
  |   | | | | |           | | \-Bit1 = 171
  |   | | | | |           | \-Bit1 = 129
  |   | | | | |           \-Bit1 = 209
  |   | | | | \-Bit1 = 59
  |   | | | \-Bit1 = 102
  |   | | \-Bit1 = 104
  |   | \-Bit1
  |   |   |-Bit0
  |   |   | |-Bit0 = 10
  |   |   | \-Bit1
  |   |   |   |-Bit0
  |   |   |   | |-Bit0 = 65
  |   |   |   | \-Bit1 = 57
  |   |   |   \-Bit1
  |   |   |     |-Bit0
  |   |   |     | |-Bit0 = 68
  |   |   |     | \-Bit1 = 82
  |   |   |     \-Bit1 = 84
  |   |   \-Bit1
  |   |     |-Bit0
  |   |     | |-Bit0 = 118
  |   |     | \-Bit1
  |   |     |   |-Bit0 = 58
  |   |     |   \-Bit1 = 45
  |   |     \-Bit1 = 103
  |   \-Bit1
  |     |-Bit0 = 97
  |     \-Bit1 = 116
  \-Bit1
    |-Bit0
    | |-Bit0
    | | |-Bit0
    | | | |-Bit0 = 108
    | | | \-Bit1
    | | |   |-Bit0
    | | |   | |-Bit0
    | | |   | | |-Bit0 = 83
    | | |   | | \-Bit1
    | | |   | |   |-Bit0
    | | |   | |   | |-Bit0
    | | |   | |   | | |-Bit0 = 195
    | | |   | |   | | \-Bit1
    | | |   | |   | |   |-Bit0
    | | |   | |   | |   | |-Bit0 = 88
    | | |   | |   | |   | \-Bit1
    | | |   | |   | |   |   |-Bit0
    | | |   | |   | |   |   | |-Bit0 = 170
    | | |   | |   | |   |   | \-Bit1 = 160
    | | |   | |   | |   |   \-Bit1 = 229
    | | |   | |   | |   \-Bit1
    | | |   | |   | |     |-Bit0
    | | |   | |   | |     | |-Bit0
    | | |   | |   | |     | | |-Bit0
    | | |   | |   | |     | | | |-Bit0
    | | |   | |   | |     | | | | |-Bit0
    | | |   | |   | |     | | | | | |-Bit0 = 214
    | | |   | |   | |     | | | | | \-Bit1
    | | |   | |   | |     | | | | |   |-Bit0 = 218
    | | |   | |   | |     | | | | |   \-Bit1
    | | |   | |   | |     | | | | |     |-Bit0
    | | |   | |   | |     | | | | |     | |-Bit0
    | | |   | |   | |     | | | | |     | | |-Bit0 = 200
    | | |   | |   | |     | | | | |     | | \-Bit1 = 205
    | | |   | |   | |     | | | | |     | \-Bit1
    | | |   | |   | |     | | | | |     |   |-Bit0
    | | |   | |   | |     | | | | |     |   | |-Bit0 = 222
    | | |   | |   | |     | | | | |     |   | \-Bit1 = 212
    | | |   | |   | |     | | | | |     |   \-Bit1 = 211
    | | |   | |   | |     | | | | |     \-Bit1 = 198
    | | |   | |   | |     | | | | \-Bit1
    | | |   | |   | |     | | | |   |-Bit0 = 234
    | | |   | |   | |     | | | |   \-Bit1
    | | |   | |   | |     | | | |     |-Bit0 = 199
    | | |   | |   | |     | | | |     \-Bit1 = 96
    | | |   | |   | |     | | | \-Bit1 = 235
    | | |   | |   | |     | | \-Bit1 = 225
    | | |   | |   | |     | \-Bit1 = 164
    | | |   | |   | |     \-Bit1
    | | |   | |   | |       |-Bit0
    | | |   | |   | |       | |-Bit0 = 132
    | | |   | |   | |       | \-Bit1 = 163
    | | |   | |   | |       \-Bit1 = 179
    | | |   | |   | \-Bit1 = 123
    | | |   | |   \-Bit1
    | | |   | |     |-Bit0 = 125
    | | |   | |     \-Bit1 = 122
    | | |   | \-Bit1
    | | |   |   |-Bit0 = 67
    | | |   |   \-Bit1
    | | |   |     |-Bit0
    | | |   |     | |-Bit0 = 79
    | | |   |     | \-Bit1 = 74
    | | |   |     \-Bit1
    | | |   |       |-Bit0 = 37
    | | |   |       \-Bit1
    | | |   |         |-Bit0 = 34
    | | |   |         \-Bit1 = 95
    | | |   \-Bit1 = 112
    | | \-Bit1
    | |   |-Bit0
    | |   | |-Bit0
    | |   | | |-Bit0 = 44
    | |   | | \-Bit1
    | |   | |   |-Bit0
    | |   | |   | |-Bit0 = 66
    | |   | |   | \-Bit1 = 55
    | |   | |   \-Bit1 = 107
    | |   | \-Bit1
    | |   |   |-Bit0
    | |   |   | |-Bit0
    | |   |   | | |-Bit0 = 80
    | |   |   | | \-Bit1
    | |   |   | |   |-Bit0
    | |   |   | |   | |-Bit0
    | |   |   | |   | | |-Bit0
    | |   |   | |   | | | |-Bit0
    | |   |   | |   | | | | |-Bit0 = 153
    | |   |   | |   | | | | \-Bit1 = 188
    | |   |   | |   | | | \-Bit1 = 81
    | |   |   | |   | | \-Bit1
    | |   |   | |   | |   |-Bit0 = 169
    | |   |   | |   | |   \-Bit1
    | |   |   | |   | |     |-Bit0
    | |   |   | |   | |     | |-Bit0
    | |   |   | |   | |     | | |-Bit0 = 228
    | |   |   | |   | |     | | \-Bit1 = 146
    | |   |   | |   | |     | \-Bit1
    | |   |   | |   | |     |   |-Bit0 = 172
    | |   |   | |   | |     |   \-Bit1 = 143
    | |   |   | |   | |     \-Bit1
    | |   |   | |   | |       |-Bit0 = 149
    | |   |   | |   | |       \-Bit1 = 217
    | |   |   | |   | \-Bit1 = 35
    | |   |   | |   \-Bit1
    | |   |   | |     |-Bit0
    | |   |   | |     | |-Bit0
    | |   |   | |     | | |-Bit0 = 92
    | |   |   | |     | | \-Bit1 = 131
    | |   |   | |     | \-Bit1
    | |   |   | |     |   |-Bit0
    | |   |   | |     |   | |-Bit0
    | |   |   | |     |   | | |-Bit0
    | |   |   | |     |   | | | |-Bit0 = 138
    | |   |   | |     |   | | | \-Bit1 = 236
    | |   |   | |     |   | | \-Bit1 = 230
    | |   |   | |     |   | \-Bit1 = 43
    | |   |   | |     |   \-Bit1
    | |   |   | |     |     |-Bit0
    | |   |   | |     |     | |-Bit0
    | |   |   | |     |     | | |-Bit0 = 139
    | |   |   | |     |     | | \-Bit1 = 233
    | |   |   | |     |     | \-Bit1 = 180
    | |   |   | |     |     \-Bit1
    | |   |   | |     |       |-Bit0
    | |   |   | |     |       | |-Bit0
    | |   |   | |     |       | | |-Bit0
    | |   |   | |     |       | | | |-Bit0 = 203
    | |   |   | |     |       | | | \-Bit1
    | |   |   | |     |       | | |   |-Bit0
    | |   |   | |     |       | | |   | |-Bit0 = 213
    | |   |   | |     |       | | |   | \-Bit1
    | |   |   | |     |       | | |   |   |-Bit0 = 210
    | |   |   | |     |       | | |   |   \-Bit1
    | |   |   | |     |       | | |   |     |-Bit0
    | |   |   | |     |       | | |   |     | |-Bit0 = 240
    | |   |   | |     |       | | |   |     | \-Bit1 = 238
    | |   |   | |     |       | | |   |     \-Bit1 = 220
    | |   |   | |     |       | | |   \-Bit1 = 239
    | |   |   | |     |       | | \-Bit1 = 201
    | |   |   | |     |       | \-Bit1 = 126
    | |   |   | |     |       \-Bit1 = 177
    | |   |   | |     \-Bit1
    | |   |   | |       |-Bit0 = 89
    | |   |   | |       \-Bit1
    | |   |   | |         |-Bit0 = 128
    | |   |   | |         \-Bit1
    | |   |   | |           |-Bit0 = 161
    | |   |   | |           \-Bit1
    | |   |   | |             |-Bit0 = 156
    | |   |   | |             \-Bit1 = 9
    | |   |   | \-Bit1 = 61
    | |   |   \-Bit1 = 98
    | |   \-Bit1
    | |     |-Bit0
    | |     | |-Bit0 = 119
    | |     | \-Bit1 = 39
    | |     \-Bit1
    | |       |-Bit0
    | |       | |-Bit0
    | |       | | |-Bit0 = 73
    | |       | | \-Bit1 = 120
    | |       | \-Bit1
    | |       |   |-Bit0 = 77
    | |       |   \-Bit1 = 54
    | |       \-Bit1
    | |         |-Bit0 = 50
    | |         \-Bit1
    | |           |-Bit0
    | |           | |-Bit0
    | |           | | |-Bit0 = 86
    | |           | | \-Bit1
    | |           | |   |-Bit0
    | |           | |   | |-Bit0 = 215
    | |           | |   | \-Bit1
    | |           | |   |   |-Bit0
    | |           | |   |   | |-Bit0
    | |           | |   |   | | |-Bit0 = 232
    | |           | |   |   | | \-Bit1 = 155
    | |           | |   |   | \-Bit1 = 182
    | |           | |   |   \-Bit1 = 176
    | |           | |   \-Bit1
    | |           | |     |-Bit0 = 227
    | |           | |     \-Bit1 = 33
    | |           | \-Bit1 = 85
    | |           \-Bit1 = 56
    | \-Bit1 = 32
    \-Bit1
      |-Bit0
      | |-Bit0 = 101
      | \-Bit1
      |   |-Bit0
      |   | |-Bit0
      |   | | |-Bit0 = 46
      |   | | \-Bit1
      |   | |   |-Bit0 = 124
      |   | |   \-Bit1
      |   | |     |-Bit0 = 113
      |   | |     \-Bit1 = 42
      |   | \-Bit1 = 109
      |   \-Bit1
      |     |-Bit0 = 117
      |     \-Bit1
      |       |-Bit0 = 121
      |       \-Bit1
      |         |-Bit0
      |         | |-Bit0 = 40
      |         | \-Bit1 = 41
      |         \-Bit1 = 38
      \-Bit1
        |-Bit0
        | |-Bit0
        | | |-Bit0 = 91
        | | \-Bit1 = 93
        | \-Bit1 = 115
        \-Bit1
          |-Bit0
          | |-Bit0 = 99
          | \-Bit1
          |   |-Bit0
          |   | |-Bit0
          |   | | |-Bit0 = 52
          |   | | \-Bit1 = 53
          |   | \-Bit1 = 62
          |   \-Bit1
          |     |-Bit0 = 60
          |     \-Bit1 = 47
          \-Bit1 = 114
tree bits: 2059
compressed: 1000000000 -> 648369477 bytes