Обобщение и сжатие данных

Содержание

Слайд 2

Создание класса

Создание класса

Слайд 3

После того как мы написали содержимое класса, мы сможем его использовать,

После того как мы написали содержимое класса, мы сможем его использовать,

создавая переменные этого типа(объекты). Сам по себе класс ничего не делает, это просто тип данных, который мы создали.
Слайд 4

Слайд 5

Как мы видим из предыдущего примера, задавать все значения вручную неудобно

Как мы видим из предыдущего примера, задавать все значения вручную неудобно

и долго, и также для этого они должны быть Public, что нарушает суть ООП Поэтому для того чтобы задавать начальные значения существуют конструкторы
Слайд 6

Слайд 7

Теперь с конструктором мы можем намного удобнее создавать объекты классов, сравните: Вручную С помощью конструктора

Теперь с конструктором мы можем намного удобнее создавать объекты классов, сравните:

Вручную

С

помощью конструктора
Слайд 8

Когда образуется сложная структура классов, то чтобы не переписывать все одни

Когда образуется сложная структура классов, то чтобы не переписывать все одни

и те же вещи из одного класса в другой и как-то связать классы друг с другом, применяется наследование(потомок наследует все из класса родителя)
Слайд 9

Слайд 10

И последнее из самого важного: В более новых языках программирования(Java, C#,)

И последнее из самого важного:

В более новых языках программирования(Java, C#,) отказались

от наследования нескольких классов ради большей безопасности программ, и в дополнение к классам появились интерфейсы, которых можно наследовать сколько угодно, но они сами по себе не обладают никаким функционалом(в C++ их задачу выполняют виртуальные классы(virtual))
Интерфейсы позволяют контролировать, что класс умеет выполнять какую-то функцию, чтобы потом это проверять и использовать в программе
Слайд 11

Создали интерфейс, а потом унаследовали от него несколько классов

Создали интерфейс, а потом унаследовали от него несколько классов

Слайд 12

Слайд 13

Теперь во избежание неоднозначности мы можем проверять объекты на наследование этого

Теперь во избежание неоднозначности мы можем проверять объекты на наследование этого

интерфейса , или хранить любые такие объекты в переменной типа интерфейса(Messenger)
Слайд 14

Слайд 15

Немного про сжатие данных 2 основных способа сжатия данных: Кодирование нескольких

Немного про сжатие данных

2 основных способа сжатия данных:
Кодирование нескольких одинаковых символов

подряд с помощью счетчика повторений
AAAABBCAAAAAAAAAA->4A2BC10A
Замена символов, которые встречаются чаще других более короткими кодами
Слайд 16

Про второй способ: Как вы знаете, в любом алфавите некоторые буквы

Про второй способ:

Как вы знаете, в любом алфавите некоторые буквы или

слова встречаются намного чаще, чем другие. А значит самые частые символы можно кодировать короткими кодами, а редкие длинными
Например, в коде символов ascii все символы кодируются 8 битным двоичным числом, буква “о”-числом 10101110, и буква “ё” числом 11110001, то есть одинаковой длины, хотя букву “о” мы пишем по статистике почти в 300 раз чаще, чем “ё”
Слайд 17

Тогда чтобы сжать любой текст на русском языке, мы могли бы

Тогда чтобы сжать любой текст на русском языке, мы могли бы

изменить коды наших символов, и кодировать частую “о” коротким кодом 001, а редкий символ “ё” более длинным, например 000000000001
Но из-за того что “ё” почти не встречается в тексте, то и объем текста сильно уменьшится
Слайд 18

Сравните код ascii и наш сжимающий код на примере “ооооё”: Код ascii: 1010111010101110101011101010111011110001 Наш код: 001001001001000000000001

Сравните код ascii и наш сжимающий код на примере “ооооё”:

Код ascii:

1010111010101110101011101010111011110001
Наш код: 001001001001000000000001
Слайд 19

И поподробнее про первый способ (замена подряд идущих символов или значений):

И поподробнее про первый способ (замена подряд идущих символов или значений):

Так как

числа тоже являются частью текста, то мы не можем просто так заменять AAAAA на 5A, ведь “5” тоже может встретиться в тексте, и мы не сможем понять что это, просто число или длина нашей последовательности
Значит нам нужно как-то обозначать, то что следующее число будет обозначать именно длину последовательности. Можно взять для этого какой-либо неиспользуемый символ, например |. Тогда при разархивации мы будем знать, что |5A это именно наша длина, но к сожалению немного увеличим объем заархивированного файла
Слайд 20

Также существуют алгоритмы сжатия с потерями, в основном для фотографий, звука

Также существуют алгоритмы сжатия с потерями, в основном для фотографий, звука

и видео

Они сжимают данные так, чтобы изменения не были заметны для человеческих органов чувств, но при этом заметно изменяются в размере
Как пример это всеми используемые форматы JPEG, Djvu, MP3, Opus

Слайд 21

Сжатие с разной глубиной квантования цветоразностных сигналов

Сжатие с разной глубиной квантования цветоразностных сигналов

Слайд 22

Для сжатия с потерями существует неисчислимое количество разных алгоритмов, поэтому их

Для сжатия с потерями существует неисчислимое количество разных алгоритмов, поэтому их

рассматривать слишком долго и сложно, посмотрим просто несколько примеров