Project

General

Profile

Huffman Codes for BLISS Signatures

  • All Huffman codes were generated automatically using the bliss_huffman utility.

BLISS-I Signature Encoding

Design Parameters
/*
 * Design: sigma = 215
 *
 *   i  p_z1[i]
 *   0  0.7662277087816564         0 ..  256
 *   1  0.2165251006508514       256 ..  512
 *   2  0.0168930510015114       512 ..  768
 *   3  0.0003522302274478       768 .. 1024
 *   4  0.0000019067136680      1024 .. 1280
 *   5  0.0000000026239598      1280 .. 1536
 *   6  0.0000000000009052      1536 .. 1792
 *   7  0.0000000000000001      1792 .. 2047
 *
 *   k  p_z2[k]  dx = 1024
 *  -1  0.0086781953089156   -1535.5 .. -511.5
 *   0  0.9826436093821688    -511.5 ..  511.5
 *   1  0.0086781953089156     511.5 .. 1535.5
 *
 *  (i, k)  p
 *  (0,-1)  0.0066494737079101
 *  (0, 0)  0.7529287613658361
 *  (0, 1)  0.0066494737079101
 *
 *  (1,-1)  0.0018790471127307
 *  (1, 0)  0.2127670064253900
 *  (1, 1)  0.0018790471127307
 *
 *  (2,-1)  0.0001466011959546
 *  (2, 0)  0.0165998486096022
 *  (2, 1)  0.0001466011959546
 *
 *  (3,-1)  0.0000030567227075
 *  (3, 0)  0.0003461167820328
 *  (3, 1)  0.0000030567227075
 *
 *  (4,-1)  0.0000000165468336
 *  (4, 0)  0.0000018736200007
 *  (4, 1)  0.0000000165468336
 *
 *  (5,-1)  0.0000000000227712
 *  (5, 0)  0.0000000025784174
 *  (5, 1)  0.0000000000227712
 *
 *  (6,-1)  0.0000000000000079
 *  (6, 0)  0.0000000000008895
 *  (6, 1)  0.0000000000000079
 *
 *  (7,-1)  0.0000000000000000
 *  (7, 0)  0.0000000000000001
 *  (7, 1)  0.0000000000000000
 *
 *  p_sum   0.9999999999999998
 *
 * entropy = 1.0195 bits/tuple (521 bits)
 */

Decoding Tree
#include "bliss_huffman_code.h" 

static bliss_huffman_code_node_t nodes[] = {
    {   1,   2,  -1 },  /*   0: */
    {  -1,  -1,   1 },  /*   1: (0, 0)  1 bit  */
    {   3,   4,  -1 },  /*   2: */
    {  -1,  -1,   4 },  /*   3: (1, 0)  2 bits */
    {   5,  46,  -1 },  /*   4: */
    {   6,  45,  -1 },  /*   5: */
    {   7,   8,  -1 },  /*   6: */
    {  -1,  -1,   0 },  /*   7: (0,-1)  5 bits */
    {   9,  44,  -1 },  /*   8: */
    {  10,  11,  -1 },  /*   9: */
    {  -1,  -1,   3 },  /*  10: (1,-1)  7 bits */
    {  12,  13,  -1 },  /*  11: */
    {  -1,  -1,  10 },  /*  12: (3, 0)  8 bits */
    {  14,  29,  -1 },  /*  13: */
    {  15,  22,  -1 },  /*  14: */
    {  16,  19,  -1 },  /*  15: */
    {  17,  18,  -1 },  /*  16: */
    {  -1,  -1,   8 },  /*  17: (2, 1) 12 bits */
    {  -1,  -1,   6 },  /*  18: (2,-1) 12 bits */
    {  20,  21,  -1 },  /*  19: */
    {  -1,  -1,  11 },  /*  20: (3, 1) 12 bits */
    {  -1,  -1,   9 },  /*  21: (3,-1) 12 bits */
    {  23,  26,  -1 },  /*  22: */
    {  24,  25,  -1 },  /*  23: */
    {  -1,  -1,  13 },  /*  24: (4, 0) 12 bits */
    {  -1,  -1,  14 },  /*  25: (4, 1) 12 bits */
    {  27,  28,  -1 },  /*  26: */
    {  -1,  -1,  12 },  /*  27: (4,-1) 12 bits */
    {  -1,  -1,  16 },  /*  28: (5, 0) 12 bits */
    {  30,  37,  -1 },  /*  29: */
    {  31,  34,  -1 },  /*  30: */
    {  32,  33,  -1 },  /*  31: */
    {  -1,  -1,  17 },  /*  32: (5, 1) 12 bits */
    {  -1,  -1,  15 },  /*  33: (5,-1) 12 bits */
    {  35,  36,  -1 },  /*  34: */
    {  -1,  -1,  19 },  /*  35: (6, 0) 12 bits */
    {  -1,  -1,  20 },  /*  36: (6, 1) 12 bits */
    {  38,  41,  -1 },  /*  37: */
    {  39,  40,  -1 },  /*  38: */
    {  -1,  -1,  18 },  /*  39: (6,-1) 12 bits */
    {  -1,  -1,  22 },  /*  40: (7, 0) 12 bits */
    {  42,  43,  -1 },  /*  41: */
    {  -1,  -1,  23 },  /*  42: (7, 1) 12 bits */
    {  -1,  -1,  21 },  /*  43: (7,-1) 12 bits */
    {  -1,  -1,   5 },  /*  44: (1, 1)  6 bits */
    {  -1,  -1,   2 },  /*  45: (0, 1)  4 bits */
    {  -1,  -1,   7 },  /*  46: (2, 0)  3 bits */
};

