SlideShare a Scribd company logo
1 of 18
Основы анализа алгоритмов
(продолжение)

2. Асимптотический анализ
максимальной и средней
сложности
Анализ алгоритма заключается в том,
чтобы предсказать требуемые для его
выполнения ресурсы. Чаще всего
исследователей интересует порядок
роста необходимых для решения задачи
времени и емкости памяти при
увеличении входных данных. С каждой
конкретной задачей можно связать
некоторое число, называемое ее
размером, которое выражает меру
количества входных данных.
Время, затрачиваемое алгоритмом, как
функция размера задачи, называется
временной сложностью этого алгоритма.
Поведение этой сложности в пределе при
увеличении размера задачи называется
асимптотической временной сложностью.
Аналогично можно определить емкостную
сложность и асимптотическую емкостную
сложность. Именно асимптотическая
сложность алгоритма определяет в итоге
размер задач, которые можно решить
этим алгоритмом.
Необходимо точно определить модель
вычислительного устройства, используемого
для реализации алгоритмов и условиться, что
понимать под элементарным шагом
вычисления. К сожалению, нет такой
вычислительной модели, которая была бы
хороша во всех ситуациях. Примерами
вычислительных моделей могут служить:
1) машина с произвольным доступом к памяти,
2) машина с произвольным доступом к памяти и
хранимой программой,
3) машина Тьюринга,
4) машина с языком высокого уровня.
Одной из наиболее часто используемых вычислительных
моделей является машина с произвольным доступом к
памяти или, иначе, равнодоступная адресная машина
(Random-Access Machine – RAM). Это модель
обобщенной однопроцессорной машины. В этой модели
команды процессора выполняются последовательно
(одновременно выполняемые операции отсутствуют).
Набор команд такой машины содержит только те
команды, которые обычно можно найти в реальных
компьютерах:
- арифметические команды (сложение, вычитание,
умножение, деление, вычисление остатка деления,
приближение действительного числа ближайшим
меньшим или ближайшим большим целым),
- команды перемещения данных (загрузка, занесение в
память, копирование),
- управляющие команды (условное и безусловное
ветвление, вызов подпрограммы и возврат из нее).
Для выполнения каждой такой инструкции требуется
определенный фиксированный промежуток времени.
Двумя важными мерами сложности
алгоритма являются временная и
емкостная сложности, рассматриваемые
как функции размера входа. Если при
данном размере в качестве меры
сложности берется наибольшая из
сложностей (по всем входам этого
размера), то она называется сложностью в
худшем случае. Если в качестве меры
сложности берется «средняя» сложность
по всем входам данного размера, то она
называется средней (или усредненной)
сложностью.
Временная сложность (асимптотическая
временная сложность) в худшем случае
RAM-программы – это функция f(n),
равная наибольшей (по всем входам
размера n) из сумм времен, затраченных
на каждую сработавшую команду.
Временная сложность (асимптотическая
временная сложность) в среднем – это
среднее, взятое по всем входам размера
n, тех же самых сумм. Такие же понятия
определяются для емкости памяти.
3. Нахождение различий между
лучшим, средним и худшим
случаем
При анализе алгоритма выбор входных данных
может существенно повлиять на его выполнение.
Поэтому для полноценного анализа алгоритма
нужно найти такие данные, которые
обеспечивают как самое быстрое, так и самое
медленное выполнение алгоритма. Кроме того,
необходимо оценивать и среднюю
эффективность алгоритма на всех возможных
наборах данных.
Наилучшим случаем для алгоритма
является такой набор данных, на котором
алгоритм выполняется за минимальное
время. Такой набор данных представляет
собой комбинацию значений, на которой
алгоритм выполняет меньше всего
действий. Если мы исследуем алгоритм
поиска, то набор данных является
наилучшим, если искомое значение
(обычно называемое целевым значением
или ключом) записано в первой
проверяемой алгоритмом ячейке. Такому
алгоритму, вне зависимости от его
сложности, потребуется одно сравнение.
Анализ наихудшего случая чрезвычайно
важен, поскольку он позволяет представить
максимальное время работы алгоритма. При
анализе наихудшего случая необходимо
найти входные данные, на которых алгоритм
будет выполнять больше всего работы. Для
алгоритма поиска подобные входные данные
– это список, в котором искомый ключ
окажется последним из рассматриваемых
или вообще отсутствует. Анализ наихудшего
случая дает верхние оценки для времени
работы частей нашей программы в
зависимости от выбранных алгоритмов.
Анализ среднего случая является самым
сложным, поскольку он требует учета
множества разнообразных деталей. В основе
анализа лежит определение различных групп,
на которые следует разбить возможные
входные наборы данных. На втором шаге
определяется вероятность, с которой входной
набор данных принадлежит каждой группе. На
третьем шаге подсчитывается время работы
алгоритма на данных из каждой группы. Время
работы алгоритма на всех входных данных
одной группы должно быть одинаковым, в
противном случае группу следует подразбить.
Очевидно, что наиболее часто основное внимание уделяется
определению только времени работы в наихудшем случае,
т.е. максимальном времени работы из всех входных данных
размера n. Тому есть три причины.
• Время работы алгоритма в наихудшем случае – это верхний
предел этой величины для любых входных данных.
Располагая этим значением, мы точно знаем, что для
выполнения алгоритма не потребуется большее количество
времени. Не нужно будет делать каких-то сложных
предположений о времени работы и надеяться, что на
самом деле эта величина не будет превышена.
• В некоторых алгоритмах наихудший случай встречается
достаточно часто. Например, если в базе данных
происходит поиск информации, то наихудшему случаю
соответствует ситуация, когда нужная информация в базе
данных отсутствует. В некоторых поисковых приложениях
поиск отсутствующей информации может происходить
довольно часто.
• Характер поведения «усредненного» времени работы часто
ничем не лучше поведения времени работы для
наихудшего случая.
Кроме того, при анализе усредненного времени
работы возникает одна проблема, которая
заключается в том, что не всегда очевидно,
какие входные данные для данной задачи
будут «усредненными». Часто делается
предположение, что все наборы входных
параметров одного и того же объема
встречаются с одинаковой вероятностью. На
практике это предположение может не
соблюдаться, однако иногда можно
применять рандомизированные алгоритмы, в
которых используется случайный выбор, и
это позволяет провести вероятностный
анализ.
4. O-нотация
Важным оказывается скорость роста этого числа при
возрастании объема входных данных. Она называется
скоростью роста алгоритма.
Скорость роста определяется старшим, доминирующим
членом формулы, описывающей сложность алгоритма.
Поэтому можно пренебречь младшими членами,
которые растут медленнее. Отбросив, все младшие
члены, мы получаем то, что называется порядком
функции или алгоритма, скоростью роста сложности
которого она является. Алгоритмы можно сгруппировать
по скорости роста их сложности. Мы вводим три
категории: алгоритмы, сложность которых растет по
крайней мере так же быстро, как данная функция;
алгоритмы, сложность которых растет с той же
скоростью, и алгоритмы, сложность которых растет
медленнее, чем эта функция.
Класс функций, растущих по крайней мере так же быстро,
как f, обозначают через Ω(f) (читается «омега большое»).
Функция g принадлежит этому классу, если при всех
значениях аргумента n, больших некоторого порога n0,
значение g(п) > cf(n) для некоторого положительного
числа c. Можно считать, что класс Ω(f) задается
указанием свой нижней границы: все функции из него
растут по крайней мере так же быстро, как f.
На другом конце спектра находится класс O(f) (читается «о
большое»). Этот класс состоит из функций, растущих не
быстрее f. Функция f образует верхнюю границу для
класса O(f). С формальной точки зрения функция g
принадлежит классу O(f), если g(п) < cf(n) для всех n,
больших некоторого порога n0, и для некоторой
положительной константы c. Этот класс чрезвычайно
важен для анализа алгоритмов: при исследовании двух
алгоритмов, нас будет интересовать, принадлежит ли
сложность первого из них классу «о большое» от
сложности второго. Если это так, то, значит, второй
алгоритм не лучше первого решает поставленную задачу.
Через Θ(f) (читается «тета большое»)
обозначают класс функций, растущих с
той же скоростью, что и f. С формальной
точки зрения этот класс представляет
собой пересечение двух предыдущих
классов:
Θ(f) = Ω(f) ∩ O(f).
Каждый из классов Ω(f), O(f) и Θ(f) является
множеством, и поэтому имеет смысл
выражение «g – элемент этого
множества». В анализе, однако, нередко
пишут, скажем, g = O(f), что на самом деле
означает g ∈ O(f).
Верхняя асимптотическая граница,
предоставляемая O-обозначениями, может
описывать асимптотическое поведение функции
с разной точностью. Граница 2n2 = O(n2) дает
правильное представление об асимптотическом
поведении функции, а граница 2n = O(n2) его не
обеспечивает. Для обозначения того, что
верхняя граница не является асимптотически
точной оценкой функции, применяются oобозначения (читается «о маленькое»).
Формально функция g принадлежит классу o(f),
если для любой положительной константы c
существует такое положительное n0, что
g(п) < cf(n) для всех n ≥ n0. Например: 2n = o(n2),
но 2n 2 ≠ o (n2).
По аналогии, ω-обозначения соотносятся с
Ω-обозначениями так же, как oобозначения с O-обозначениями. С
помощью ω-обозначений указывается
нижний предел, не являющийся
асимптотически точной оценкой. Функция
g принадлежит классу ω(f) (читается
«омега маленькое»), если для любой
положительной константы c существует
такое положительное n0, что при всех
значениях аргумента n ≥ n0, значение
g(п) > cf(n).

