Заполнить массив 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));
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д