Encoding Table
static bliss_huffman_code_tuple_t tuples[] = {
    {    24,  5 },  /*   0: (0,-1) 11000 */
    {     0,  1 },  /*   1: (0, 0) 0 */
    {    13,  4 },  /*   2: (0, 1) 1101 */

    {   100,  7 },  /*   3: (1,-1) 1100100 */
    {     2,  2 },  /*   4: (1, 0) 10 */
    {    51,  6 },  /*   5: (1, 1) 110011 */

    {  3249, 12 },  /*   6: (2,-1) 110010110001 */
    {     7,  3 },  /*   7: (2, 0) 111 */
    {  3248, 12 },  /*   8: (2, 1) 110010110000 */

    {  3251, 12 },  /*   9: (3,-1) 110010110011 */
    {   202,  8 },  /*  10: (3, 0) 11001010 */
    {  3250, 12 },  /*  11: (3, 1) 110010110010 */

    {  3254, 12 },  /*  12: (4,-1) 110010110110 */
    {  3252, 12 },  /*  13: (4, 0) 110010110100 */
    {  3253, 12 },  /*  14: (4, 1) 110010110101 */

    {  3257, 12 },  /*  15: (5,-1) 110010111001 */
    {  3255, 12 },  /*  16: (5, 0) 110010110111 */
    {  3256, 12 },  /*  17: (5, 1) 110010111000 */

    {  3260, 12 },  /*  18: (6,-1) 110010111100 */
    {  3258, 12 },  /*  19: (6, 0) 110010111010 */
    {  3259, 12 },  /*  20: (6, 1) 110010111011 */

    {  3263, 12 },  /*  21: (7,-1) 110010111111 */
    {  3261, 12 },  /*  22: (7, 0) 110010111101 */
    {  3262, 12 },  /*  23: (7, 1) 110010111110 */
};

/* code_length = 1.3189 bits/tuple (676 bits) */

Parameter Set
bliss_huffman_code_t bliss_huffman_code_1 = {
    .n_z1 = 8,
    .n_z2 = 2,
    .tuples = tuples,
    .nodes  = nodes
};

BLISS-III Signature Encoding

Design Parameters
/*
 * Design: sigma = 250
 *
 *   i  p_z1[i]
 *   0  0.6941647250930416         0 ..  256
 *   1  0.2652752755116807       256 ..  512
 *   2  0.0384337021454129       512 ..  768
 *   3  0.0020842622589255       768 .. 1024
 *   4  0.0000417294572050      1024 .. 1280
 *   5  0.0000003047309681      1280 .. 1536
 *   6  0.0000000008027661      1536 .. 1760
 *
 *   k  p_z2[k]  dx = 512
 *  -3  0.0000001543959154   -1791.5 ..-1279.5
 *  -2  0.0010701394583782   -1279.5 .. -767.5
 *  -1  0.1523201563502276    -767.5 .. -255.5
 *   0  0.6932190995909575    -255.5 ..  255.5
 *   1  0.1523201563502276     255.5 ..  767.5
 *   2  0.0010701394583782     767.5 .. 1279.5
 *   3  0.0000001543959154    1279.5 .. 1791.5
 *
 *  (i, k)  p
 *  (0,-3)  0.0000001071761982
 *  (0,-2)  0.0007428530629363
 *  (0,-1)  0.1057352794589848
 *  (0, 0)  0.4812082456968029
 *  (0, 1)  0.1057352794589848
 *  (0, 2)  0.0007428530629363
 *  (0, 3)  0.0000001071761982
 *
 *  (1,-3)  0.0000000409574190
 *  (1,-2)  0.0002838815396572
 *  (1,-1)  0.0404067714417889
 *  (1, 0)  0.1838938876339505
 *  (1, 1)  0.0404067714417889
 *  (1, 2)  0.0002838815396572
 *  (1, 3)  0.0000000409574190
 *
 *  (2,-3)  0.0000000059340066
 *  (2,-2)  0.0000411294211974
 *  (2,-1)  0.0058542275199074
 *  (2, 0)  0.0266429763951902
 *  (2, 1)  0.0058542275199074
 *  (2, 2)  0.0000411294211974
 *  (2, 3)  0.0000000059340066
 *
 *  (3,-3)  0.0000000003218016
 *  (3,-2)  0.0000022304512849
 *  (3,-1)  0.0003174751531544
 *  (3, 0)  0.0014448504064437
 *  (3, 1)  0.0003174751531544
 *  (3, 2)  0.0000022304512849
 *  (3, 3)  0.0000000003218016
 *
 *  (4,-3)  0.0000000000064429
 *  (4,-2)  0.0000000446563387
 *  (4,-1)  0.0000063562374459
 *  (4, 0)  0.0000289276567501
 *  (4, 1)  0.0000063562374459
 *  (4, 2)  0.0000000446563387
 *  (4, 3)  0.0000000000064429
 *
 *  (5,-3)  0.0000000000000470
 *  (5,-2)  0.0000000003261046
 *  (5,-1)  0.0000000464166687
 *  (5, 0)  0.0000002112453273
 *  (5, 1)  0.0000000464166687
 *  (5, 2)  0.0000000003261046
 *  (5, 3)  0.0000000000000470
 *
 *  (6,-3)  0.0000000000000001
 *  (6,-2)  0.0000000000008591
 *  (6,-1)  0.0000000001222775
 *  (6, 0)  0.0000000005564928
 *  (6, 1)  0.0000000001222775
 *  (6, 2)  0.0000000000008591
 *  (6, 3)  0.0000000000000001
 *
 *  p_sum   0.9999999999999999
 *
 * entropy = 2.2879 bits/tuple (1171 bits)
 */

Decoding Tree
#include "bliss_huffman_code.h" 

