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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? test_support.cpp

?? 惠普實(shí)驗(yàn)室的經(jīng)典代碼。用于huffman編碼的快速實(shí)現(xiàn)
?? CPP
字號(hào):
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//                                                                           -
//                       *************************                           -
//                        HUFFMAN CODING EXAMPLES                            -
//                       *************************                           -
//                                                                           -
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//                                                                           -
// Implementation of random-number generators and chronometer                -
//                                                                           -
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//                                                                           -
// 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)           -
//                                                                           -
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


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

#include <time.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "test_support.h"

#ifdef CLOCKS_PER_SEC
const double ClockRate = 1.0 / CLOCKS_PER_SEC;
#else
const double ClockRate = 1.0e-6;
#endif


// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// - - Implementations - - - - - - - - - - - - - - - - - - - - - - - - - - - -

void Error(const char * s)
{
  fprintf(stderr, "\n\n -> Error: ");
  fputs(s, stderr);
  fputs("\n Execution terminated!\n", stderr);
  exit(1);
}

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

void Chronometer::start(char * s)
{
  if (s != NULL) puts(s);
  if (on)
    puts("chronometer already on!");
  else {
    on   = true;
    mark = double(clock());
  }
}

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

void Chronometer::restart(char * s)
{
  if (s != NULL) puts(s);
  time = 0.0;
  on   = true;
  mark = double(clock());
}

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

void Chronometer::stop(void)
{
  if (on) {
    on = false;
    time += clock() - mark;
  }
  else
    puts("chronometer already off!");
}

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

double Chronometer::read(void)
{
  return (on ? time + (clock() - mark) : time) * ClockRate;
}

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

void Chronometer::display(char * s)
{
  double sc = (on ? time + (clock() - mark) : time) * ClockRate;
  int hr = int(sc / 3600.0);  sc -= 3600.0 * hr;
  int mn = int(sc / 60.0);  sc -= 60.0 * mn;
  if (s != NULL) printf(" %s ", s);
  if (hr) {
    printf("%d hour", hr);
    if (hr > 1) printf("s, "); else printf(", ");
  }
  if ((hr) || (mn)) {
    printf("%d minute", mn);
    if (mn > 1) printf("s, and "); else printf(", and ");
  }
  printf("%5.2f seconds.\n", sc);
}

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

void Random_Generator::set_seed(unsigned seed)
{
  s1 = (seed ? seed & 0xFFFFFFFU : 0x147AE11U);
  s2 = s1 ^ 0xFFFFF07U;
  s3 = s1 ^ 0xF03CD2FU;
};

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

double Random_Bit_Source::set_probability_0(double p0)
{
  if ((p0 < MinProbability) || (p0 > 1.0 - MinProbability))
    Error("invalid random bit probability");

  prob_0 = p0;
  threshold = unsigned(prob_0 * double(0xFFFFFFFFU));
  ent = ((p0 - 1.0) * log(1.0 - p0) - p0 * log(p0)) / log(2.0);

  return ent;
}

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

void Random_Bit_Source::set_entropy(double entropy)
{
  if ((entropy < 0.0001) || (entropy > 1.0))
    Error("invalid random bit entropy");

  double h = entropy * log(2.0), p = 0.5 * entropy * entropy;
  for (int k = 0; k < 8; k++) {
    double lp1 = log(1.0 - p), lp2 = lp1 - log(p);
    double d = h + lp1 - p * lp2;
    if (fabs(d) < 1e-12) break;
    p += d / lp2;
  }
  set_probability_0(p);
}

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

void Random_Bit_Source::switch_probabilities(void)
{
  set_probability_0(1.0 - prob_0);
}

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

void Random_Bit_Source::shuffle_probabilities(void)
{
  if (word() > 0x80000000U) set_probability_0(1.0 - prob_0);
}

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

unsigned Random_Bit_Source::bit(void)
{
  return (word() > threshold ? 1 : 0);
}

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

Random_Data_Source::Random_Data_Source(void)
{
  symbols = 0;
  dist = 0;
  prob = 0;
}

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

Random_Data_Source::~Random_Data_Source(void)
{ 
  delete [] dist;
  delete [] prob;
}

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