More Related Content

What's hot

presentation Algoritm
presentation Algoritmpresentation Algoritm
presentation Algoritmklochkova
 
курсовой проект
курсовой проекткурсовой проект
курсовой проектGulnaz Shakirova
 
криптографические методы как часть общей защиты информации
криптографические методы как часть общей защиты информациикриптографические методы как часть общей защиты информации
криптографические методы как часть общей защиты информацииtrenders
 
Тест-дизайн в тестировании ПО. Задача "Треугольник"
Тест-дизайн в тестировании ПО. Задача "Треугольник"Тест-дизайн в тестировании ПО. Задача "Треугольник"
Тест-дизайн в тестировании ПО. Задача "Треугольник"OdessaQA
 

What's hot (7)

лекция 8
лекция 8лекция 8
лекция 8
 
Алгоритм
АлгоритмАлгоритм
Алгоритм
 
presentation Algoritm
presentation Algoritmpresentation Algoritm
presentation Algoritm
 
курсовой проект
курсовой проекткурсовой проект
курсовой проект
 
криптографические методы как часть общей защиты информации
криптографические методы как часть общей защиты информациикриптографические методы как часть общей защиты информации
криптографические методы как часть общей защиты информации
 
лекция 7
лекция 7лекция 7
лекция 7
 