static bliss_huffman_code_node_t nodes[] = {
    {   1,  96,  -1 },  /*   0: */
    {   2,  93,  -1 },  /*   1: */
    {   3,   4,  -1 },  /*   2: */
    {  -1,  -1,  10 },  /*   3: (1, 0)  3 bits */
    {   5,   8,  -1 },  /*   4: */
    {   6,   7,  -1 },  /*   5: */
    {  -1,  -1,  11 },  /*   6: (1, 1)  5 bits */
    {  -1,  -1,   9 },  /*   7: (1,-1)  5 bits */
    {   9,  10,  -1 },  /*   8: */
    {  -1,  -1,  17 },  /*   9: (2, 0)  5 bits */
    {  11,  92,  -1 },  /*  10: */
    {  12,  13,  -1 },  /*  11: */
    {  -1,  -1,  16 },  /*  12: (2,-1)  7 bits */
    {  14,  89,  -1 },  /*  13: */
    {  15,  16,  -1 },  /*  14: */
    {  -1,  -1,  24 },  /*  15: (3, 0)  9 bits */
    {  17,  86,  -1 },  /*  16: */
    {  18,  85,  -1 },  /*  17: */
    {  19,  20,  -1 },  /*  18: */
    {  -1,  -1,   8 },  /*  19: (1,-2) 12 bits */
    {  21,  84,  -1 },  /*  20: */
    {  22,  53,  -1 },  /*  21: */
    {  23,  38,  -1 },  /*  22: */
    {  24,  31,  -1 },  /*  23: */
    {  25,  28,  -1 },  /*  24: */
    {  26,  27,  -1 },  /*  25: */
    {  -1,  -1,  15 },  /*  26: (2,-2) 18 bits */
    {  -1,  -1,  31 },  /*  27: (4, 0) 18 bits */
    {  29,  30,  -1 },  /*  28: */
    {  -1,  -1,  32 },  /*  29: (4, 1) 18 bits */
    {  -1,  -1,  30 },  /*  30: (4,-1) 18 bits */
    {  32,  35,  -1 },  /*  31: */
    {  33,  34,  -1 },  /*  32: */
    {  -1,  -1,  26 },  /*  33: (3, 2) 18 bits */
    {  -1,  -1,  22 },  /*  34: (3,-2) 18 bits */
    {  36,  37,  -1 },  /*  35: */
    {  -1,  -1,  38 },  /*  36: (5, 0) 18 bits */
    {  -1,  -1,   6 },  /*  37: (0, 3) 18 bits */
    {  39,  46,  -1 },  /*  38: */
    {  40,  43,  -1 },  /*  39: */
    {  41,  42,  -1 },  /*  40: */
    {  -1,  -1,   0 },  /*  41: (0,-3) 18 bits */
    {  -1,  -1,  39 },  /*  42: (5, 1) 18 bits */
    {  44,  45,  -1 },  /*  43: */
    {  -1,  -1,  37 },  /*  44: (5,-1) 18 bits */
    {  -1,  -1,  33 },  /*  45: (4, 2) 18 bits */
    {  47,  50,  -1 },  /*  46: */
    {  48,  49,  -1 },  /*  47: */
    {  -1,  -1,  29 },  /*  48: (4,-2) 18 bits */
    {  -1,  -1,  13 },  /*  49: (1, 3) 18 bits */
    {  51,  52,  -1 },  /*  50: */
    {  -1,  -1,   7 },  /*  51: (1,-3) 18 bits */
    {  -1,  -1,  20 },  /*  52: (2, 3) 18 bits */
    {  54,  69,  -1 },  /*  53: */
    {  55,  62,  -1 },  /*  54: */
    {  56,  59,  -1 },  /*  55: */
    {  57,  58,  -1 },  /*  56: */
    {  -1,  -1,  14 },  /*  57: (2,-3) 18 bits */
    {  -1,  -1,  45 },  /*  58: (6, 0) 18 bits */
    {  60,  61,  -1 },  /*  59: */
    {  -1,  -1,  40 },  /*  60: (5, 2) 18 bits */
    {  -1,  -1,  36 },  /*  61: (5,-2) 18 bits */
    {  63,  66,  -1 },  /*  62: */
    {  64,  65,  -1 },  /*  63: */
    {  -1,  -1,  27 },  /*  64: (3, 3) 18 bits */
    {  -1,  -1,  21 },  /*  65: (3,-3) 18 bits */
    {  67,  68,  -1 },  /*  66: */
    {  -1,  -1,  46 },  /*  67: (6, 1) 18 bits */
    {  -1,  -1,  44 },  /*  68: (6,-1) 18 bits */
    {  70,  77,  -1 },  /*  69: */
    {  71,  74,  -1 },  /*  70: */
    {  72,  73,  -1 },  /*  71: */
    {  -1,  -1,  34 },  /*  72: (4, 3) 18 bits */
    {  -1,  -1,  28 },  /*  73: (4,-3) 18 bits */
    {  75,  76,  -1 },  /*  74: */
    {  -1,  -1,  47 },  /*  75: (6, 2) 18 bits */
    {  -1,  -1,  43 },  /*  76: (6,-2) 18 bits */
    {  78,  81,  -1 },  /*  77: */
    {  79,  80,  -1 },  /*  78: */
    {  -1,  -1,  41 },  /*  79: (5, 3) 18 bits */
    {  -1,  -1,  35 },  /*  80: (5,-3) 18 bits */
    {  82,  83,  -1 },  /*  81: */
    {  -1,  -1,  48 },  /*  82: (6, 3) 18 bits */
    {  -1,  -1,  42 },  /*  83: (6,-3) 18 bits */
    {  -1,  -1,  19 },  /*  84: (2, 2) 13 bits */
    {  -1,  -1,  25 },  /*  85: (3, 1) 11 bits */
    {  87,  88,  -1 },  /*  86: */
    {  -1,  -1,  23 },  /*  87: (3,-1) 11 bits */
    {  -1,  -1,  12 },  /*  88: (1, 2) 11 bits */
    {  90,  91,  -1 },  /*  89: */
    {  -1,  -1,   5 },  /*  90: (0, 2)  9 bits */
    {  -1,  -1,   1 },  /*  91: (0,-2)  9 bits */
    {  -1,  -1,  18 },  /*  92: (2, 1)  6 bits */
    {  94,  95,  -1 },  /*  93: */
    {  -1,  -1,   4 },  /*  94: (0, 1)  3 bits */
    {  -1,  -1,   2 },  /*  95: (0,-1)  3 bits */
    {  -1,  -1,   3 },  /*  96: (0, 0)  1 bit  */
};