void Random_Data_Source::assign_memory(unsigned dim)
{
  if (symbols == dim) return;
  symbols = dim;
  delete [] dist;
  delete [] prob;
  prob = new double[dim];
  dist = new unsigned[dim];
  if ((prob == 0) || (dist == 0)) Error("cannot assign random source buffer");
}

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

double Random_Data_Source::set_distribution(unsigned dim,
                                            const double probability[])
{
  assign_memory(dim);

  double sum = ent = 0.0;
  unsigned s = low_bound[0] = 0;
  const double DoubleToWord = 1.0 + double(0xFFFFFFFFU);

  for (unsigned n = 0; n < symbols; n++) {
    double p = probability[n];
    if (p < MinProbability) Error("invalid random source probability");
    prob[n] = p;
    dist[n] = unsigned(0.49 + DoubleToWord * sum);
    unsigned w = (dist[n] >> 24);
    while (s < w) low_bound[++s] = n - 1;
    sum += p;
    ent -= p * log(p);
  }
  while (s < 256) low_bound[++s] = symbols - 1;

  if (fabs(1.0 - sum) > 1e-4) Error("invalid random source distribution");
  return ent /= log(2.0);
}
 
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

double Random_Data_Source::set_tg(double a)
{
  double s, r = 0, e = 0, m = symbols;

  if (a > 1e-4)
    s = (1.0 - exp(-a)) / (1.0 - exp(-a * m));
  else
    s = (2.0 - a) / (m * (2.0 - a * m));

  for (int n = symbols - 1; n >= 0; n--) {

    double p = (a * n > 30.0 ? 0 : s * exp(-a * n));

    if (p < MinProbability) {
      r += MinProbability - p;
      p = MinProbability;
    }
    else
      if (r > 0)
        if (r <= p - MinProbability) {
          p -= r;
          r = 0;
        }
        else {
          r -= p - MinProbability;
          p = MinProbability;
        }
    prob[n] = p;
    e -= p * log(p);
  }

  return e / log(2.0);
}
 
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

double Random_Data_Source::set_truncated_geometric(unsigned dim,
                                                   double entropy)
{
  assign_memory(dim);

  double max_entropy = log(symbols) / log(2.0);
  double mgr_prob = (dim - 1) * MinProbability;
  double min_entropy = ((mgr_prob - 1.0) * log(1.0 - mgr_prob) -
           mgr_prob * log(MinProbability)) * 1.2 / log(2.0);

  if ((entropy <= min_entropy) || (entropy > max_entropy))
    Error("invalid data source entropy");

                                   // find distribution with desired entropy
  Zero_Finder ZF(0, 2);
  double a = ZF.set_new_result(max_entropy - entropy);

  for (unsigned itr = 0; itr < 20; itr++) {
    double ne = set_tg(a) - entropy;
    if (fabs(ne) < 1e-5) break;
    a = ZF.set_new_result(ne);
  }

  set_distribution(symbols, prob);
  if (fabs(ent - entropy) > 1e-4) Error("cannot set random source entropy");

  return ent;
}
  
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

void Random_Data_Source::shuffle_probabilities(void)
{
  for (unsigned n = symbols - 1; n; n--) {
    unsigned m = integer(n + 1);
    if (m == n) continue;
    double t = prob[m];
    prob[m] = prob[n];
    prob[n] = t;
  }
  set_distribution(symbols, prob);
}

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

unsigned Random_Data_Source::data(void)
{
  unsigned v = word(), w = v >> 24;
  unsigned u = low_bound[w], n = low_bound[w+1] + 1;
  while (n > u + 1) {
    unsigned m = (u + n) >> 1;
    if (dist[m] < v) u = m; else n = m;
  }
  return u;
}

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

Zero_Finder::Zero_Finder(double first_x, double second_x)
{
  phase = iter = 0;
  x0 = first_x;
  x1 = second_x;
}

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

