Заполнить массив Double вероятностями - C#

Узнай цену своей работы

Формулировка задачи:

Для рассчета Энтропии вводимого текста мне необходимо сделать массив с вероятностями появления в водимом тексте всех букв. Желательно убрать их этого массива нули для облегчения работы с ним. Я уже написал часть кода, в котором в отдельный массив вносится колличество каждой буквы отдельно. Индексация букв не важна, код должен работать просто с цифрами без пояснения, т.к. задачи выводить энтропию для каждого символа отдельно нет. Вот часть рабочего кода
            //Первым делом я думаю стоит внести алфавит в виде массива из букв
            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[] делить на Double. Прошу помощи в виде подсказок или исправления конкретного участка, спасибо!!

Решение задачи: «Заполнить массив 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));

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.875 из 5
Похожие ответы