亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? codec_test.cpp

?? 惠普實驗室的經典代碼。用于huffman編碼的快速實現
?? CPP
字號:
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//                                                                           -
//                       *************************                           -
//                        HUFFMAN CODING EXAMPLES                            -
//                       *************************                           -
//                                                                           -
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//                                                                           -
// Functions to test and benchmark the Huffman coding implementations        -
//                                                                           -
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//                                                                           -
// Version 1.00  -  January 24, 2005                                         -
//                                                                           -
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//                                                                           -
//                                  WARNING                                  -
//                                 =========                                 -
//                                                                           -
// The only purpose of this program is to demonstrate the basic principles   -
// of Huffman codes. It is provided as is, without any express or implied    -
// warranty, without even the warranty of fitness for any particular         -
// purpose, or that the implementations are correct.                         -
//                                                                           -
// Permission to copy and redistribute this code is hereby granted, provided -
// that this warning and copyright notices are not removed or altered.       -
//                                                                           -
// Copyright (c) 2005 by Amir Said (said@ieee.org) &                         -
//                       William A. Pearlman (pearlw@ecse.rpi.edu)           -
//                                                                           -
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//                                                                           -
// Analysis of coding complexity done with a similar program is available at -
//                                                                           -
// A. Said, Comparative Analysis of Arithmetic Coding Comput. Complexity     -
// HP Labs report HPL-2004-75  -  http://www.hpl.hp.com/techreports/         -
//                                                                           -
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


// - - Inclusion - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

#include <math.h>
#include <stdlib.h>

#include "test_support.h"
#include "binary_codec.h"


// - - Constants - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

const unsigned SimulTests = 1000000;


// - - Definitions - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

struct Test_Result
{
  unsigned alphabet_symbols;
  double   encoder_time, decoder_time;
  double   entropy, bits_used, test_symbols;
};


// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// - - Implementations for testing encoder/decoder - - - - - - - - - - - - - -