Encoding Table
static bliss_huffman_code_tuple_t tuples[] = {
    { 59976, 18 },  /*   0: (0,-3) 001110101001001000 */
    {   119,  9 },  /*   1: (0,-2) 001110111 */
    {     3,  3 },  /*   2: (0,-1) 011 */
    {     1,  1 },  /*   3: (0, 0) 1 */
    {     2,  3 },  /*   4: (0, 1) 010 */
    {   118,  9 },  /*   5: (0, 2) 001110110 */
    { 59975, 18 },  /*   6: (0, 3) 001110101001000111 */

    { 59982, 18 },  /*   7: (1,-3) 001110101001001110 */
    {   936, 12 },  /*   8: (1,-2) 001110101000 */
    {     5,  5 },  /*   9: (1,-1) 00101 */
    {     0,  3 },  /*  10: (1, 0) 000 */
    {     4,  5 },  /*  11: (1, 1) 00100 */
    {   471, 11 },  /*  12: (1, 2) 00111010111 */
    { 59981, 18 },  /*  13: (1, 3) 001110101001001101 */

    { 59984, 18 },  /*  14: (2,-3) 001110101001010000 */
    { 59968, 18 },  /*  15: (2,-2) 001110101001000000 */
    {    28,  7 },  /*  16: (2,-1) 0011100 */
    {     6,  5 },  /*  17: (2, 0) 00110 */
    {    15,  6 },  /*  18: (2, 1) 001111 */
    {  1875, 13 },  /*  19: (2, 2) 0011101010011 */
    { 59983, 18 },  /*  20: (2, 3) 001110101001001111 */

    { 59989, 18 },  /*  21: (3,-3) 001110101001010101 */
    { 59973, 18 },  /*  22: (3,-2) 001110101001000101 */
    {   470, 11 },  /*  23: (3,-1) 00111010110 */
    {   116,  9 },  /*  24: (3, 0) 001110100 */
    {   469, 11 },  /*  25: (3, 1) 00111010101 */
    { 59972, 18 },  /*  26: (3, 2) 001110101001000100 */
    { 59988, 18 },  /*  27: (3, 3) 001110101001010100 */

    { 59993, 18 },  /*  28: (4,-3) 001110101001011001 */
    { 59980, 18 },  /*  29: (4,-2) 001110101001001100 */
    { 59971, 18 },  /*  30: (4,-1) 001110101001000011 */
    { 59969, 18 },  /*  31: (4, 0) 001110101001000001 */
    { 59970, 18 },  /*  32: (4, 1) 001110101001000010 */
    { 59979, 18 },  /*  33: (4, 2) 001110101001001011 */
    { 59992, 18 },  /*  34: (4, 3) 001110101001011000 */

    { 59997, 18 },  /*  35: (5,-3) 001110101001011101 */
    { 59987, 18 },  /*  36: (5,-2) 001110101001010011 */
    { 59978, 18 },  /*  37: (5,-1) 001110101001001010 */
    { 59974, 18 },  /*  38: (5, 0) 001110101001000110 */
    { 59977, 18 },  /*  39: (5, 1) 001110101001001001 */
    { 59986, 18 },  /*  40: (5, 2) 001110101001010010 */
    { 59996, 18 },  /*  41: (5, 3) 001110101001011100 */

    { 59999, 18 },  /*  42: (6,-3) 001110101001011111 */
    { 59995, 18 },  /*  43: (6,-2) 001110101001011011 */
    { 59991, 18 },  /*  44: (6,-1) 001110101001010111 */
    { 59985, 18 },  /*  45: (6, 0) 001110101001010001 */
    { 59990, 18 },  /*  46: (6, 1) 001110101001010110 */
    { 59994, 18 },  /*  47: (6, 2) 001110101001011010 */
    { 59998, 18 },  /*  48: (6, 3) 001110101001011110 */
};

/* code_length = 2.3227 bits/tuple (1190 bits) */

Parameter Set
bliss_huffman_code_t bliss_huffman_code_3 = {
    .n_z1 = 7,
    .n_z2 = 4,
    .tuples = tuples,
    .nodes  = nodes
};

BLISS-IV Signature Encoding

