Что касается 1-го случая -
H = -сумма (i=1,m)pi * log pi, логарифм берётся по основанию два, а pi - вероятность появления i-го символа..
Здесь проблем не возникает...нахождение вероятности не вызывает трудностей..
Во 2-м случае:
H = -1/2*сумма (i) сумма(j) pij * log pij, pij - вероятность появления пары символов. И как раз с этой вероятностью pij проблемка - не пойму, как её получить..
struct str
{
char symbol; // очередной символ алфавита
unsigned int count; // частота появления
float probability; // вероятность
};
typedef str STR;
STR Alph[n];
int amount=0; //кол-во всех символов в сообщении
.....
i=0;
while (Alph[i].count)
{
Alph[i].probability=(float)(Alph[i].count)/(amount); //нашли вероятность pi
i++;
}
......
//и дальше вычисляем энтропию на основе pi
float entropy(int i)
{
float Hp=(float)((-1)*Alph[i].probability*((log10(Alph[i].probability))/(log10(2))));
return Hp;
}
.......
void __fastcall TFormTIPiS1::BitBtnHpClick(TObject *Sender)
{
float HpAll=0;
int i=0;
while (Alph[i].count)
{
HpAll+=entropy(i);
i++;
}
}
Объясните пожалуйста, а что нужно делать, чтобы найти вероятность pij (при условии попарной зависимости символов)?