unsigned Encode_Data_Buffer(unsigned short data_buffer[],
                            Static_Huffman_Code & model,
                            Binary_Codec & encoder)
{
  encoder.start_encoder();
  for (unsigned k = 0; k < SimulTests; k++)
    encoder.encode(unsigned(data_buffer[k]), model);
  return 8 * encoder.stop_encoder();
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

void Decode_Data_Buffer(unsigned short data_buffer[],
                        Static_Huffman_Code & model,
                        Binary_Codec & decoder)
{
  decoder.start_decoder();
  for (unsigned k = 0; k < SimulTests; k++)
    data_buffer[k] = unsigned short(decoder.decode(model));
  decoder.stop_decoder();
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

unsigned Encode_Data_Buffer(unsigned short data_buffer[],
                            Adaptive_Huffman_Code & model,
                            Binary_Codec & encoder)
{
  encoder.start_encoder();
  for (unsigned k = 0; k < SimulTests; k++)
    encoder.encode(unsigned(data_buffer[k]), model);
  return 8 * encoder.stop_encoder();
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

void Decode_Data_Buffer(unsigned short data_buffer[],
                        Adaptive_Huffman_Code & model,
                        Binary_Codec & decoder)
{
  decoder.start_decoder();
  for (unsigned k = 0; k < SimulTests; k++)
    data_buffer[k] = unsigned short(decoder.decode(model));
  decoder.stop_decoder();
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  
void Fill_Bit_Buffer(Random_Bit_Source & src,
                     unsigned char bit_buffer[])
{
  src.shuffle_probabilities();
  for (unsigned k = 0; k < SimulTests; k++)
    bit_buffer[k] = unsigned char(src.bit());
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  
void Fill_Data_Buffer(Random_Data_Source & src,
                      unsigned short data_buffer[])
{
  src.shuffle_probabilities();
  for (unsigned k = 0; k < SimulTests; k++)
    data_buffer[k] = unsigned short(src.data());
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

void Display_Results(bool first,
                     bool adaptive,
                     Test_Result & pr,
                     double source_time)
{
  if (adaptive)
    puts(" Test with adaptive Huffman codec\n");
  else {
    if (first)
      puts("\n==============================================================="
        "==========");
    puts(" Test with static Huffman codec\n");
  }

  printf(" Random  data generated in %5.2f seconds\n", source_time);
  printf(" Encoder test completed in %5.2f seconds\n", pr.encoder_time);
  printf(" Decoder test completed in %5.2f seconds\n", pr.decoder_time);

  printf("\n Used %g bytes for coding %g symbols\n",
    0.125 * pr.bits_used, pr.test_symbols);
    
  printf(" Data source entropy = %8.5f bits/symbol [%d symbols]\n",
    pr.entropy, pr.alphabet_symbols);

  double bit_rate = pr.bits_used / pr.test_symbols;
  printf(" Compression rate    = %8.5f bits/symbol (%9.4f %% redundancy)\n\n",
    bit_rate, 100.0 * (bit_rate - pr.entropy) / pr.entropy);

  printf(" Encoding time  = %8.3f ns/symbol  = %8.3f ns/bit\n",
    1e9 * pr.encoder_time / pr.test_symbols,
    1e9 * pr.encoder_time / pr.bits_used);

  printf(" Decoding time  = %8.3f ns/symbol  = %8.3f ns/bit\n",
    1e9 * pr.decoder_time / pr.test_symbols,
    1e9 * pr.decoder_time / pr.bits_used);

  printf(" Encoding speed = %8.3f Msymbols/s = %8.3f Mbits/s\n",
    1e-6 * pr.test_symbols / pr.encoder_time,
    1e-6 * pr.bits_used / pr.encoder_time);

  printf(" Decoding speed = %8.3f Msymbols/s = %8.3f Mbits/s\n",
    1e-6 * pr.test_symbols / pr.decoder_time,
    1e-6 * pr.bits_used / pr.decoder_time);

  puts("====================================================================="
    "====");
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

void General_Benchmark(int data_symbols,
                       int num_cycles)
{
                                                  // set simulation parameters
  double entropy, entropy_increment;
  if (data_symbols <= 8) {
    entropy = 0.2;
    entropy_increment = 0.20;
  }
  else
    if (data_symbols <= 32) {
      entropy = 0.5;
      entropy_increment = 0.25;
    }
    else {
      entropy = 1.0;
      entropy_increment = 0.50;
    }

  int num_simulations = 1 + int((log(data_symbols) / log(2.0) - entropy) /
    entropy_increment);

                                                                  // variables
  Test_Result           result;
  Random_Data_Source    src;
  Binary_Codec          codec(SimulTests << 1);
  Static_Huffman_Code   static_model;
  Adaptive_Huffman_Code adaptive_model(data_symbols);
  Chronometer           encoder_time, decoder_time, source_time;

                                         // assign memory for random test data
  unsigned code_bits;
  unsigned short * source_data  = new unsigned short[2*SimulTests];
  unsigned short * decoded_data = source_data + SimulTests;
  if (source_data == 0) Error("Cannot assign memory for random data buffer");

  adaptive_model.set_alphabet(data_symbols);

  for (int simul = 0; simul < num_simulations; simul++) {

    for (int pass = 0; pass <= 1; pass++) {

      src.set_truncated_geometric(data_symbols, entropy);
      src.set_seed(8315739 + 1031 * simul + 11 * data_symbols);

      result.alphabet_symbols = data_symbols;
      result.entropy          = src.entropy();
      result.test_symbols     = 0;
      result.bits_used        = 0;

      source_time.reset();                           // reset all chronometers
      encoder_time.reset();
      decoder_time.reset();

      for (int cycle = 0; cycle < num_cycles; cycle++) {

        source_time.start();
        Fill_Data_Buffer(src, source_data);
        source_time.stop();

        if (pass == 0) {
          static_model.set_distribution(data_symbols, src.probability());
          encoder_time.start();
          code_bits = Encode_Data_Buffer(source_data, static_model, codec);
          encoder_time.stop();

          decoder_time.start();
          Decode_Data_Buffer(decoded_data, static_model, codec);
          decoder_time.stop();
        }
        else {
          adaptive_model.reset();
          encoder_time.start();
          code_bits = Encode_Data_Buffer(source_data, adaptive_model, codec);
          encoder_time.stop();

          adaptive_model.reset();
          decoder_time.start();
          Decode_Data_Buffer(decoded_data, adaptive_model, codec);
          decoder_time.stop();
        }

        result.test_symbols += SimulTests;
        result.bits_used    += code_bits;

                                                  // check for decoding errors
        for (int k = 0; k < SimulTests; k++) 
          if (source_data[k] != decoded_data[k]) Error("incorrect decoding");
      }

      result.encoder_time = encoder_time.read();
      result.decoder_time = decoder_time.read();
      Display_Results(simul == 0, pass != 0, result, source_time.read());
    }
    entropy += entropy_increment;
  }

  delete [] source_data;
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// - - Main function - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

int main(int numb_arg, char * arg[])
{
                            // set number of tests from command-line parameter 
  if ((numb_arg != 2) && ((numb_arg != 3))) {
    puts(" Parameters: alphabet_symbols [test_cycles=10]");
    return 0;
  }

  int ns = atoi(arg[1]), tc = (numb_arg < 3 ? 10 : atoi(arg[2]));
  if ((ns < 3) || (ns > 500)) Error("invalid number of data symbols");
  if ((tc < 1) || (tc > 999)) Error("invalid number of simulations");

  General_Benchmark(ns, tc);

  return 0;
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
aaa国产一区| 日本三级亚洲精品| 91丨porny丨蝌蚪视频| 久久久久久影视| 粉嫩一区二区三区在线看| 欧美国产激情一区二区三区蜜月| 国产精品2024| 亚洲视频 欧洲视频| 欧美精品 国产精品| 美女视频网站久久| 亚洲国产精品t66y| 欧美丝袜第三区| 韩国精品免费视频| 中文字幕一区二区三区蜜月| 一本大道久久a久久精二百| 午夜精品成人在线视频| 精品不卡在线视频| 国产成人超碰人人澡人人澡| 中文字幕免费不卡在线| 成人网在线免费视频| 亚洲丝袜美腿综合| 欧美熟乱第一页| 亚洲欧美一区二区三区孕妇| 激情欧美日韩一区二区| 亚洲精品视频一区| 欧美二区乱c少妇| 久久精品国产久精国产爱| 久久噜噜亚洲综合| 成人开心网精品视频| 一区二区三区自拍| 欧美一区二区三区在线电影| 国内久久婷婷综合| 亚洲男同性视频| 欧美三级一区二区| 久久成人羞羞网站| 中文字幕制服丝袜成人av | 亚洲成av人片观看| 日韩欧美成人午夜| 成人av一区二区三区| 亚洲韩国一区二区三区| 精品国产免费久久| 99re热这里只有精品免费视频| 亚洲一区二区三区视频在线| 欧美电视剧在线看免费| 91麻豆蜜桃一区二区三区| 亚洲444eee在线观看| 亚洲精品成人悠悠色影视| 欧美久久久久久久久久| 国产成人日日夜夜| 亚洲一级二级三级| 国产日韩欧美制服另类| 91福利小视频| 国产成人精品午夜视频免费 | 91精品国产入口| 国产在线精品不卡| 亚洲午夜久久久久久久久久久 | 久久久久国色av免费看影院| 91亚洲精品乱码久久久久久蜜桃| 日本中文字幕不卡| 国产精品区一区二区三| 制服丝袜亚洲精品中文字幕| 成人黄色在线网站| 美脚の诱脚舐め脚责91| 综合婷婷亚洲小说| 久久久久久黄色| 欧美精品一卡二卡| 一本色道久久综合亚洲aⅴ蜜桃 | 亚洲国产日日夜夜| 久久综合久久综合久久综合| 欧美色国产精品| 99视频超级精品| 国产成人av资源| 狠狠v欧美v日韩v亚洲ⅴ| 日韩影视精彩在线| 亚洲人成在线播放网站岛国| 久久综合九色综合97_久久久| 欧美精品色一区二区三区| 91玉足脚交白嫩脚丫在线播放| 极品少妇xxxx精品少妇| 丝袜亚洲另类欧美| 亚洲精品视频在线观看网站| 亚洲欧洲一区二区在线播放| 国产午夜精品久久久久久免费视| 91精品黄色片免费大全| 欧美人xxxx| 欧美日韩一区二区在线观看视频 | 奇米综合一区二区三区精品视频| 亚洲精品国产精华液| 国产精品美女www爽爽爽| 久久久精品国产99久久精品芒果| 日韩欧美亚洲国产精品字幕久久久 | 欧美优质美女网站| 一本大道久久a久久精二百 | 国产亚洲短视频| 日韩欧美国产午夜精品| 欧美精三区欧美精三区| 欧美日本一道本| 欧美色图在线观看| 欧美午夜精品久久久久久超碰| 国产精品麻豆网站| 国产精品视频麻豆| 中文字幕第一页久久| 中文字幕精品一区二区精品绿巨人| 精品美女一区二区| 欧美精品一区二区在线观看| 久久久综合视频| 亚洲国产精品成人综合色在线婷婷 | 日韩制服丝袜先锋影音| 蜜桃免费网站一区二区三区| 美国三级日本三级久久99 | 中文av一区二区| 18成人在线视频| 一区二区三区四区视频精品免费| 亚洲第一电影网| 亚洲mv在线观看| 午夜精品久久久久久久 | 亚洲一区在线观看视频| 夜夜嗨av一区二区三区四季av| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 久久久国产一区二区三区四区小说| 国产丝袜美腿一区二区三区| 国产精品天干天干在观线| 亚洲主播在线观看| 久久99国产精品尤物| 成人手机在线视频| 欧美色区777第一页| 91麻豆精品国产综合久久久久久| 久久综合九色综合97婷婷| 一区二区三区 在线观看视频| 奇米一区二区三区av| 成人午夜激情影院| 欧美亚洲日本国产| 久久久激情视频| 一区二区三区波多野结衣在线观看 | 日韩一级免费一区| 国产精品久久久久aaaa| 午夜婷婷国产麻豆精品| 国产伦精品一区二区三区免费迷 | 韩国欧美国产1区| 99精品一区二区三区| 日韩欧美精品在线视频| 中文字幕制服丝袜成人av| 日本美女一区二区三区| 99r国产精品| 欧美videofree性高清杂交| 中文字幕制服丝袜成人av| 久久精品久久精品| 91丝袜呻吟高潮美腿白嫩在线观看| 色婷婷精品大视频在线蜜桃视频| 欧美一级一级性生活免费录像| 中文字幕不卡三区| 奇米影视7777精品一区二区| 91高清视频免费看| 国产精品网站在线观看| 麻豆国产精品官网| 欧美日韩在线三区| 国产精品嫩草影院av蜜臀| 黄色日韩三级电影| 在线不卡中文字幕播放| 亚洲免费在线视频| 国产v综合v亚洲欧| 日韩一区欧美一区| 捆绑变态av一区二区三区| 91精品国产免费久久综合| 国产调教视频一区| 玖玖九九国产精品| 91麻豆精品国产91| 亚洲chinese男男1069| 色综合久久88色综合天天 | 91美女精品福利| 国产日韩三级在线| 国产一区久久久| 日韩欧美色综合网站| 日韩成人一区二区三区在线观看| 在线观看精品一区| 一色屋精品亚洲香蕉网站| 成人在线视频一区| 国产精品久久久久久久久免费樱桃| 久久国产尿小便嘘嘘尿| 欧美大黄免费观看| 免费成人美女在线观看.| 8x8x8国产精品| 亚洲成人高清在线| 欧美日韩国产精品自在自线| 一级中文字幕一区二区| 91久久香蕉国产日韩欧美9色| 日韩理论片在线| www.久久精品| 日韩美女视频19| 在线亚洲欧美专区二区| 亚洲精品五月天| 欧美视频完全免费看| 一区二区三区不卡在线观看| 欧美日韩精品一区二区| 日韩电影一区二区三区| 日韩一区二区三区在线观看| 久草在线在线精品观看| 久久久精品国产免费观看同学| 福利一区二区在线| 国产欧美精品一区二区色综合|