如果在桌面中有一个ハフマンcoding.txt文件、其内容为:
コンピュータサイエンス及び情報理論、ハフマン符号で一般に可逆データ圧縮のために使用される最適なプリフィックスコードの特定のタイプです。そのようなコードを見つけたり使用したりするプロセスは、ハフマンコーディングによって行われます。ハフマンコーディングは、David A. HuffmanがSc.Dであったときに開発したアルゴリズムです。MITの学生であり、1952年の論文「A Method of the Construction of Minimum-Redundancy Codes」に掲載されています。
ハフマンのアルゴリズムからの出力は、ソースシンボル(ファイル内の文字など)をエンコードするための可変長コードテーブルと見なすことができます。アルゴリズムは、ソースシンボルの可能な値ごとに推定確率または発生頻度(重み)からこのテーブルを導出します。他のエントロピー符号化方法と同様に、一般的なシンボルは一般的に、一般的でないシンボルよりも少ないビットを使用して表されます。ハフマンの方法は効率的に実装でき、これらの重みが並べ替えられている場合、入力重みの数に線形な時間でコードを見つけます。ただし、シンボルを個別にエンコードするメソッド間で最適ですが、ハフマンコーディングはすべての圧縮方法で常に最適であるとは限りません。より良い圧縮率が必要な場合は、算術コーディングまたは非対称数値システムに置き換えられます。
C言語で.txtファイル内の文字列を読み取り、出力し、各文字の確率を計算する方法。
#include <stdio.h>
#include<string.h>
int main()
{
FILE*p;
char ch;
char str[10005];//用来存储txt文件中的字符串
int i,num[256]={
0};
if((p=fopen("huffman-coding.txt","r"))==NULL) //以只读的方式打开test。
{
printf("ERROR");
}
int k=0;
for(;ch!='\n';)
{
ch=fgetc(p); //ch得到p所指文件中的每一个字符
str[k]=ch;
k++;
//putchar(ch); //将得到的字符输出到屏幕
}
puts(str);
for(i=0;i<strlen(str);i++)
{
if((str[i]>='A'&&str[i]<='Z')||(str[i]>='a'&&str[i]<='z'))
num[(int)str[i]]++;
else
continue;
}
for(i=0;i<256;i++)
if(num[i]!=0)
printf("字符%c出现%d次\n",(char)i,num[i]);
fclose(p); //关闭文件
}
結果は次のとおりです。