Тест-дизайн в тестировании ПО. Задача "Треугольник"
Тест-дизайн в тестировании ПО. Задача "Треугольник"Тест-дизайн в тестировании ПО. Задача "Треугольник"
Тест-дизайн в тестировании ПО. Задача "Треугольник"
 

Viewers also liked

2628[1] VISA REQUIREMENTS
2628[1] VISA REQUIREMENTS2628[1] VISA REQUIREMENTS
2628[1] VISA REQUIREMENTSJessy Hermoza
 
Dialnet republicanismo y-teoriadelgobiernophilippettitentrev-3154702 (1)
Dialnet republicanismo y-teoriadelgobiernophilippettitentrev-3154702 (1)Dialnet republicanismo y-teoriadelgobiernophilippettitentrev-3154702 (1)
Dialnet republicanismo y-teoriadelgobiernophilippettitentrev-3154702 (1)Cesar Fernandez
 
Mohammad Kashif Wasi - An IT Expert
Mohammad Kashif Wasi - An  IT ExpertMohammad Kashif Wasi - An  IT Expert
Mohammad Kashif Wasi - An IT Expertgeofferymiles
 
Tru presentation 3-appendix slides
Tru presentation 3-appendix slidesTru presentation 3-appendix slides
Tru presentation 3-appendix slidesAlice Yu
 