Design Parameters
/*
 * Design: sigma = 271
 *
 *   i  p_z1[i]
 *   0  0.6551621276225426         0 ..  256
 *   1  0.2859860850630749       256 ..  512
 *   2  0.0542541135599810       512 ..  768
 *   3  0.0044399624814222       768 .. 1024
 *   4  0.0001553928373912      1024 .. 1280
 *   5  0.0000023066278552      1280 .. 1536
 *   6  0.0000000118077330      1536 .. 1613
 *
 *   k  p_z2[k]  dx = 256
 *  -6  0.0000001026458579   -1663.5 ..-1407.5
 *  -5  0.0000106295703648   -1407.5 ..-1151.5
 *  -4  0.0004651193817805   -1151.5 .. -895.5
 *  -3  0.0086670703658387    -895.5 .. -639.5
 *  -2  0.0693723939195647    -639.5 .. -383.5
 *  -1  0.2404908493690626    -383.5 .. -127.5
 *   0  0.3619876694950614    -127.5 ..  127.5
 *   1  0.2404908493690626     127.5 ..  383.5
 *   2  0.0693723939195647     383.5 ..  639.5
 *   3  0.0086670703658387     639.5 ..  895.5
 *   4  0.0004651193817805     895.5 .. 1151.5
 *   5  0.0000106295703648    1151.5 .. 1407.5
 *   6  0.0000001026458579    1407.5 .. 1663.5
 *
 *  (i, k)  p
 *  (0,-6)  0.0000000672496787
 *  (0,-5)  0.0000069640919359
 *  (0,-4)  0.0003047286037658
 *  (0,-3)  0.0056783362611372
 *  (0,-2)  0.0454501651986111
 *  (0,-1)  0.1575604965463875
 *  (0, 0)  0.2371606117195102
 *  (0, 1)  0.1575604965463875
 *  (0, 2)  0.0454501651986111
 *  (0, 3)  0.0056783362611372
 *  (0, 4)  0.0003047286037658
 *  (0, 5)  0.0000069640919359
 *  (0, 6)  0.0000000672496787
 *
 *  (1,-6)  0.0000000293552870
 *  (1,-5)  0.0000030399092145
 *  (1,-4)  0.0001330176710824
 *  (1,-3)  0.0024786615228924
 *  (1,-2)  0.0198395393485098
 *  (1,-1)  0.0687770365045519
 *  (1, 0)  0.1035234364399989
 *  (1, 1)  0.0687770365045519
 *  (1, 2)  0.0198395393485098
 *  (1, 3)  0.0024786615228924
 *  (1, 4)  0.0001330176710824
 *  (1, 5)  0.0000030399092145
 *  (1, 6)  0.0000000293552870
 *
 *  (2,-6)  0.0000000055689600
 *  (2,-5)  0.0000005766979177
 *  (2,-4)  0.0000252346397581
 *  (2,-3)  0.0004702242198606
 *  (2,-2)  0.0037637377376398
 *  (2,-1)  0.0130476178518054
 *  (2, 0)  0.0196393201280979
 *  (2, 1)  0.0130476178518054
 *  (2, 2)  0.0037637377376398
 *  (2, 3)  0.0004702242198606
 *  (2, 4)  0.0000252346397581
 *  (2, 5)  0.0000005766979177
 *  (2, 6)  0.0000000055689600
 *
 *  (3,-6)  0.0000000004557438
 *  (3,-5)  0.0000000471948936
 *  (3,-4)  0.0000020651126045
 *  (3,-3)  0.0000384814672482
 *  (3,-2)  0.0003080108262493
 *  (3,-1)  0.0010677703483240
 *  (3, 0)  0.0016072116712955
 *  (3, 1)  0.0010677703483240
 *  (3, 2)  0.0003080108262493
 *  (3, 3)  0.0000384814672482
 *  (3, 4)  0.0000020651126045
 *  (3, 5)  0.0000000471948936
 *  (3, 6)  0.0000000004557438
 *
 *  (4,-6)  0.0000000000159504
 *  (4,-5)  0.0000000016517591
 *  (4,-4)  0.0000000722762205
 *  (4,-3)  0.0000013468006560
 *  (4,-2)  0.0000107799731278
 *  (4,-1)  0.0000373705554501
 *  (4, 0)  0.0000562502910635
 *  (4, 1)  0.0000373705554501
 *  (4, 2)  0.0000107799731278
 *  (4, 3)  0.0000013468006560
 *  (4, 4)  0.0000000722762205
 *  (4, 5)  0.0000000016517591
 *  (4, 6)  0.0000000000159504
 *
 *  (5,-6)  0.0000000000002368
 *  (5,-5)  0.0000000000245185
 *  (5,-4)  0.0000000010728573
 *  (5,-3)  0.0000000199917059
 *  (5,-2)  0.0000001600162962
 *  (5,-1)  0.0000005547228921
 *  (5, 0)  0.0000008349708417
 *  (5, 1)  0.0000005547228921
 *  (5, 2)  0.0000001600162962
 *  (5, 3)  0.0000000199917059
 *  (5, 4)  0.0000000010728573
 *  (5, 5)  0.0000000000245185
 *  (5, 6)  0.0000000000002368
 *
 *  (6,-6)  0.0000000000000012
 *  (6,-5)  0.0000000000001255
 *  (6,-4)  0.0000000000054920
 *  (6,-3)  0.0000000001023385
 *  (6,-2)  0.0000000008191307
 *  (6,-1)  0.0000000028396517
 *  (6, 0)  0.0000000042742538
 *  (6, 1)  0.0000000028396517
 *  (6, 2)  0.0000000008191307
 *  (6, 3)  0.0000000001023385
 *  (6, 4)  0.0000000000054920
 *  (6, 5)  0.0000000000001255
 *  (6, 6)  0.0000000000000012
 *
 *  p_sum   1.0000000000000011
 *
 * entropy = 3.3640 bits/tuple (1722 bits)
 */

Decoding Tree
#include "bliss_huffman_code.h" 

