- •1. Введение
- •2. Информатика
- •Предмет и основные понятия информатики
- •Понятие информации и её свойства
- •Классификация информации
- •1) По способам восприятия
- •3) По предназначению
- •Свойства информации
- •Объективность
- •Достоверность
- •Полнота
- •Понятие количества информации
- •Тема 1. Информация и информационные процессы
- •1.1. Информация. Информационные объекты различных видов
- •1.2. Виды и свойства информации
- •1.3. Основные информационные процессы. Хранение, передача и обработка информации
- •Информационная энтропия
- •Формальные определения
- •Определение по Шеннону
- •Определение с помощью собственной информации
- •Свойства
- •Математические свойства
- •Эффективность
- •Вариации и обобщения
- •Условная энтропия
- •Взаимная энтропия
- •История
- •Алгоритм Шеннона — Фано
- •Основные сведения
- •Основные этапы
- •Алгоритм вычисления кодов Шеннона — Фано
- •Пример кодового дерева
- •Информация
- •История понятия
- •Классификация информации
- •Значение термина в различных областях знания Философия
- •В информатике
- •Системология
- •В физике
- •В математике
- •В теории управления
- •В кибернетике
- •Информация в материальном мире
- •Информация в живой природе
- •Информация в человеческом обществе
- •Хранение информации
- •Передача информации
- •Обработка информации
- •Информация в науке
- •Теория информации
- •Теория алгоритмов
- •Теория автоматов
- •Семиотика
- •Дезинформация
- •1. Введение
- •Способы кодирования информации.
- •Теорема Шеннона — Хартли
- •Утверждение теоремы
- •История развития
- •Критерий Найквиста
- •Формула Хартли Теоремы Шеннона для канала с шумами
- •Теорема Шеннона — Хартли
- •Значение теоремы Пропускная способность канала и формула Хартли
- •1. Передача информации. Информационные каналы
- •2. Характеристики информационного канала
- •3. Абстрактный алфавит
- •4. Кодирование и декодирование
- •5. Понятие о теоремах Шеннона
- •6. Международные системы байтового кодирования
- •7. Кодирование информации
- •7.1. Двоичное кодирование текстовой информации
- •7.2. Кодирование графической информации
- •7.2.1. Кодирование растровых изображений
- •7.2.2. Кодирование векторных изображений.
- •7.3. Двоичное кодирование звука
- •Алгоритм
- •История термина
- •Определения алгоритма Неформальное определение
- •Формальное определение
- •Машина Тьюринга
- •Рекурсивные функции
- •Нормальный алгоритм Маркова
- •Стохастические алгоритмы
- •Другие формализации
- •Формальные свойства алгоритмов
- •Виды алгоритмов
- •Нумерация алгоритмов
- •Алгоритмически неразрешимые задачи
- •Анализ алгоритмов Доказательства корректности
- •Время работы
- •Наличие исходных данных и некоторого результата
- •Представление алгоритмов
- •Эффективность алгоритмов
- •1.1. Sadt-модели
- •1.2. Модель отвечает на вопросы
- •1.3. Модель имеет единственный субъект
- •1.4. У модели может быть только одна точка зрения
- •1.5. Модели как взаимосвязанные наборы диаграмм
- •1.6. Резюме
- •Классификация моделей
- •1) Классификация моделей по области использования:
- •2) Классификация моделей по фактору времени:
- •1.3.1. Основные признаки систем
- •Система
- •Различные определения
- •Свойства систем Связанные с целями и функциями
- •Связанные со структурой
- •Связанные с ресурсами и особенностями взаимодействия со средой
- •Классификации систем Ранги систем
- •Термодинамическая классификация
- •Другие классификации
- •Закон необходимости разнообразия (закон Эшби)
Анализ алгоритмов Доказательства корректности
Вместе с распространением информационных технологий увеличился риск программных сбоев. Одним из способов избежания ошибок в алгоритмах и их реализациях служат доказательства корректности систем математическими средствами.
Использование математического аппарата для анализа алгоритмов и их реализаций называют формальными методами. Формальные методы предусматривают применение формальных спецификаций и, обычно, набора инструментов для синтаксического анализа и доказательства свойств спецификаций. Абстрагирование от деталей реализации позволяет установить свойства системы независимо от ее реализации. Кроме того, точность и однозначность математических утверждений позволяет избежать многозначности и неточности естественных языков.
По гипотезе Ричарда Мейса, «избежание ошибок лучше устранения ошибок»[ . По гипотезе Хоара, «доказательство программ решает проблему корректности, документации и совместимости». Доказательство корректности программ позволяет выявлять их свойства по отношению ко всему диапазону входных данных. Для этого понятие корректности было разделено на два типа:
-
Частичная корректность — программа дает правильный результат для тех случаев, когда она завершается.
-
Полная корректность — программа завершает работу и выдает правильный результат для всех элементов из диапазона входных данных.
Во время доказательства корректности сравнивают текст программы со спецификацией желаемого соотношения входных-выходных данных. Для доказательств типа Хоара эта спецификация имеет вид утверждений, которые называют предусловиями и постусловиями. В совокупности с самой программой, их еще называют тройкой Хоара. Эти утверждения записывают
P{Q}R
где P — это предусловие, что должно выполняться перед запуском программы Q, а R — постусловие, правильное после завершения работы программы.
Формальные методы были успешно применены для широкого круга задач, в частности: разработке электронных схем, искусственного интеллекта, автоматических систем на железной дороге, верификации микропроцессоров, спецификации стандартов и спецификации и верификации программ.
Время работы
Графики функций, приведенных в таблице ниже.
Распространенным критерием оценки алгоритмов является время работы и порядок роста продолжительности работы в зависимости от объема входных данных.[19]
Для каждой конкретной задачи составляют некоторое число, которое называют ее размером. Например, размером задачи вычисления произведения матриц может быть наибольший размер матриц-множителей, для задач на графах размером может быть количество ребер графа.
Время, которое тратит алгоритм как функция от размера задачи n, называют временной сложностью этого алгоритма T(n). Асимптотику поведения этой функции при увеличении размера задачи называют асимптотичной временной сложностью, а для ее обозначения используют специальную нотацию.
Именно асимптотическая сложность определяет размер задач, которые алгоритм способен обработать. Например, если алгоритм обрабатывает входные данные размером n за время cn², где c — некоторая константа, то говорят, что временная сложность такого алгоритма O(n²).
Часто, во время разработки алгоритма пытаются уменьшить асимптотическую временную сложность для наихудших случаев. На практике же бывают случаи, когда достаточным является алгоритм, который «обычно» работает быстро.
Грубо говоря, анализ средней асимптотической временной сложности можно разделить на два типа: аналитический и статистический. Аналитический метод дает более точные результаты, но сложен в использовании на практике. Зато статистический метод позволяет быстрее осуществлять анализ сложных задач[20].
В следующей таблице приведены распространенные асимптотические сложности с комментариями.
Сложность |
Комментарий |
Примеры |
O(1) |
Устойчивое время работы не зависит от размера задачи |
Ожидаемое время поиска в в хеш-таблице |
O(log log n) |
Очень медленный рост необходимого времени |
Ожидаемое время работы интерполирующего поиска n элементов |
O(log n) |
Логарифмический рост — удвоение размера задачи увеличивает время работы на постоянную величину |
Вычисление xn; Двоичный поиск в массиве из n элементов |
O(n) |
Линейный рост — удвоение размера задачи удвоит и необходимое время |
Сложение/вычитание чисел из n цифр; Линейный поиск в массиве из n элементов |
O(n log n) |
Линеаритмичный рост — удвоение размера задачи увеличит необходимое время чуть более чем вдвое |
Сортировка слиянием или кучей n элементов; нижняя граница сортировки сопоставлением n элементов |
O(n²) |
Квадратичный рост — удвоение размера задачи увеличивает необходимое время в четыре раза |
Элементарные алгоритмы сортировки |
O(n³) |
Кубичный рост — удвоение размера задачи увеличивает необходимое время в восемь раз |
Обычное умножение матриц |
O(cn) |
Экспоненциальный рост — увеличение размера задачи на 1 приводит к c-кратному увеличению необходимого времени; удвоение размера задачи увеличивает необходимое время в квадрат |
Некоторые задачи коммивояжёра, алгоритмы поиска полным перебором |