Tuberculosis equipo efren
Tuberculosis equipo efrenTuberculosis equipo efren
Tuberculosis equipo efrenMiguel Figueroa
 
Model Cartoon Answer (lesson resource)
Model Cartoon Answer (lesson resource)Model Cartoon Answer (lesson resource)
Model Cartoon Answer (lesson resource)mrgowneyhedges
 

Viewers also liked (12)

Kupalle
KupalleKupalle
Kupalle
 
Recursos Perifericos
Recursos PerifericosRecursos Perifericos
Recursos Perifericos
 
2628[1] VISA REQUIREMENTS
2628[1] VISA REQUIREMENTS2628[1] VISA REQUIREMENTS
2628[1] VISA REQUIREMENTS
 
Dialnet republicanismo y-teoriadelgobiernophilippettitentrev-3154702 (1)
Dialnet republicanismo y-teoriadelgobiernophilippettitentrev-3154702 (1)Dialnet republicanismo y-teoriadelgobiernophilippettitentrev-3154702 (1)
Dialnet republicanismo y-teoriadelgobiernophilippettitentrev-3154702 (1)
 
SignWriting Stack 2015
SignWriting Stack 2015SignWriting Stack 2015
SignWriting Stack 2015
 
Mohammad Kashif Wasi - An IT Expert
Mohammad Kashif Wasi - An  IT ExpertMohammad Kashif Wasi - An  IT Expert
Mohammad Kashif Wasi - An IT Expert
 
Tru presentation 3-appendix slides
Tru presentation 3-appendix slidesTru presentation 3-appendix slides
Tru presentation 3-appendix slides
 
Tuberculosis equipo efren
Tuberculosis equipo efrenTuberculosis equipo efren
Tuberculosis equipo efren
 
A1GP_Easter_Creek
A1GP_Easter_CreekA1GP_Easter_Creek
A1GP_Easter_Creek
 
Proactiv
ProactivProactiv
Proactiv
 
Model Cartoon Answer (lesson resource)
Model Cartoon Answer (lesson resource)Model Cartoon Answer (lesson resource)
Model Cartoon Answer (lesson resource)
 
Ethnic Wear
Ethnic WearEthnic Wear
Ethnic Wear
 

Similar to лекция 5

основы алгоритмизации
основы алгоритмизацииосновы алгоритмизации
основы алгоритмизацииRania Fazliachmetova
 
Алгоритмы
АлгоритмыАлгоритмы
АлгоритмыSchool 242
 
Лекция 1. Анализ эффективности алгоритмов
Лекция 1. Анализ эффективности алгоритмовЛекция 1. Анализ эффективности алгоритмов
Лекция 1. Анализ эффективности алгоритмовMikhail Kurnosov
 
Конструирование алгоритмов
Конструирование алгоритмовКонструирование алгоритмов
Конструирование алгоритмовAndrey Dolinin
 
Алгоритмизация
АлгоритмизацияАлгоритмизация
АлгоритмизацияLebedeva_Zoya
 
Алгоритмы поиска и сортировки
Алгоритмы  поиска и сортировкиАлгоритмы  поиска и сортировки
Алгоритмы поиска и сортировкиUnguryan Vitaliy
 