double Zero_Finder::set_new_result(double y)
{
  if (++iter > 30) Error("cannot find solution");

  if (phase >= 2) {
    if (y * y0 <= 0) {
      if ((phase == 2) || (fabs(y1) < fabs(y2))) {
        x2  = x1;
        y2  = y1;
      }
      x1  = x;
      y1  = y;
    }
    else {
      if ((phase == 2) || (fabs(y0) < fabs(y2))) {
        x2  = x0;
        y2  = y0;
      }
      x0  = x;
      y0  = y;
    }
                                   // interpolation y = [(x-x0)-f]/[g(x-x0)+h]
    if (fabs(y0) < fabs(y1)) {
      double r = y0 / y2, c = x2 - x0;
      double s = y0 / y1, d = x1 - x0;
      x = x0 - (c * d * (s - r)) / (c * (1.0 - s) - d * (1.0 - r));
    }
    else {
      double r = y1 / y2, c = x2 - x1;
      double s = y1 / y0, d = x0 - x1;
      x = x1 - (c * d * ( s - r)) / (c * (1.0 - s) - d * (1.0 - r));
    }
    phase = 3;
    return x;
  }

  if (iter > 8) Error("too many initial tests");

  if (phase == 1) {
    if (y * y0 <= 0) {                  // different signs: bracketed interval
      y1 = y;
      phase = 2;
      if (fabs(y0) < fabs(y1)) {                 // regula falsi interpolation
        double s = y0 / y1;
        x = x0 - ((x1 - x0) * s) / (1.0 - s);
      }
      else {
        double s = y1 / y0;
        x = x1 - ((x0 - x1) * s) / (1.0 - s);
      }
    }
    else {                              // same sign: increase search interval
      x += x1 - x0;
      x0 = x1;
      y0 = y;
      x1 = x;
    }
    return x;
  }

  y0 = y;
  phase = 1;

  return x = x1;
}

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

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产91清纯白嫩初高中在线观看| 国产精品美女一区二区在线观看| 风间由美一区二区三区在线观看 | 99热精品一区二区| 久久国产福利国产秒拍| 亚洲一区二区三区视频在线| 亚洲少妇屁股交4| 亚洲人精品一区| 亚洲色图.com| 一二三区精品视频| 亚洲另类在线一区| 亚洲成a人v欧美综合天堂下载| 一区二区三区在线观看国产| 亚洲综合久久久久| 亚洲第四色夜色| 日本欧美在线观看| 国产一区二区在线电影| 国产精品一区久久久久| 国产精品一区二区视频| 成人做爰69片免费看网站| 91色九色蝌蚪| 91精品国产综合久久福利软件| 精品日本一线二线三线不卡| 久久午夜免费电影| 亚洲女子a中天字幕| 日本不卡在线视频| 国产综合色在线视频区| 懂色av一区二区三区免费看| 99re成人在线| 欧美一级午夜免费电影| 欧美国产日韩一二三区| 午夜成人免费视频| 国产一区二区三区免费看| 99视频精品在线| 欧美一区二区在线免费播放| 欧美激情一区二区三区全黄| 一区二区三区不卡在线观看| 久久成人综合网| 99re热这里只有精品视频| 欧美日韩国产一区二区三区地区| 欧美电视剧在线观看完整版| 综合电影一区二区三区 | 91免费看视频| 欧美一级xxx| 亚洲欧美日韩久久| 国产揄拍国内精品对白| 欧美影视一区二区三区| 久久奇米777| 午夜电影网亚洲视频| 99久久久免费精品国产一区二区| 91精品一区二区三区久久久久久 | 91精品国产欧美日韩| 久久综合久久久久88| 一区二区三区免费| 国产成人免费高清| 欧美一区中文字幕| 一区二区三区在线高清| 国产呦萝稀缺另类资源| 欧美一区二区三区四区久久| 亚洲人吸女人奶水| 成人三级在线视频| 久久这里只有精品6| 日韩成人一级片| 欧美日韩国产在线观看| 亚洲伦理在线免费看| 成人性视频网站| 久久久精品中文字幕麻豆发布| 婷婷开心激情综合| 欧美三级在线播放| 亚洲精品免费在线| 91在线高清观看| 国产精品欧美综合在线| 国产风韵犹存在线视精品| 日韩三级视频在线看| 日产国产高清一区二区三区| 91老师国产黑色丝袜在线| 中文字幕国产一区| 成人午夜大片免费观看| 国产精品午夜免费| 91在线观看下载| 亚洲色图.com| 欧美亚洲精品一区| 亚洲综合在线免费观看| 在线视频一区二区免费| 日韩国产精品久久| 欧美精品乱人伦久久久久久| 日本免费新一区视频| 日韩精品一区二区三区视频| 奇米在线7777在线精品| 91精品午夜视频| 韩日精品视频一区| 久久久精品免费观看| 国产成人一区二区精品非洲| 精品国产一区二区三区不卡| 精品一区二区影视| 国产精品污网站| 色婷婷综合久久久中文字幕| 亚洲精品水蜜桃| 欧美日免费三级在线| 美女国产一区二区三区| 久久亚洲二区三区| 色猫猫国产区一区二在线视频| 一区二区三区日韩精品| 日韩视频一区二区三区在线播放| 国产一区在线精品| 亚洲蜜臀av乱码久久精品| 91精品午夜视频| 国产毛片一区二区| 亚洲一区日韩精品中文字幕| 日韩一区二区三区在线观看| 成人午夜在线播放| 亚洲资源在线观看| 久久你懂得1024| 91黄视频在线| 国产精品18久久久久久久网站| 亚洲视频免费在线观看| 日韩免费一区二区| 色婷婷国产精品| 国产永久精品大片wwwapp | 欧美欧美欧美欧美| 国产尤物一区二区在线| 亚洲色图.com| 国产人成亚洲第一网站在线播放 | 成人三级在线视频| 亚洲成人免费电影| 国产精品美女久久久久久| 7777精品伊人久久久大香线蕉超级流畅 | 成人免费va视频| 麻豆精品在线播放| 午夜日韩在线观看| 国产精品精品国产色婷婷| 日韩视频免费观看高清完整版 | 久久理论电影网| 99久久久精品免费观看国产蜜| 麻豆成人91精品二区三区| 亚洲精品乱码久久久久久久久| 久久久久国产免费免费| 欧美电影免费观看高清完整版| 欧美性猛交一区二区三区精品| av成人免费在线观看| 国产成人免费av在线| 狠狠色狠狠色综合日日91app| 日韩成人免费看| 亚洲电影第三页| 一区二区三区四区视频精品免费| 国产精品午夜电影| 国产精品婷婷午夜在线观看| 精品国产1区二区| 欧美mv日韩mv国产网站| 欧美精品在线观看播放| 欧美日韩精品一区二区三区| 欧美影片第一页| 精品视频1区2区| 欧美男人的天堂一二区| 欧美中文字幕一二三区视频| 欧美亚洲动漫制服丝袜| 欧美视频在线观看一区| 欧美在线色视频| 欧美日本视频在线| 欧美一区二区三区在线观看| 7777精品伊人久久久大香线蕉完整版| 欧美日本乱大交xxxxx| 69成人精品免费视频| 欧美大肚乱孕交hd孕妇| 日韩一级片网站| 久久亚洲一级片| 国产精品卡一卡二| 亚洲精品一二三| 午夜精品123| 国产在线精品不卡| 成人激情文学综合网| 一本一道久久a久久精品综合蜜臀| 色综合中文字幕| 欧美日韩的一区二区| 欧美一区二区二区| 久久九九国产精品| 亚洲品质自拍视频| 天天综合色天天综合色h| 毛片av中文字幕一区二区| 国产成人亚洲综合a∨婷婷| 欧美视频中文字幕| 欧美成人精品高清在线播放| 久久精品在线免费观看| 亚洲人成小说网站色在线| 午夜精品成人在线视频| 国产麻豆成人精品| 91精品办公室少妇高潮对白| 日韩欧美不卡一区| 国产精品国产三级国产专播品爱网 | 免费精品视频在线| 国产69精品久久777的优势| 欧美日韩精品系列| 国产精品女人毛片| 午夜精品福利在线| 成人动漫中文字幕| 日韩一级成人av| 亚洲天堂网中文字| 国产精品中文欧美| 欧美群妇大交群中文字幕| 欧美激情一区二区三区四区|