#include <stdio.h>
#include <stdlib.h>
#include<math.h>
#include<string.h>
int main()
{
FILE *fptr, *encode, *fff, *decode, *fxxx, *ffff, *encoderead, *encode2;
char FileName[100];
int z = 0, number, number2 = 5, a, b = 0, c = 0, d = 0, zz = 8, i = 0, j = 0, k = 0, p = 0;
double entropy = 0;
char out[5][5] = { 0 }, other[5];
fptr
= fopen("111.txt", "r"); //輸入檔案 fff
= fopen("111.txt", "r"); //輸入檔案 encode
= fopen("encode.txt", "w");// 讀入檔案
decode
= fopen("decode.txt", "w");// 讀入輸入檔案
float zzz[5] = { 0 }, pro[5] = { 0 }, fx[5] = { 0 }, ffx[5] = { 0 }, lenn = 0, len[4] = { 0 };
// 出現1-4數字個數
while (z < 8)
{
zzz[number]++;
z++;
}
for (a = 1; a <= 4; a++){
entropy += (zzz[a] / zz)*log2(zz / zzz[a]);//entropy
}
//1-4分別出現的機率
for (a = 1, b = 1; a, b <= 4; a++, b++){
pro[b] += (zzz[a] / zz);
}
//累加值F(X)
for (b = 1, c = 1; c <= 4, b <= 4; b++, c++){
fx[c] += fx[c - 1] + pro[b];
}
//出現FX(bar)
for (b = 1, c = 0, d = 1; b <= 4, c <= 3, d <= 4; b++, c++, d++){
ffx[d] = 0.5*pro[b] + fx[c];
printf("FFX=%.5f+%.5f", pro
[b
], fx
[c
]);
}
//codeword 長度
for (i = 0; i <= 3; i++){
len
[i
] = ceil(log2
(1 / pro
[i
+ 1]) + 1); }
//Codeword
for (d = 1; d <= 4; d++){
for (i = 0; i < len[d - 1]; i++){
ffx[d] = ffx[d] * 2;
if (ffx[d] >= 1){
out[d][i] = '1';
ffx[d] = ffx[d] - 1;
}
else{
out[d][i] = '0';
}
}
}
//average length
for (d = 1; d <= 4; d++)
{
lenn += len[d - 1] * pro[d];
}
while (j < zz)
{
fprintf(encode
, "%s", out
[number
]); j++;
}
int num,oo,pp,num2;
int ok[4][4] = {0};
//解碼
encode
= fopen("encode.txt", "r");// encode2
= fopen("encode.txt", "r");// while (k < (float)zz*2.75){
k++;
}
//fprintf(decode,"%d\n",number2)
printf("entropy=%f\n", entropy
);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGU8bWF0aC5oPgojaW5jbHVkZTxzdHJpbmcuaD4KCgppbnQgbWFpbigpCnsKCUZJTEUgKmZwdHIsICplbmNvZGUsICpmZmYsICpkZWNvZGUsICpmeHh4LCAqZmZmZiwgKmVuY29kZXJlYWQsICplbmNvZGUyOwoJY2hhciBGaWxlTmFtZVsxMDBdOwoJaW50IHogPSAwLCBudW1iZXIsIG51bWJlcjIgPSA1LCBhLCBiID0gMCwgYyA9IDAsIGQgPSAwLCB6eiA9IDgsIGkgPSAwLCBqID0gMCwgayA9IDAsIHAgPSAwOwoJZG91YmxlIGVudHJvcHkgPSAwOwoJY2hhciBvdXRbNV1bNV0gPSB7IDAgfSwgb3RoZXJbNV07CglmcHRyID0gZm9wZW4oIjExMS50eHQiLCAiciIpOyAvL+i8uOWFpeaqlOahiAoJZmZmID0gZm9wZW4oIjExMS50eHQiLCAiciIpOyAvL+i8uOWFpeaqlOahiAoJZW5jb2RlID0gZm9wZW4oImVuY29kZS50eHQiLCAidyIpOy8vIOiugOWFpeaqlOahiAoKCWRlY29kZSA9IGZvcGVuKCJkZWNvZGUudHh0IiwgInciKTsvLyDoroDlhaXovLjlhaXmqpTmoYgKCglmbG9hdCB6enpbNV0gPSB7IDAgfSwgcHJvWzVdID0geyAwIH0sIGZ4WzVdID0geyAwIH0sIGZmeFs1XSA9IHsgMCB9LCBsZW5uID0gMCwgbGVuWzRdID0geyAwIH07CgoJLy8g5Ye654++MS005pW45a2X5YCL5pW4Cgl3aGlsZSAoeiA8IDgpCgl7CgkJZnNjYW5mKGZwdHIsICIlZCIsICZudW1iZXIpOwoJCXp6eltudW1iZXJdKys7CgkJcHJpbnRmKCIlZCIsIG51bWJlcik7CgkJeisrOwoJfQoJZm9yIChhID0gMTsgYSA8PSA0OyBhKyspewoJCXByaW50ZigiXG4lLjBmIiwgenp6W2FdKTsKCQllbnRyb3B5ICs9ICh6enpbYV0gLyB6eikqbG9nMih6eiAvIHp6elthXSk7Ly9lbnRyb3B5Cgl9CglwcmludGYoIlxuIik7CgkvLzEtNOWIhuWIpeWHuuePvueahOapn+eOhwoJZm9yIChhID0gMSwgYiA9IDE7IGEsIGIgPD0gNDsgYSsrLCBiKyspewoKCQlwcm9bYl0gKz0gKHp6elthXSAvIHp6KTsKCgkJcHJpbnRmKCJwcm89JS41ZlxuIiwgcHJvW2JdKTsKCX0KCXByaW50ZigiXG4iKTsKCS8v57Sv5Yqg5YC8RihYKQoJZm9yIChiID0gMSwgYyA9IDE7IGMgPD0gNCwgYiA8PSA0OyBiKyssIGMrKyl7CgoJCWZ4W2NdICs9IGZ4W2MgLSAxXSArIHByb1tiXTsKCgkJcHJpbnRmKCJGKFgpPSUuNWZcbiIsIGZ4W2NdKTsKCX0KCXByaW50ZigiXG4iKTsKCgkvL+WHuuePvkZYKGJhcikKCWZvciAoYiA9IDEsIGMgPSAwLCBkID0gMTsgYiA8PSA0LCBjIDw9IDMsIGQgPD0gNDsgYisrLCBjKyssIGQrKyl7CgoJCWZmeFtkXSA9IDAuNSpwcm9bYl0gKyBmeFtjXTsKCQlwcmludGYoIkZGWD0lLjVmKyUuNWYiLCBwcm9bYl0sIGZ4W2NdKTsKCQlwcmludGYoIj0lLjVmXG4iLCBmZnhbZF0pOwoKCX0KCS8vY29kZXdvcmQg6ZW35bqmCglmb3IgKGkgPSAwOyBpIDw9IDM7IGkrKyl7CgkJbGVuW2ldID0gY2VpbChsb2cyKDEgLyBwcm9baSArIDFdKSArIDEpOwoJCXByaW50ZigiJWZcbiIsIGxlbltpXSk7Cgl9CgkvL0NvZGV3b3JkCglmb3IgKGQgPSAxOyBkIDw9IDQ7IGQrKyl7CgkJZm9yIChpID0gMDsgaSA8IGxlbltkIC0gMV07IGkrKyl7CgkJCWZmeFtkXSA9IGZmeFtkXSAqIDI7CgkJCWlmIChmZnhbZF0gPj0gMSl7CgkJCQlvdXRbZF1baV0gPSAnMSc7CgkJCQlmZnhbZF0gPSBmZnhbZF0gLSAxOwoJCQl9CgkJCWVsc2V7CgkJCQlvdXRbZF1baV0gPSAnMCc7CgkJCX0KCQl9CgkJcHJpbnRmKCIlc1xuIiwgb3V0W2RdKTsKCQlwcmludGYoIlxuIik7Cgl9CgkvL2F2ZXJhZ2UgbGVuZ3RoCglmb3IgKGQgPSAxOyBkIDw9IDQ7IGQrKykKCXsKCQlsZW5uICs9IGxlbltkIC0gMV0gKiBwcm9bZF07Cgl9Cgl3aGlsZSAoaiA8IHp6KQoJewoJCWZzY2FuZihmZmYsICIlZCIsICZudW1iZXIpOwoJCWZwcmludGYoZW5jb2RlLCAiJXMiLCBvdXRbbnVtYmVyXSk7CgkJaisrOwoJfQoKCWZjbG9zZShmcHRyKTsKCWZjbG9zZShmZmYpOwoJZmNsb3NlKGVuY29kZSk7CglpbnQgbnVtLG9vLHBwLG51bTI7CglpbnQgb2tbNF1bNF0gPSB7MH07CgkvL+ino+eivAoJZW5jb2RlID0gZm9wZW4oImVuY29kZS50eHQiLCAiciIpOy8vIAoJZW5jb2RlMiA9IGZvcGVuKCJlbmNvZGUudHh0IiwgInIiKTsvLyAKCXdoaWxlIChrIDwgKGZsb2F0KXp6KjIuNzUpewoKCQlmc2NhbmYoZW5jb2RlLCAiJTFkIiwgJm51bSk7CgkKCQoJCWsrKzsKCX0KCQkvL2ZwcmludGYoZGVjb2RlLCIlZFxuIixudW1iZXIyKQoJCQoJCglwcmludGYoImVudHJvcHk9JWZcbiIsIGVudHJvcHkpOwoJcHJpbnRmKCJsZW5ndGg9JWZcbiIsIGxlbm4pOwoJCgkKCXN5c3RlbSgicGF1c2UiKTsKCXJldHVybiAwOwoKfQ==