Посчитать энтропию для каждой буквы и сумму энтропии в конце - C#

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

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

Нужно найти частотность каждой буквы в тексте и определить энтропию H, в итоге после последней буквы должна выводится сумма H (сумма энтропии по каждой букве), но у меня ошибка, выводится в файл только энтропия последней буквы. Нужно где-то прописать, чтобы к энтропии первой буквы добавлялось значение энтропии второй буквы и так далее. Вроде не сложно, но что-то я запуталась Вот сам код
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
 
namespace laboratorna1
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] alphabet = File.ReadAllLines("russian_alphabet.txt", Encoding.GetEncoding(1251));
            string text2 = File.ReadAllText("russian_text2.txt", Encoding.GetEncoding(1251));
            Dictionary<string, int> frequency2 = new Dictionary<string, int>();
            for (int i = 0; i < alphabet.Length; i++)
            {
             alphabet[i] = alphabet[i].Trim();
             
             frequency2[alphabet[i].ToString()] = 0;
            }
            
            for (int i = 0; i < text2.Length; i++)
            {
                if (frequency2.ContainsKey(text2[i].ToString()))
                {
                    frequency2[text2[i].ToString()]++;
                }
            }

            StringBuilder answer2 = new StringBuilder();
            for (int i = 0; i < alphabet.Length; i++)
            {
                if (frequency2.ContainsKey(alphabet[i].ToString()))
                {
                    double p2, H2=0;
                    p2 = (double)frequency2[alphabet[i].ToString()] / text2.Length;
                    for (int j = 0; j < alphabet.Length; j++)
                        {
                         H2 = ((-p2)*Math.Log(p2,2.0));
                        }
                    answer2.AppendLine(alphabet[i] + ' ' + p2.ToString());
                    if (alphabet[i] == alphabet[alphabet.Length-1])
                    {
                        answer2.AppendLine("H2 = " + H2.ToString());
                    }
                }
                else
                {
                    answer2.AppendLine(alphabet[i] + " 0");
                }
            }
            File.WriteAllText("answer_file2.txt", answer2.ToString(), Encoding.GetEncoding(1251));
            File.WriteAllLines("answer_file2.txt", File.ReadAllLines("answer_file2.txt", Encoding.GetEncoding(1251)).OrderByDescending(a => a.Substring(2)), Encoding.GetEncoding(1251));
        }
    }
}

Решение задачи: «Посчитать энтропию для каждой буквы и сумму энтропии в конце»

textual
Листинг программы
            StringBuilder answer2 = new StringBuilder();
            for (int i = 0; i < alphabet.Length; i++)
            {
                double p2, H2, sumH2 = 0;
                p2 = (double)frequency2[alphabet[i]] / text2.Length;
                for (int j = 0; j < alphabet.Length; j++)
                {
                    H2 = ((-p2) * Math.Log(p2, 2.0));
                    sumH2 += H2;
                    answer2.AppendFormat("{0} p={1} H={2}\r\n", alphabet[i], p2, H2);
                }
                answer2.AppendFormat("Sum H={0}\r\n", sumH2);
            }

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


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

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

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