Презентация "Алгоритмы"
Презентация "Алгоритмы"Презентация "Алгоритмы"
Презентация "Алгоритмы"Johnny_Lean
 
Вечный вопрос измерения времени
Вечный вопрос измерения времениВечный вопрос измерения времени
Вечный вопрос измерения времениTatyanazaxarova
 
практика 7
практика 7практика 7
практика 7student_kai
 
Лекция 11 Приближенные алгоритмы
Лекция 11 Приближенные алгоритмыЛекция 11 Приближенные алгоритмы
Лекция 11 Приближенные алгоритмыsimple_people
 
презентация лекции №3
презентация лекции №3презентация лекции №3
презентация лекции №3student_kai
 
тема множество для загрузки 2013
тема множество для загрузки 2013тема множество для загрузки 2013
тема множество для загрузки 2013AliyaAringazinova
 
обработка исключений в Java
обработка исключений в Javaобработка исключений в Java
обработка исключений в Javametaform
 

Similar to лекция 5 (20)

лекция 6
лекция 6лекция 6
лекция 6
 
85004
8500485004
85004
 
основы алгоритмизации
основы алгоритмизацииосновы алгоритмизации
основы алгоритмизации
 
Алгоритмы
АлгоритмыАлгоритмы
Алгоритмы
 
Лекция 1. Анализ эффективности алгоритмов
Лекция 1. Анализ эффективности алгоритмовЛекция 1. Анализ эффективности алгоритмов
Лекция 1. Анализ эффективности алгоритмов
 
Конструирование алгоритмов
Конструирование алгоритмовКонструирование алгоритмов
Конструирование алгоритмов
 
Алгоритмизация
АлгоритмизацияАлгоритмизация
Алгоритмизация
 
Алгоритмы поиска и сортировки
Алгоритмы  поиска и сортировкиАлгоритмы  поиска и сортировки
Алгоритмы поиска и сортировки
 
Презентация "Алгоритмы"
Презентация "Алгоритмы"Презентация "Алгоритмы"
Презентация "Алгоритмы"
 
Вечный вопрос измерения времени
Вечный вопрос измерения времениВечный вопрос измерения времени
Вечный вопрос измерения времени
 
практика 7
практика 7практика 7
практика 7
 
Algoritm
AlgoritmAlgoritm
Algoritm
 
л 2 11
л 2 11л 2 11
л 2 11
 
алгоритм
алгоритмалгоритм
алгоритм
 
Лекция 11 Приближенные алгоритмы
Лекция 11 Приближенные алгоритмыЛекция 11 Приближенные алгоритмы
Лекция 11 Приближенные алгоритмы
 
презентация лекции №3
презентация лекции №3презентация лекции №3
презентация лекции №3
 
пр 15.docx
пр 15.docxпр 15.docx
пр 15.docx
 
тема множество для загрузки 2013
тема множество для загрузки 2013тема множество для загрузки 2013
тема множество для загрузки 2013
 
обработка исключений в Java
обработка исключений в Javaобработка исключений в Java
обработка исключений в Java
 
прак 15.docx
прак 15.docxпрак 15.docx
прак 15.docx
 

More from student_kai

презентация
презентацияпрезентация
презентацияstudent_kai
 
презентации продолжение банкета
презентации продолжение банкетапрезентации продолжение банкета
презентации продолжение банкетаstudent_kai
 
основы программирования на языке C
основы программирования на языке Cосновы программирования на языке C
основы программирования на языке Cstudent_kai
 
презентация курсовой работы
презентация курсовой работыпрезентация курсовой работы
презентация курсовой работыstudent_kai
 
лекция№34
лекция№34лекция№34
лекция№34student_kai
 
лекция№32
лекция№32лекция№32
лекция№32student_kai
 
лекция№33
лекция№33лекция№33
лекция№33student_kai
 
лекция№31
лекция№31лекция№31
лекция№31student_kai
 