static bliss_huffman_code_node_t nodes[] = {
    {   1, 160,  -1 },  /*   0: */
    {   2,   5,  -1 },  /*   1: */
    {   3,   4,  -1 },  /*   2: */
    {  -1,  -1,   7 },  /*   3: (0, 1)  3 bits */
    {  -1,  -1,   5 },  /*   4: (0,-1)  3 bits */
    {   6, 157,  -1 },  /*   5: */
    {   7, 156,  -1 },  /*   6: */
    {   8,  11,  -1 },  /*   7: */
    {   9,  10,  -1 },  /*   8: */
    {  -1,  -1,  17 },  /*   9: (1,-2)  6 bits */
    {  -1,  -1,  32 },  /*  10: (2, 0)  6 bits */
    {  12, 155,  -1 },  /*  11: */
    {  13,  18,  -1 },  /*  12: */
    {  14,  15,  -1 },  /*  13: */
    {  -1,  -1,   3 },  /*  14: (0,-3)  8 bits */
    {  16,  17,  -1 },  /*  15: */
    {  -1,  -1,  22 },  /*  16: (1, 3)  9 bits */
    {  -1,  -1,  16 },  /*  17: (1,-3)  9 bits */
    {  19, 154,  -1 },  /*  18: */
    {  20,  23,  -1 },  /*  19: */
    {  21,  22,  -1 },  /*  20: */
    {  -1,  -1,  46 },  /*  21: (3, 1) 10 bits */
    {  -1,  -1,  44 },  /*  22: (3,-1) 10 bits */
    {  24, 151,  -1 },  /*  23: */
    {  25,  88,  -1 },  /*  24: */
    {  26,  57,  -1 },  /*  25: */
    {  27,  42,  -1 },  /*  26: */
    {  28,  35,  -1 },  /*  27: */
    {  29,  32,  -1 },  /*  28: */
    {  30,  31,  -1 },  /*  29: */
    {  -1,  -1,   2 },  /*  30: (0,-4) 16 bits */
    {  -1,  -1,  23 },  /*  31: (1, 4) 16 bits */
    {  33,  34,  -1 },  /*  32: */
    {  -1,  -1,  15 },  /*  33: (1,-4) 16 bits */
    {  -1,  -1,  58 },  /*  34: (4, 0) 16 bits */
    {  36,  39,  -1 },  /*  35: */
    {  37,  38,  -1 },  /*  36: */
    {  -1,  -1,  48 },  /*  37: (3, 3) 16 bits */
    {  -1,  -1,  42 },  /*  38: (3,-3) 16 bits */
    {  40,  41,  -1 },  /*  39: */
    {  -1,  -1,  59 },  /*  40: (4, 1) 16 bits */
    {  -1,  -1,  57 },  /*  41: (4,-1) 16 bits */
    {  43,  50,  -1 },  /*  42: */
    {  44,  47,  -1 },  /*  43: */
    {  45,  46,  -1 },  /*  44: */
    {  -1,  -1,  36 },  /*  45: (2, 4) 16 bits */
    {  -1,  -1,  28 },  /*  46: (2,-4) 16 bits */
    {  48,  49,  -1 },  /*  47: */
    {  -1,  -1,  60 },  /*  48: (4, 2) 16 bits */
    {  -1,  -1,  56 },  /*  49: (4,-2) 16 bits */
    {  51,  54,  -1 },  /*  50: */
    {  52,  53,  -1 },  /*  51: */
    {  -1,  -1,  11 },  /*  52: (0, 5) 16 bits */
    {  -1,  -1,   1 },  /*  53: (0,-5) 16 bits */
    {  55,  56,  -1 },  /*  54: */
    {  -1,  -1,  24 },  /*  55: (1, 5) 16 bits */
    {  -1,  -1,  14 },  /*  56: (1,-5) 16 bits */
    {  58,  73,  -1 },  /*  57: */
    {  59,  66,  -1 },  /*  58: */
    {  60,  63,  -1 },  /*  59: */
    {  61,  62,  -1 },  /*  60: */
    {  -1,  -1,  49 },  /*  61: (3, 4) 16 bits */
    {  -1,  -1,  41 },  /*  62: (3,-4) 16 bits */
    {  64,  65,  -1 },  /*  63: */
    {  -1,  -1,  61 },  /*  64: (4, 3) 16 bits */
    {  -1,  -1,  55 },  /*  65: (4,-3) 16 bits */
    {  67,  70,  -1 },  /*  66: */
    {  68,  69,  -1 },  /*  67: */
    {  -1,  -1,  71 },  /*  68: (5, 0) 16 bits */
    {  -1,  -1,  37 },  /*  69: (2, 5) 16 bits */
    {  71,  72,  -1 },  /*  70: */
    {  -1,  -1,  27 },  /*  71: (2,-5) 16 bits */
    {  -1,  -1,  72 },  /*  72: (5, 1) 16 bits */
    {  74,  81,  -1 },  /*  73: */
    {  75,  78,  -1 },  /*  74: */
    {  76,  77,  -1 },  /*  75: */
    {  -1,  -1,  70 },  /*  76: (5,-1) 16 bits */
    {  -1,  -1,  73 },  /*  77: (5, 2) 16 bits */
    {  79,  80,  -1 },  /*  78: */
    {  -1,  -1,  69 },  /*  79: (5,-2) 16 bits */
    {  -1,  -1,  62 },  /*  80: (4, 4) 16 bits */
    {  82,  85,  -1 },  /*  81: */
    {  83,  84,  -1 },  /*  82: */
    {  -1,  -1,  54 },  /*  83: (4,-4) 16 bits */
    {  -1,  -1,  12 },  /*  84: (0, 6) 16 bits */
    {  86,  87,  -1 },  /*  85: */
    {  -1,  -1,   0 },  /*  86: (0,-6) 16 bits */
    {  -1,  -1,  50 },  /*  87: (3, 5) 16 bits */
    {  89, 120,  -1 },  /*  88: */
    {  90, 105,  -1 },  /*  89: */
    {  91,  98,  -1 },  /*  90: */
    {  92,  95,  -1 },  /*  91: */
    {  93,  94,  -1 },  /*  92: */
    {  -1,  -1,  40 },  /*  93: (3,-5) 16 bits */
    {  -1,  -1,  25 },  /*  94: (1, 6) 16 bits */
    {  96,  97,  -1 },  /*  95: */
    {  -1,  -1,  13 },  /*  96: (1,-6) 16 bits */
    {  -1,  -1,  74 },  /*  97: (5, 3) 16 bits */
    {  99, 102,  -1 },  /*  98: */
    { 100, 101,  -1 },  /*  99: */
    {  -1,  -1,  68 },  /* 100: (5,-3) 16 bits */
    {  -1,  -1,  38 },  /* 101: (2, 6) 16 bits */
    { 103, 104,  -1 },  /* 102: */
    {  -1,  -1,  26 },  /* 103: (2,-6) 16 bits */
    {  -1,  -1,  84 },  /* 104: (6, 0) 16 bits */
    { 106, 113,  -1 },  /* 105: */
    { 107, 110,  -1 },  /* 106: */
    { 108, 109,  -1 },  /* 107: */
    {  -1,  -1,  85 },  /* 108: (6, 1) 16 bits */
    {  -1,  -1,  83 },  /* 109: (6,-1) 16 bits */
    { 111, 112,  -1 },  /* 110: */
    {  -1,  -1,  63 },  /* 111: (4, 5) 16 bits */
    {  -1,  -1,  53 },  /* 112: (4,-5) 16 bits */
    { 114, 117,  -1 },  /* 113: */
    { 115, 116,  -1 },  /* 114: */
    {  -1,  -1,  75 },  /* 115: (5, 4) 16 bits */
    {  -1,  -1,  67 },  /* 116: (5,-4) 16 bits */
    { 118, 119,  -1 },  /* 117: */
    {  -1,  -1,  86 },  /* 118: (6, 2) 16 bits */
    {  -1,  -1,  82 },  /* 119: (6,-2) 16 bits */
    { 121, 136,  -1 },  /* 120: */
    { 122, 129,  -1 },  /* 121: */
    { 123, 126,  -1 },  /* 122: */
    { 124, 125,  -1 },  /* 123: */
    {  -1,  -1,  51 },  /* 124: (3, 6) 16 bits */
    {  -1,  -1,  39 },  /* 125: (3,-6) 16 bits */
    { 127, 128,  -1 },  /* 126: */
    {  -1,  -1,  87 },  /* 127: (6, 3) 16 bits */
    {  -1,  -1,  81 },  /* 128: (6,-3) 16 bits */
    { 130, 133,  -1 },  /* 129: */
    { 131, 132,  -1 },  /* 130: */
    {  -1,  -1,  76 },  /* 131: (5, 5) 16 bits */
    {  -1,  -1,  66 },  /* 132: (5,-5) 16 bits */
    { 134, 135,  -1 },  /* 133: */
    {  -1,  -1,  64 },  /* 134: (4, 6) 16 bits */
    {  -1,  -1,  52 },  /* 135: (4,-6) 16 bits */
    { 137, 144,  -1 },  /* 136: */
    { 138, 141,  -1 },  /* 137: */
    { 139, 140,  -1 },  /* 138: */
    {  -1,  -1,  88 },  /* 139: (6, 4) 16 bits */
    {  -1,  -1,  80 },  /* 140: (6,-4) 16 bits */
    { 142, 143,  -1 },  /* 141: */
    {  -1,  -1,  77 },  /* 142: (5, 6) 16 bits */
    {  -1,  -1,  65 },  /* 143: (5,-6) 16 bits */
    { 145, 148,  -1 },  /* 144: */
    { 146, 147,  -1 },  /* 145: */
    {  -1,  -1,  89 },  /* 146: (6, 5) 16 bits */
    {  -1,  -1,  79 },  /* 147: (6,-5) 16 bits */
    { 149, 150,  -1 },  /* 148: */
    {  -1,  -1,  90 },  /* 149: (6, 6) 16 bits */
    {  -1,  -1,  78 },  /* 150: (6,-6) 16 bits */
    { 152, 153,  -1 },  /* 151: */
    {  -1,  -1,  29 },  /* 152: (2,-3) 11 bits */
    {  -1,  -1,  47 },  /* 153: (3, 2) 11 bits */
    {  -1,  -1,  34 },  /* 154: (2, 2)  8 bits */
    {  -1,  -1,  33 },  /* 155: (2, 1)  6 bits */
    {  -1,  -1,  20 },  /* 156: (1, 1)  4 bits */
    { 158, 159,  -1 },  /* 157: */
    {  -1,  -1,  18 },  /* 158: (1,-1)  4 bits */
    {  -1,  -1,   8 },  /* 159: (0, 2)  4 bits */
    { 161, 162,  -1 },  /* 160: */
    {  -1,  -1,   6 },  /* 161: (0, 0)  2 bits */
    { 163, 164,  -1 },  /* 162: */
    {  -1,  -1,  19 },  /* 163: (1, 0)  3 bits */
    { 165, 166,  -1 },  /* 164: */
    {  -1,  -1,   4 },  /* 165: (0,-2)  4 bits */
    { 167, 180,  -1 },  /* 166: */
    { 168, 169,  -1 },  /* 167: */
    {  -1,  -1,  31 },  /* 168: (2,-1)  6 bits */
    { 170, 179,  -1 },  /* 169: */
    { 171, 172,  -1 },  /* 170: */
    {  -1,  -1,  30 },  /* 171: (2,-2)  8 bits */
    { 173, 174,  -1 },  /* 172: */
    {  -1,  -1,  45 },  /* 173: (3, 0)  9 bits */
    { 175, 178,  -1 },  /* 174: */
    { 176, 177,  -1 },  /* 175: */
    {  -1,  -1,  43 },  /* 176: (3,-2) 11 bits */
    {  -1,  -1,  10 },  /* 177: (0, 4) 11 bits */
    {  -1,  -1,  35 },  /* 178: (2, 3) 10 bits */
    {  -1,  -1,   9 },  /* 179: (0, 3)  7 bits */
    {  -1,  -1,  21 },  /* 180: (1, 2)  5 bits */
};

