• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-65  評論-6  文章-0  trackbacks-0
             1 /*
             2 Author:    Leo.W
             3 Descriptipn:對輸入字符串【長度不知,僅含26個大寫英文字母和一個空格表示符‘_’,共27種字符】,
             4             統計每種字符出現頻度,按哈夫曼編碼原理給出最小的編碼位數之和,得出與8位固定字長
             5             編碼的比率【保留一位小數】。
             6 How to Do:    哈夫曼編碼原理的理解及優先隊列的運用<priority_queue>,引用頭文件<queue>
             7   */
             8 #include <iostream>
             9 #include <string.h>
            10 #include <queue>
            11 #include <algorithm>
            12 using namespace std;
            13 #define lenth 300
            14 int main(){
            15     //freopen("in.txt","r",stdin);
            16     char str[1000];//輸入字符串
            17     while(scanf("%s",str),strcmp(str,"END")!=0){
            18         int lenStr=strlen(str);
            19         int worse=lenStr<<3;//固定字長編碼所需的總位數
            20         char ch[lenth];int lenCh=0;//輸入字符的種類
            21         int i,j,num[lenth];//對應每種字符的數目,無需關注具體對應的是哪個字符,只需記錄數目即可。【為什么呢?】
            22         memset(num,0,lenth);//字符數目數組初始置零
            23         //對字符串逐個統計出現次數
            24         for(i=0;i<lenStr;i++){
            25             for(j=0;j<lenCh;j++){
            26                 if(str[i]==ch[j]){
            27                     num[j]++;break;
            28                 }
            29             }
            30             if(j==lenCh){
            31                 ch[j]=str[i];num[j]++;lenCh++;
            32             }
            33         }
            34         sort(num,num+lenCh);//對得到的字符數目【大于零,即至少出現過一次,才存在統計必要】序列進行升序快排
            35         priority_queue<int,vector<int>,greater<int> >    que;//對于int整型數據,進行自小至大的優先級排列
            36         for(i=0;i<lenCh;i++)    que.push(num[i]);
            37         int sum=0;
            38         while(true){
            39             int aa=que.top();    que.pop();
            40             if(que.empty())    {
            41                 if(lenCh==1)    sum=aa;
            42                 break;
            43             }
            44             int bb=que.top();    que.pop();
            45             sum+=aa+bb;        que.push(aa+bb);
            46         }
            47         printf("%d %d %.1lf\n",worse,sum,worse*1.0/sum);
            48     }
            49     return 0;
            50 }
            posted on 2012-03-02 14:48 Leo.W 閱讀(856) 評論(0)  編輯 收藏 引用
            久久亚洲国产成人影院网站| 老色鬼久久亚洲AV综合| 91精品国产高清久久久久久91| 久久青草国产手机看片福利盒子| 国产999精品久久久久久| 漂亮人妻被中出中文字幕久久 | 国内精品久久久久久99蜜桃| 91精品国产高清久久久久久91| 久久人人爽人人爽人人片AV高清| 国产一级持黄大片99久久| 狠狠色丁香婷婷久久综合五月| 国产精品久久久久久一区二区三区| 国产99久久久国产精品~~牛| 亚洲va久久久噜噜噜久久男同 | 秋霞久久国产精品电影院| 亚洲色大成网站www久久九| 久久99精品国产麻豆婷婷| 久久精品无码午夜福利理论片| 热久久最新网站获取| 国产激情久久久久影院| 精品综合久久久久久888蜜芽| 久久久这里有精品| 欧美久久一级内射wwwwww.| 久久综合狠狠综合久久激情 | 久久综合国产乱子伦精品免费| 漂亮人妻被中出中文字幕久久| 久久久受www免费人成| 国产免费福利体检区久久| 亚洲国产精品一区二区久久| 久久精品人人槡人妻人人玩AV| 亚洲国产精品久久电影欧美| 尹人香蕉久久99天天拍| 亚洲&#228;v永久无码精品天堂久久| 日本久久久久久中文字幕| 久久九九青青国产精品| 久久久久四虎国产精品| 99久久综合狠狠综合久久| 国产精品成人久久久久三级午夜电影 | 久久久无码精品亚洲日韩蜜臀浪潮| 久久99热这里只有精品国产| 伊人久久大香线焦AV综合影院 |