лекция№30
лекция№30лекция№30
лекция№30student_kai
 
лекция№29
лекция№29лекция№29
лекция№29student_kai
 
лекция№28
лекция№28лекция№28
лекция№28student_kai
 
лекция№27
лекция№27лекция№27
лекция№27student_kai
 
лекция№26
лекция№26лекция№26
лекция№26student_kai
 
лекция№25
лекция№25лекция№25
лекция№25student_kai
 
лекция№25
лекция№25лекция№25
лекция№25student_kai
 
лекция№24
лекция№24лекция№24
лекция№24student_kai
 
лекция№23
лекция№23лекция№23
лекция№23student_kai
 
лекция№22
лекция№22лекция№22
лекция№22student_kai
 
лекция№21
лекция№21лекция№21
лекция№21student_kai
 
лекция№20
лекция№20лекция№20
лекция№20student_kai
 

More from student_kai (20)

презентация
презентацияпрезентация
презентация
 
презентации продолжение банкета
презентации продолжение банкетапрезентации продолжение банкета
презентации продолжение банкета
 
основы программирования на языке C
основы программирования на языке Cосновы программирования на языке C
основы программирования на языке C
 
презентация курсовой работы
презентация курсовой работыпрезентация курсовой работы
презентация курсовой работы
 
лекция№34
лекция№34лекция№34
лекция№34
 
лекция№32
лекция№32лекция№32
лекция№32
 
лекция№33
лекция№33лекция№33
лекция№33
 
лекция№31
лекция№31лекция№31
лекция№31
 
лекция№30
лекция№30лекция№30
лекция№30
 
лекция№29
лекция№29лекция№29
лекция№29
 
лекция№28
лекция№28лекция№28
лекция№28
 
лекция№27
лекция№27лекция№27
лекция№27
 
лекция№26
лекция№26лекция№26
лекция№26
 
лекция№25
лекция№25лекция№25
лекция№25
 
лекция№25
лекция№25лекция№25
лекция№25
 
лекция№24
лекция№24лекция№24
лекция№24
 
лекция№23
лекция№23лекция№23
лекция№23
 
лекция№22
лекция№22лекция№22
лекция№22
 
лекция№21
лекция№21лекция№21
лекция№21
 
лекция№20
лекция№20лекция№20
лекция№20
 