Encoding Table
static bliss_huffman_code_tuple_t tuples[] = {
    { 19102, 16 },  /*   0: (0,-6) 0100101010011110 */
    { 19085, 16 },  /*   1: (0,-5) 0100101010001101 */
    { 19072, 16 },  /*   2: (0,-4) 0100101010000000 */
    {    72,  8 },  /*   3: (0,-3) 01001000 */
    {    14,  4 },  /*   4: (0,-2) 1110 */
    {     1,  3 },  /*   5: (0,-1) 001 */
    {     2,  2 },  /*   6: (0, 0) 10 */
    {     0,  3 },  /*   7: (0, 1) 000 */
    {     7,  4 },  /*   8: (0, 2) 0111 */
    {   123,  7 },  /*   9: (0, 3) 1111011 */
    {  1965, 11 },  /*  10: (0, 4) 11110101101 */
    { 19084, 16 },  /*  11: (0, 5) 0100101010001100 */
    { 19101, 16 },  /*  12: (0, 6) 0100101010011101 */

    { 19106, 16 },  /*  13: (1,-6) 0100101010100010 */
    { 19087, 16 },  /*  14: (1,-5) 0100101010001111 */
    { 19074, 16 },  /*  15: (1,-4) 0100101010000010 */
    {   147,  9 },  /*  16: (1,-3) 010010011 */
    {    16,  6 },  /*  17: (1,-2) 010000 */
    {     6,  4 },  /*  18: (1,-1) 0110 */
    {     6,  3 },  /*  19: (1, 0) 110 */
    {     5,  4 },  /*  20: (1, 1) 0101 */
    {    31,  5 },  /*  21: (1, 2) 11111 */
    {   146,  9 },  /*  22: (1, 3) 010010010 */
    { 19073, 16 },  /*  23: (1, 4) 0100101010000001 */
    { 19086, 16 },  /*  24: (1, 5) 0100101010001110 */
    { 19105, 16 },  /*  25: (1, 6) 0100101010100001 */

    { 19110, 16 },  /*  26: (2,-6) 0100101010100110 */
    { 19094, 16 },  /*  27: (2,-5) 0100101010010110 */
    { 19081, 16 },  /*  28: (2,-4) 0100101010001001 */
    {   598, 11 },  /*  29: (2,-3) 01001010110 */
    {   244,  8 },  /*  30: (2,-2) 11110100 */
    {    60,  6 },  /*  31: (2,-1) 111100 */
    {    17,  6 },  /*  32: (2, 0) 010001 */
    {    19,  6 },  /*  33: (2, 1) 010011 */
    {    75,  8 },  /*  34: (2, 2) 01001011 */
    {   983, 10 },  /*  35: (2, 3) 1111010111 */
    { 19080, 16 },  /*  36: (2, 4) 0100101010001000 */
    { 19093, 16 },  /*  37: (2, 5) 0100101010010101 */
    { 19109, 16 },  /*  38: (2, 6) 0100101010100101 */

    { 19121, 16 },  /*  39: (3,-6) 0100101010110001 */
    { 19104, 16 },  /*  40: (3,-5) 0100101010100000 */
    { 19089, 16 },  /*  41: (3,-4) 0100101010010001 */
    { 19077, 16 },  /*  42: (3,-3) 0100101010000101 */
    {  1964, 11 },  /*  43: (3,-2) 11110101100 */
    {   297, 10 },  /*  44: (3,-1) 0100101001 */
    {   490,  9 },  /*  45: (3, 0) 111101010 */
    {   296, 10 },  /*  46: (3, 1) 0100101000 */
    {   599, 11 },  /*  47: (3, 2) 01001010111 */
    { 19076, 16 },  /*  48: (3, 3) 0100101010000100 */
    { 19088, 16 },  /*  49: (3, 4) 0100101010010000 */
    { 19103, 16 },  /*  50: (3, 5) 0100101010011111 */
    { 19120, 16 },  /*  51: (3, 6) 0100101010110000 */

    { 19127, 16 },  /*  52: (4,-6) 0100101010110111 */
    { 19115, 16 },  /*  53: (4,-5) 0100101010101011 */
    { 19100, 16 },  /*  54: (4,-4) 0100101010011100 */
    { 19091, 16 },  /*  55: (4,-3) 0100101010010011 */
    { 19083, 16 },  /*  56: (4,-2) 0100101010001011 */
    { 19079, 16 },  /*  57: (4,-1) 0100101010000111 */
    { 19075, 16 },  /*  58: (4, 0) 0100101010000011 */
    { 19078, 16 },  /*  59: (4, 1) 0100101010000110 */
    { 19082, 16 },  /*  60: (4, 2) 0100101010001010 */
    { 19090, 16 },  /*  61: (4, 3) 0100101010010010 */
    { 19099, 16 },  /*  62: (4, 4) 0100101010011011 */
    { 19114, 16 },  /*  63: (4, 5) 0100101010101010 */
    { 19126, 16 },  /*  64: (4, 6) 0100101010110110 */

    { 19131, 16 },  /*  65: (5,-6) 0100101010111011 */
    { 19125, 16 },  /*  66: (5,-5) 0100101010110101 */
    { 19117, 16 },  /*  67: (5,-4) 0100101010101101 */
    { 19108, 16 },  /*  68: (5,-3) 0100101010100100 */
    { 19098, 16 },  /*  69: (5,-2) 0100101010011010 */
    { 19096, 16 },  /*  70: (5,-1) 0100101010011000 */
    { 19092, 16 },  /*  71: (5, 0) 0100101010010100 */
    { 19095, 16 },  /*  72: (5, 1) 0100101010010111 */
    { 19097, 16 },  /*  73: (5, 2) 0100101010011001 */
    { 19107, 16 },  /*  74: (5, 3) 0100101010100011 */
    { 19116, 16 },  /*  75: (5, 4) 0100101010101100 */
    { 19124, 16 },  /*  76: (5, 5) 0100101010110100 */
    { 19130, 16 },  /*  77: (5, 6) 0100101010111010 */

    { 19135, 16 },  /*  78: (6,-6) 0100101010111111 */
    { 19133, 16 },  /*  79: (6,-5) 0100101010111101 */
    { 19129, 16 },  /*  80: (6,-4) 0100101010111001 */
    { 19123, 16 },  /*  81: (6,-3) 0100101010110011 */
    { 19119, 16 },  /*  82: (6,-2) 0100101010101111 */
    { 19113, 16 },  /*  83: (6,-1) 0100101010101001 */
    { 19111, 16 },  /*  84: (6, 0) 0100101010100111 */
    { 19112, 16 },  /*  85: (6, 1) 0100101010101000 */
    { 19118, 16 },  /*  86: (6, 2) 0100101010101110 */
    { 19122, 16 },  /*  87: (6, 3) 0100101010110010 */
    { 19128, 16 },  /*  88: (6, 4) 0100101010111000 */
    { 19132, 16 },  /*  89: (6, 5) 0100101010111100 */
    { 19134, 16 },  /*  90: (6, 6) 0100101010111110 */
};

/* code_length = 3.3967 bits/tuple (1740 bits) */

Parameter Set
bliss_huffman_code_t bliss_huffman_code_4 = {
    .n_z1 = 7,
    .n_z2 = 7,
    .tuples = tuples,
    .nodes  = nodes
};