Essays.club - Получите бесплатные рефераты, курсовые работы и научные статьи
Поиск

Визначення кількості інформації та ентропійних характеристик об’єктів комп’ютерних мереж

Автор:   •  Июнь 5, 2022  •  Лабораторная работа  •  2,486 Слов (10 Страниц)  •  182 Просмотры

Страница 1 из 10

Міністерство освіти і науки України

Національний університет «Львівська політехніка»

Інститут комп’ютерних наук та інформаційних технологій

Кафедра автоматизованих систем управління

[pic 1]

Звіт

до лабораторної роботи № 1

з дисципліни “Теорія інформації”

на тему:

«Визначення кількості інформації та ентропійних характеристик об’єктів комп’ютерних мереж»

   

Виконав:              студент КН-205

                                                                                                       Шебунчак Андріан  

                                                                         Прийняла:        викладач кафедри АСУ

Павлюк О. М.

Львів - 2022

Лабораторна робота №1

Тема роботи:  «Визначення кількості інформації та ентропійних характеристик об’єктів комп’ютерних мереж»

Мета роботи:  набути навики визначення кількості інформації у

повідомленнях та визначати ентропії джерела інформації, приймача, каналу

зв’язку, системи взаємозв’язаних об’єктів.

Індивідуальне [pic 2]

завдання номер 92

Хід роботи

2. Виконати обчислення середньої ймовірності появи окремих літер українського (у) алфавіту шляхом аналізу різноманітних текстів.

3-4. На основі досліджень в попередньому пункті створити таблицю розподілу ймовірностей літер в повідомленнях відповідною мовою.

За створеною таблицею визначити :

1. Кількість інформації у кожній літері.

2. Кількість інформації у Вашому прізвищі та імені записаного мовою відповідно до індивідуального варіанту.

3. Ентропію H(X).

Для цього написати відповідний програмний код.

Результат підрахунків для тексту заданою мовою.

 

Код програми

package com.company;

import
java.io.*;
import
java.util.ArrayList;
import
java.util.List;

public class
Main {
   
private static List<Integer> charCount = new ArrayList<>();
   private static
List<Double> charAverageAppear = new ArrayList<>();
   private static
List<Double> amountInformation = new ArrayList<>();
   private static
List<Double> charEntropy = new ArrayList<>();
   private static
StringBuilder stringBuilder = new StringBuilder("");
   private static double
fullProbability;
   private static double
averageProbability;
   private static double
fullAmountInform;
   private static double
fullEntropy;
   private static int
totalCount = 0;
   private static
Integer temp;
   private static boolean
sameletter;

   public static void
main(String[] args) {
       setCharCount()
;
       
BufferedReader reader = null;
       try
{
           reader =
new BufferedReader(new FileReader(new File("lab1(2).txt")));

           int
c;
           while
((c = reader.read()) != -1) {
               
if((c>=1040 && c <= 1096)||(c>=1100 && c <= 1103)||
                       (c==
1169)||(c==1110)||(c==1111)||(c==1108)||
                       (c==
1168)||(c==1028)||(c==1030)||(c==1031))
               {
                   
if (stringBuilder.isEmpty())
                   {
                       stringBuilder.append((
char)c);
                       
temp = charCount.get(0);
                       
temp += 1;
                       
charCount.set(0, temp);
                       
totalCount++;
                   
} else {
                       
for (int i = 0; i < stringBuilder.length(); i++) {
                           
if ((char)c == stringBuilder.charAt(i))
                           {
                               temp = charCount.get(i)
;
                               
temp += 1;
                               
charCount.set(i, temp);
                               
totalCount++;
                               
sameletter = true;
                               break;
                           
}
                           sameletter =
false;
                       
}
                       
if (!sameletter) {
                           stringBuilder.append((
char)c);
                           
temp = charCount.get(stringBuilder.length() - 1);
                           
temp += 1;
                           
charCount.set(stringBuilder.length() - 1, temp);
                           
totalCount++;
                       
}
                   }
               }
           }

           reader.close()
;
       
} catch (IOException e) {
           e.printStackTrace()
;
       
} finally {
           
if (reader != null) {
               
try {
                   reader.close()
;
               
} catch (IOException e) {
                   e.printStackTrace()
;
               
}
           }
       }
       CountAvarageAppear()
;
       
fullProbability = CountFullProbability();
       
averageProbability = (double)1/stringBuilder.length();
       
CountAmountInformation();
       
fullAmountInform = CountFullAmountInform();
       
CountCharEntropy();
       
fullEntropy = CountFullEntropy();
       
ToString();
   
}

   
public static void setCharCount() {
       
for (int i = 0; i < 66; i++) {
           charCount.add(i
, 0);
       
}
   }

   
public static void CountAvarageAppear() {
       
for (int i = 0; i < 66; i++) {
           charAverageAppear.add(i
, (double)charCount.get(i)/totalCount);
       
}
   }

   
public static double CountFullProbability() {
       
double temp = 0;
       for
(int i = 0; i < 66; i++) {
           temp += charAverageAppear.get(i)
;
       
}
       
return temp;
   
}

   
public static double log2(double N)
   {
       
return (double)(Math.log(N) / Math.log(2));
   
}

   
public static void CountAmountInformation() {
       
for (int i = 0; i < 66; i++) {
           amountInformation.add(i
, -log2(charAverageAppear.get(i)));
       
}
   }

   
public static double CountFullAmountInform() {
       
double temporary = 0;
       int
i = 0;
       while
(charCount.get(i) != 0) {
           temporary += (amountInformation.get(i) * charCount.get(i))
;
           
i++;
       
}
       
return temporary;
   
}

   
public static void CountCharEntropy() {
       
for (int i = 0; i < 66; i++) {
           charEntropy.add(i
, -charAverageAppear.get(i)*log2(charAverageAppear.get(i)));
       
}
   }

   
public static double CountFullEntropy() {
       
double temporary = 0;
       int
i = 0;
       while
(charAverageAppear.get(i) != 0) {
           temporary += charEntropy.get(i)
;
           
i++;
       
}
       
return temporary;
   
}

   
public static void ToString() {
       System.out.println(
"Буква\t\tN\t\t\tp(x)\t\t\t\t\t\tI\t\t\t\t\t\t\tH(x)");
       for
(int i = 0; i < stringBuilder.length(); i++) {
           System.out.printf(
"%-4c\t\t%-6d\t\t%-20.18f\t\t%-20.17f\t\t%-20.18f\n", stringBuilder.charAt(i), charCount.get(i), charAverageAppear.get(i), amountInformation.get(i), charEntropy.get(i));
       
}
       System.out.println()
;
       
System.out.printf("Повна ймовірність: %.16f\n",fullProbability);
       
System.out.printf("Середня ймовірність: %.16f\n",averageProbability);
       
System.out.printf("Загальна кіклькість інформації: %.12f\n",fullAmountInform);
       
System.out.printf("Загальна ентропія: %.16f\n",fullEntropy);
   
}
}

...

Скачать:   txt (14.3 Kb)   pdf (573.9 Kb)   docx (1.1 Mb)  
Продолжить читать еще 9 страниц(ы) »
Доступно только на Essays.club