лекция 5

  • 1. Основы анализа алгоритмов (продолжение) 2. Асимптотический анализ максимальной и средней сложности
  • 2. Анализ алгоритма заключается в том, чтобы предсказать требуемые для его выполнения ресурсы. Чаще всего исследователей интересует порядок роста необходимых для решения задачи времени и емкости памяти при увеличении входных данных. С каждой конкретной задачей можно связать некоторое число, называемое ее размером, которое выражает меру количества входных данных.
  • 3. Время, затрачиваемое алгоритмом, как функция размера задачи, называется временной сложностью этого алгоритма. Поведение этой сложности в пределе при увеличении размера задачи называется асимптотической временной сложностью. Аналогично можно определить емкостную сложность и асимптотическую емкостную сложность. Именно асимптотическая сложность алгоритма определяет в итоге размер задач, которые можно решить этим алгоритмом.
  • 4. Необходимо точно определить модель вычислительного устройства, используемого для реализации алгоритмов и условиться, что понимать под элементарным шагом вычисления. К сожалению, нет такой вычислительной модели, которая была бы хороша во всех ситуациях. Примерами вычислительных моделей могут служить: 1) машина с произвольным доступом к памяти, 2) машина с произвольным доступом к памяти и хранимой программой, 3) машина Тьюринга, 4) машина с языком высокого уровня.
  • 5. Одной из наиболее часто используемых вычислительных моделей является машина с произвольным доступом к памяти или, иначе, равнодоступная адресная машина (Random-Access Machine – RAM). Это модель обобщенной однопроцессорной машины. В этой модели команды процессора выполняются последовательно (одновременно выполняемые операции отсутствуют). Набор команд такой машины содержит только те команды, которые обычно можно найти в реальных компьютерах: - арифметические команды (сложение, вычитание, умножение, деление, вычисление остатка деления, приближение действительного числа ближайшим меньшим или ближайшим большим целым), - команды перемещения данных (загрузка, занесение в память, копирование), - управляющие команды (условное и безусловное ветвление, вызов подпрограммы и возврат из нее). Для выполнения каждой такой инструкции требуется определенный фиксированный промежуток времени.
  • 6. Двумя важными мерами сложности алгоритма являются временная и емкостная сложности, рассматриваемые как функции размера входа. Если при данном размере в качестве меры сложности берется наибольшая из сложностей (по всем входам этого размера), то она называется сложностью в худшем случае. Если в качестве меры сложности берется «средняя» сложность по всем входам данного размера, то она называется средней (или усредненной) сложностью.
  • 7. Временная сложность (асимптотическая временная сложность) в худшем случае RAM-программы – это функция f(n), равная наибольшей (по всем входам размера n) из сумм времен, затраченных на каждую сработавшую команду. Временная сложность (асимптотическая временная сложность) в среднем – это среднее, взятое по всем входам размера n, тех же самых сумм. Такие же понятия определяются для емкости памяти.
  • 8. 3. Нахождение различий между лучшим, средним и худшим случаем При анализе алгоритма выбор входных данных может существенно повлиять на его выполнение. Поэтому для полноценного анализа алгоритма нужно найти такие данные, которые обеспечивают как самое быстрое, так и самое медленное выполнение алгоритма. Кроме того, необходимо оценивать и среднюю эффективность алгоритма на всех возможных наборах данных.
  • 9. Наилучшим случаем для алгоритма является такой набор данных, на котором алгоритм выполняется за минимальное время. Такой набор данных представляет собой комбинацию значений, на которой алгоритм выполняет меньше всего действий. Если мы исследуем алгоритм поиска, то набор данных является наилучшим, если искомое значение (обычно называемое целевым значением или ключом) записано в первой проверяемой алгоритмом ячейке. Такому алгоритму, вне зависимости от его сложности, потребуется одно сравнение.
  • 10. Анализ наихудшего случая чрезвычайно важен, поскольку он позволяет представить максимальное время работы алгоритма. При анализе наихудшего случая необходимо найти входные данные, на которых алгоритм будет выполнять больше всего работы. Для алгоритма поиска подобные входные данные – это список, в котором искомый ключ окажется последним из рассматриваемых или вообще отсутствует. Анализ наихудшего случая дает верхние оценки для времени работы частей нашей программы в зависимости от выбранных алгоритмов.
  • 11. Анализ среднего случая является самым сложным, поскольку он требует учета множества разнообразных деталей. В основе анализа лежит определение различных групп, на которые следует разбить возможные входные наборы данных. На втором шаге определяется вероятность, с которой входной набор данных принадлежит каждой группе. На третьем шаге подсчитывается время работы алгоритма на данных из каждой группы. Время работы алгоритма на всех входных данных одной группы должно быть одинаковым, в противном случае группу следует подразбить.
  • 12. Очевидно, что наиболее часто основное внимание уделяется определению только времени работы в наихудшем случае, т.е. максимальном времени работы из всех входных данных размера n. Тому есть три причины. • Время работы алгоритма в наихудшем случае – это верхний предел этой величины для любых входных данных. Располагая этим значением, мы точно знаем, что для выполнения алгоритма не потребуется большее количество времени. Не нужно будет делать каких-то сложных предположений о времени работы и надеяться, что на самом деле эта величина не будет превышена. • В некоторых алгоритмах наихудший случай встречается достаточно часто. Например, если в базе данных происходит поиск информации, то наихудшему случаю соответствует ситуация, когда нужная информация в базе данных отсутствует. В некоторых поисковых приложениях поиск отсутствующей информации может происходить довольно часто. • Характер поведения «усредненного» времени работы часто ничем не лучше поведения времени работы для наихудшего случая.
  • 13. Кроме того, при анализе усредненного времени работы возникает одна проблема, которая заключается в том, что не всегда очевидно, какие входные данные для данной задачи будут «усредненными». Часто делается предположение, что все наборы входных параметров одного и того же объема встречаются с одинаковой вероятностью. На практике это предположение может не соблюдаться, однако иногда можно применять рандомизированные алгоритмы, в которых используется случайный выбор, и это позволяет провести вероятностный анализ.
  • 14. 4. O-нотация Важным оказывается скорость роста этого числа при возрастании объема входных данных. Она называется скоростью роста алгоритма. Скорость роста определяется старшим, доминирующим членом формулы, описывающей сложность алгоритма. Поэтому можно пренебречь младшими членами, которые растут медленнее. Отбросив, все младшие члены, мы получаем то, что называется порядком функции или алгоритма, скоростью роста сложности которого она является. Алгоритмы можно сгруппировать по скорости роста их сложности. Мы вводим три категории: алгоритмы, сложность которых растет по крайней мере так же быстро, как данная функция; алгоритмы, сложность которых растет с той же скоростью, и алгоритмы, сложность которых растет медленнее, чем эта функция.
  • 15. Класс функций, растущих по крайней мере так же быстро, как f, обозначают через Ω(f) (читается «омега большое»). Функция g принадлежит этому классу, если при всех значениях аргумента n, больших некоторого порога n0, значение g(п) > cf(n) для некоторого положительного числа c. Можно считать, что класс Ω(f) задается указанием свой нижней границы: все функции из него растут по крайней мере так же быстро, как f. На другом конце спектра находится класс O(f) (читается «о большое»). Этот класс состоит из функций, растущих не быстрее f. Функция f образует верхнюю границу для класса O(f). С формальной точки зрения функция g принадлежит классу O(f), если g(п) < cf(n) для всех n, больших некоторого порога n0, и для некоторой положительной константы c. Этот класс чрезвычайно важен для анализа алгоритмов: при исследовании двух алгоритмов, нас будет интересовать, принадлежит ли сложность первого из них классу «о большое» от сложности второго. Если это так, то, значит, второй алгоритм не лучше первого решает поставленную задачу.
  • 16. Через Θ(f) (читается «тета большое») обозначают класс функций, растущих с той же скоростью, что и f. С формальной точки зрения этот класс представляет собой пересечение двух предыдущих классов: Θ(f) = Ω(f) ∩ O(f). Каждый из классов Ω(f), O(f) и Θ(f) является множеством, и поэтому имеет смысл выражение «g – элемент этого множества». В анализе, однако, нередко пишут, скажем, g = O(f), что на самом деле означает g ∈ O(f).
  • 17. Верхняя асимптотическая граница, предоставляемая O-обозначениями, может описывать асимптотическое поведение функции с разной точностью. Граница 2n2 = O(n2) дает правильное представление об асимптотическом поведении функции, а граница 2n = O(n2) его не обеспечивает. Для обозначения того, что верхняя граница не является асимптотически точной оценкой функции, применяются oобозначения (читается «о маленькое»). Формально функция g принадлежит классу o(f), если для любой положительной константы c существует такое положительное n0, что g(п) < cf(n) для всех n ≥ n0. Например: 2n = o(n2), но 2n 2 ≠ o (n2).
  • 18. По аналогии, ω-обозначения соотносятся с Ω-обозначениями так же, как oобозначения с O-обозначениями. С помощью ω-обозначений указывается нижний предел, не являющийся асимптотически точной оценкой. Функция g принадлежит классу ω(f) (читается «омега маленькое»), если для любой положительной константы c существует такое положительное n0, что при всех значениях аргумента n ≥ n0, значение g(п) > cf(n).