Понятие алгоритма. Методы оценки алгоритмической сложности.
Алгоритм (процедура) – решение задач в виде точных последовательно выполняемых предписаний. Это интуитивное определение сопровождается описанием интуитивных свойств (признаков) алгоритмов: эффективность, определенность, конечность.
Эффективность – возможность исполнения предписаний за конечное время. Например, алгоритм – процедура, состоящая из “конечного числа команд, каждая из которых выполняется механически за фиксированное время и с фиксированными затратами”. Функция алгоритмически эффективно вычислима, если существует механическая процедура, следуя которой для конкретных значений ее аргументов можно найти значение этой функции.
Определенность – возможность точного математического определения или формального описания содержания команд и последовательности их применения в этой процедуре.
Конечность – выполнение алгоритма при конкретных исходных данных за конечное число шагов.
Для демонстрации алгоритмов в теории используются алгоритмические преобразования слов и предложений формального языка.
В формальных описаниях алгоритм конструктивно связывают с понятием машины, предназначенной для автоматизированных преобразований символьной информации.
Для автоматических вычислений разрабатываются модели алгоритмов распознавания языков и машина, работающая с этими моделями.
Таким образом, соединяют математическое, формальное определение алгоритма и конструктивное, позволяющее реализовать модели вычислительными машинами. Алгоритмические вычисления применяются во всех областях науки и техники – монография Д. Кнута рассматривает разнообразные проблемно-ориентированные алгоритмические решения. Графический интуитивный метод построения алгоритмов в виде схем и диаграмм сохраняет актуальность, поддерживается стандартами на языки редактирования. Объектно-ориентированное обобщение алгоритмических языков позволяет активизировать алгоритмическое мышление и организовать масштабное программирование, опираясь на огромные ресурсы производительности и объемы памяти ЭВМ, постоянно наращиваемые стандартные библиотеки.
Теория алгоритмических языков и компиляторов, безусловно, имеет отношение к алгоритмизации, но является самостоятельной областью знаний и применения алгоритмов. Общая теория алгоритмов занимается проблемой эффективной вычислимости. Разработано несколько формальных определений алгоритма, в которых эффективность и конечность вычислений может быть определена количественно – числом элементарных шагов и объемом требуемой памяти. Подобными моделями алгоритмических преобразований символьной информации являются:
- конечные автоматы;
- машина Тьюринга;
- машина Поста;
- ассоциативное исчисление или нормальные алгоритмы Маркова;
- рекурсивные функции.
Некоторые из этих моделей лежат в основе методов программирования и используются в алгоритмических языках.
Сложность алгоритма — характеристика алгоритма, определяющая зависимость времени работы программы от объема обрабатываемых данных.
Для алгоритма обработки равных по объему данных продолжительность его работы является неизменной, а сложность алгоритма — постоянной. При этом время работы алгоритма обработки массивов данных зависит от размеров этих массивов.
Так, если время работы алгоритма по выполнению только операции чтения и занесения данных в оперативную память определяется выражением an+b, где а — время чтения и занесения в память одной информационной единицы, b — время выполнения вспомогательных функций, n — общее количество элементов исходных (входных данных) алгоритма (количество строк таблицы, количество переборов, сочетаний и др.), характеризующим линейную зависимость от n, то сложность такого алгоритма будет линейной. Например, для алгоритма обменной сортировки (сортировка по методу пузырька) n элементов списка сравнений позволяет определить число сравнений, выражаемое полиномом второй степени: (n2 - n) / 2. При этом сложность алгоритма будет квадратичной. Если сложность такого алгоритма оценивается для готовой программы, то вместо числа сравнений вычисляется число внутренних циклов, являющихся основой рассматриваемой программы.
Оценка сложности алгоритма по времени его работы алгоритма может определяться максимальным, минимальным и средним временем его выполнения. Различные используемые эвристические методы этой оценки дают различные значения указанного времени. Для приведенного примера сортировки оценки совпадают. Если же прекращать выполнение процедуры после выдачи результата об упорядочении списка, временные оценки работы алгоритма будут различны. Принято, что сложность задачи оценивается по реализациям правильных алгоритмов и представляет собой верхний предел для времени работы алгоритма. Однако может быть определен и нижний предел. Вполне очевидно, что для выполнения какого-либо вида обработки n элементов требуемое время по крайней мере будет пропорционально n.
Если рассмотреть пример алгоритма перемножения двух матриц размером n×n, то число реализаций оператора внутреннего цикла будет равно n3, а в соответствии с определением произведения матриц минимальное время работы также пропорционально n3. Таким образом, рассмотренные алгоритмы имеют полиномиальную оценку времени работы: n2 и n3. При этом алгоритм с оценкой n2 работает быстрее алгоритма с оценкой n3. С учетом рассмотренных примеров можно представить следующее содержание формальной сложности алгоритма.
Сложность алгоритма — свойство алгоритма, которое определяется как порядок функции, выражающей время его работы.
Так, функции f(n) и g(n), а, следовательно, и сложность алгоритмов будут одного порядка, если для больших n существует константа k, такая, что f(n)/g(n)≤k, то есть f(n)=O(g(n)). Таким образом, сложность алгоритма оценивается функцией изменения времени его выполнения. Для обозначения этой характеристики сложности принято понятие «временная сложность алгоритма», которая описывается функцией скорости роста времени выполнения и обозначается через известную O-символику.
Самый простой способ оценки – экспериментальный, т. е. запрограммировать алгоритм и выполнить полученную программу на нескольких задачах, оценивая время выполнения программы. Однако этот способ имеет недостатки. Во-первых, экспериментальное программирование – это, возможно, дорогостоящий процесс. Во-вторых, необходимо учитывать, что на время выполнения программ влияют следующие факторы:
Временная сложность алгоритма программы;
Качество скомпилированного кода исполняемой программы;
Машинные инструкции, используемые для выполнения программы.
Наличие второго и третьего факторов не позволяют применять типовые единицы измерения временной сложности алгоритма (секунды, миллисекунды и т. п.), так как можно получить самые различные оценки для одного и того же алгоритма, если использовать разных программистов (которые программируют алгоритм каждый по-своему), разные компиляторы и разные вычислительные машины.
Существует метод, позволяющий теоретически оценить время выполнения алгоритма.
Часто временная сложность алгоритма зависит от количества входных данных. Обычно говорят, что временная сложность алгоритма имеет порядок T(n) от входных данных размера n. Точно определить величину T(n) на практике представляется довольно трудно. Поэтому прибегают к асимптотическим отношениям с использованием О-символики.
Временная сложность алгоритма — «время» выполнения алгоритма, выполняемое в шагах (инструкциях алгоритма), которые необходимо выполнить алгоритму для достижения запланированного результата.
- Оглавление
- Процессы жизненного цикла систем (на основе iso/iec 15288).
- Структура и функциональное назначение процессов жизненного цикла программных средств (на основе iso/iec 12207).
- Модель качества и критерии качества программных средств (на основе iso/iec 9126 и iso/iec 25010).
- Оценка зрелости процессов создания и сопровождения программных средств на основе методологии cmm и cmmi (на основе iso/iec 15504).
- Система менеджмента информационной безопасности (на основе серии iso/iec 27000).
- Методы кодирования текстовой, графической и звуковой информации в эвм. Аналоговые, дискретные и цифровые сигналы.
- История создания, принципы работы и основные сервисы сети Интернет.
- Представление данных в эвм. Единицы измерения информации. Двоичные приставки по гост 8.417-2002 и iec 80000-13.
- Принципы и архитектура фон Неймана.
- Принципы фон Неймана
- Порядок обработки команд микропроцессором. Прерывания. Типы прерываний.
- Поколения эвм, основные особенности.
- Классификация запоминающих устройств в эвм. Современные реализации запоминающих устройств.
- Наиболее распространённые в настоящее время зу:
- Алгебра логики. Основные законы алгебры логики. Применение алгебры логики в информатике.
- Понятие алгоритма. Методы оценки алгоритмической сложности.
- Понятие системы. Системный анализ. Применение системного анализа в информатике.
- Теория формальных грамматик. Основные понятия и положения. Применение в информатике.
- Теория вероятностей. Основные понятия и положения. Применение в информатике.
- Математические методы оптимизации и их применение в информатике.
- Понятие компьютерного моделирования. Вычислительный эксперимент.
- Структурное программирование. Понятия и принципы.
- Объектно-ориентированное программирование. Понятия и принципы.
- Декларативные языки программирования и их сфера применения.
- Событийно-ориентированное программирование.
- Многопоточное программирование. Процесс и поток выполнения. Средства синхронизации потоков.
- Синхронизация потоков
- Основные алгоритмы и структуры данных, применяемые в вычислительных системах.
- Приёмы (шаблоны) объектно-ориентированного проектирования.
- 27. Теория графов. Основные понятия. Решаемые задачи.
- 28. Средства моделирования при разработке программного обеспечения.
- 29. Инструментальные средства разработки программного обеспечения.
- 32. Программный продукт. Жизненный цикл программного продукта.
- 33. Бизнес-процесс. Средства анализа и моделирования. Автоматизация бизнес-процессов.
- 34. Архитектура вычислительной системы, разновидности.
- 35. Аппаратное обеспечение вычислительных систем.
- 36. Архитектура вычислительной сети.
- 37. Виртуализация вычислительных ресурсов. «Облачные» вычисления.
- 38. Способы реализации человеко-машинного взаимодействия. Человеко-машинное взаимодействие (чмв)
- 39. Принципы защиты информации в вычислительных системах и сетях.
- 40. Операционная система. Понятие и основные задачи. Классификация операционных систем.
- 41. Файловая система и принципы построения и основные функции.
- 42. Понятие машинного обучения и искусственного интеллекта. Решаемые задачи.
- 43. Методы сжатия графической информации. Области применения различных методов.
- Алгоритмы сжатия без потерь
- Алгоритмы сжатия с потерями
- 44. Методы сжатия звуковой информации. Области применения различных методов.
- Сжатие без потерь
- Сжатие с потерями
- 45. Понятие виртуальной и дополненной реальности. Средства реализации.
- 46. Компьютерная графика. Различные методы и технологии реализации.
- 47. Системы управления базами данных, разновидности.
- 48. Принципы построения реляционных баз данных. Нормализация данных.
- 49. Распределённые базы данных. Принципы построения и решаемые задачи.
- 50. Понятие открытой вычислительной системы. Классификация. Принципы построения.
- 51. Методы анализа информационных систем
- 52. Средства мониторинга сетевого трафика
- 53. Метод Монте-Карло. Принципы построения моделей для анализа эффективности информационных систем (основа построения, достоинства и недостатки).
- 54. Методы управления сетью: коммутация каналов, коммутация пакетов.
- 55. Методы балансировки трафика
- 56. Семиуровневая модель osi
- 57. Локальные вычислительные сети (топология, методы доступа)
- 58. Методы повышения достоверности при передаче информации
- 59. Понятие качества обслуживания в компьютерных сетях. Средства обеспечения качества обслуживания.
- 60. Назначение и принцип работы интернет сети
- 1. Сеть передачи данных
- 2. Технология клиент-сервер
- 3. Пакетная передача данных
- 4. Принципы работы сетевого оборудования.
- 61. Основные протоколы сети Интернет, их назначение.
- 62. Понятие dns. Структура доменных имен в сети Интернет
- 63. Понятие стека протоколов. Стек протоколов tcp/ip, udp/ip.
- 64. Системы автоматизированного проектирования (сапр).
- 65. Экспертные системы. Задачи и область применения.
- 66. Автоматизированные среды обработки информации и управления. Понятие, сферы применения.
- 67. Теория массового обслуживания. Основные принципы. Применение в информатике.
- 68. Информационные технологии в науке и образовании.
- 69. Прикладное программное обеспечение сетевых технологий. Программное обеспечение вычислительных сетей состоит из трех составляющих:
- 70. Принципы построения распределенных информационных систем. Промежуточное программное обеспечение для обработки сообщений.
- 72. Корпоративные информационные системы (класс erp). Разновидности. Решаемые задачи.
- 73. Развитие новых информационно-коммуникационных технологий как база становления информационного общества
- 74. Модели жизненного цикла программного обеспечения.
- 75. Основные принципы структурного анализа систем
- 76. Консалтинг в области информационных технологий
- 77. Методика проведения обследования объектов автоматизации
- 78. Методы построения и анализа моделей деятельности предприятия
- 79. Структурно-функциональные модели
- 80. Модели потоков данных (dfd)
- 81. Модели "сущность-связь" (erd)
- 82. Нормализация модели данных
- 83. Объектно-ориентированный язык визуального моделирования uml
- 1) Начальная стадия
- 2) Уточнение
- 3) Построение
- 4) Внедрение
- 85. Диаграммы вариантов использования (use-casesdiagram)
- 86. Диаграммы классов (class diagram). Основные объекты диаграммы
- 87. Диаграммы деятельности (activity diagram). Основные объекты диаграммы
- 88. Диаграммы последовательности (sequence diagram)