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

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

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

Нужно найти частотность каждой буквы в тексте и определить энтропию H, в итоге после последней буквы должна выводится сумма H (сумма энтропии по каждой букве), но у меня ошибка, выводится в файл только энтропия последней буквы. Нужно где-то прописать, чтобы к энтропии первой буквы добавлялось значение энтропии второй буквы и так далее. Вроде не сложно, но что-то я запуталась Вот сам код
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Text;
  6. namespace laboratorna1
  7. {
  8. class Program
  9. {
  10. static void Main(string[] args)
  11. {
  12. string[] alphabet = File.ReadAllLines("russian_alphabet.txt", Encoding.GetEncoding(1251));
  13. string text2 = File.ReadAllText("russian_text2.txt", Encoding.GetEncoding(1251));
  14. Dictionary<string, int> frequency2 = new Dictionary<string, int>();
  15. for (int i = 0; i < alphabet.Length; i++)
  16. {
  17. alphabet[i] = alphabet[i].Trim();
  18. frequency2[alphabet[i].ToString()] = 0;
  19. }
  20. for (int i = 0; i < text2.Length; i++)
  21. {
  22. if (frequency2.ContainsKey(text2[i].ToString()))
  23. {
  24. frequency2[text2[i].ToString()]++;
  25. }
  26. }
  27.  
  28. StringBuilder answer2 = new StringBuilder();
  29. for (int i = 0; i < alphabet.Length; i++)
  30. {
  31. if (frequency2.ContainsKey(alphabet[i].ToString()))
  32. {
  33. double p2, H2=0;
  34. p2 = (double)frequency2[alphabet[i].ToString()] / text2.Length;
  35. for (int j = 0; j < alphabet.Length; j++)
  36. {
  37. H2 = ((-p2)*Math.Log(p2,2.0));
  38. }
  39. answer2.AppendLine(alphabet[i] + ' ' + p2.ToString());
  40. if (alphabet[i] == alphabet[alphabet.Length-1])
  41. {
  42. answer2.AppendLine("H2 = " + H2.ToString());
  43. }
  44. }
  45. else
  46. {
  47. answer2.AppendLine(alphabet[i] + " 0");
  48. }
  49. }
  50. File.WriteAllText("answer_file2.txt", answer2.ToString(), Encoding.GetEncoding(1251));
  51. File.WriteAllLines("answer_file2.txt", File.ReadAllLines("answer_file2.txt", Encoding.GetEncoding(1251)).OrderByDescending(a => a.Substring(2)), Encoding.GetEncoding(1251));
  52. }
  53. }
  54. }

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

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

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


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

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

5   голосов , оценка 3.6 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы