Заполнить массив Double вероятностями - C#
Формулировка задачи:
Для рассчета Энтропии вводимого текста мне необходимо сделать массив с вероятностями появления в водимом тексте всех букв. Желательно убрать их этого массива нули для облегчения работы с ним.
Я уже написал часть кода, в котором в отдельный массив вносится колличество каждой буквы отдельно. Индексация букв не важна, код должен работать просто с цифрами без пояснения, т.к. задачи выводить энтропию для каждого символа отдельно нет.
Вот часть рабочего кода
Т.к. я ньюфаг и работаю с С# недавно, я специально для себя пишу столько комментариев.
А вот проблемная часть в которой у меня вопросы :
Ругается он у меня на то, что не могу я Double[] делить на Double.
Прошу помощи в виде подсказок или исправления конкретного участка, спасибо!!
//Первым делом я думаю стоит внести алфавит в виде массива из букв
char[] ALPHA = new char[122] { 'A', 'a', 'B', 'b', 'C', 'c', 'D', 'd', 'E', 'e', 'F', 'f', 'G', 'g', 'H', 'h', 'I', 'i', 'J', 'j', 'K', 'k', 'L', 'l', 'M', 'm', 'N', 'n', 'O', 'o', 'P', 'p', 'Q', 'q', 'R', 'r', 'S', 's', 'T', 't', 'U', 'u', 'V', 'v', 'W', 'w', 'X', 'x', 'Y', 'y', 'Z', 'z', ' ', ',', '.', '!', '?', ';', '/', 'а', 'А', 'б', 'Б', 'в', 'В', 'г', 'Г', 'д', 'Д', 'е', 'Е', 'ё', 'Ё', 'ж', 'Ж', 'з', 'З', 'и', 'И', 'й', 'Й', 'к', 'К', 'л', 'Л', 'м', 'М', 'н', 'Н', 'о', 'О', 'п', 'П', 'р', 'Р', 'с', 'С', 'т', 'Т', 'у', 'У', 'ф', 'Ф', 'х', 'Х', 'ц', 'Ц', 'ч', 'Ч', 'ш', 'Ш', 'щ', 'Щ', 'ъ', 'ы', 'ь', 'э', 'Э', 'ю', 'Ю', 'я', 'Я' };
//В составе алфавита 122 элемента
int DLIN = ALPHA.Length;//длина масива с алфавитом
char[] NOMER = new char[DLIN+1];//пока сам не понимаю зачем
double[] VEROI;//добавим переменный массив для вероятностей
string vvod = Console.ReadLine();//считывание с клавы
int DLIN2 = vvod.Length;//длина введенного с клавы
char[] VVOD = vvod.ToCharArray();//попытка замутить массив из букавок
int[] BETHA = new int[122];
//начинаем цикл подсчета букв
for (int i = 0; i < BETHA.Length; i++)
{
BETHA[i] = 0;
for (int j = 0; j < DLIN2; j++)
{
if (VVOD[j] == ALPHA[i])
BETHA[i]++;
}
}
//конец цикла //новый цикл для вероятностей
double DLIN3 = BETHA.Length;
double[] BETA = BETHA.Select(x => Convert.ToDouble(x)).ToArray();
double[] beta = BETA;
beta = beta.Where((elem) => { return ((elem) == 0); }).ToArray();
for (int i = 0; i < BETA.Length; i++)
{
if (BETA[i] > 0)
VEROI = (BETA[i] / DLIN3);
}Решение задачи: «Заполнить массив Double вероятностями»
textual
Листинг программы
string s = "aabc"; double[] b = s .GroupBy(c => c) .Select(g => (double)g.Count() / s.Length) .ToArray(); double e = -b.Sum(bi => bi * Math.Log(bi, 2));