|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Нотация О-большого
«О-большое» обеспечивает хороший способ сравнения алгоритмов по времени выполнения. В асимптотическом анализе использование «О-большое», позволяет обратиться к показателю степени или самому доминирующему показателю. Самое важное свойство «О-большое» то, что оно позволяет игнорировать константы и степень низшего порядка. 500n3 + 10n2 + 17n + 121345 = O (n3) Пример 2 Использование «О-большое» В вышеупомянутом примере самый высокий показатель порядка в уравнении времени выполнения 500n3. Проигнорируем константу и степень низшего порядка в этом показателе и примем, что время выполнения O (n3). Большинство алгоритмов, с которыми приходится встречается, попадает в один из следующих классов. · O(1) – constant time · O(log(n)) – logarithmic time · O(n) – linear time · O(n log(n)) – "n-log-n" time · O(n2) – quadratic time · O(n3) – cubic time · O(2n) – exponential time Алгоритмы, у которых есть время выполнения O(n log(n)) очень хорошо применимы к большим проблемным экземплярам. Квадратные и кубические алгоритмы показывают однозначно худшую производительность, особенно для случаев, когда ввод становится большим. Наконец, экспоненциальные алгоритмы рекомендуется использовать только для очень маленьких вводов. Важно выразить логическое время выполнения с точки зрения физического времени, используя секунды, минуты, часы, и т.д получить понимание того, что действительно означают эти характеристики. Во-первых, давайте рассмотрим O(n log(n)) алгоритм, который занимает 1 секунду при вводе размера 1000.
Таблица 1 O(n log(n)) алгоритм В сравнении, вот квадратный алгоритм, который также занимает 1 секунду на вводе размера 1000.
Таблица 2 O (n2) алгоритм Для очень больших вводов размера десять миллионов, квадратный алгоритм становится полностью бесполезным. Даже для одного миллиона он уже может быть бесполезным: если, допустим рассматривается некоторая система банковской бухгалтерии, которая должна обновляться ежедневно. С другой стороны, квадратная производительность достаточно хороша при сравнении с экспоненциальным временем выполнения. Чтобы видеть насколько катастрофично экспоненциальное время выполнения, рассмотрим экспоненциальный алгоритм который занимает 1 секунду при вводе размера 10. Для этой ситуации получим приблизительно следующее время для больших экземпляров.
Таблица 3 O (2n) алгоритм Последнее число даже превышает возраст вселенной (приблизительно 15 x 109 годы), и алгоритм уже бесполезно при вводах размера 30. У нас только есть приемлемая производительность до размера 25 или около этого. Таким образом, в некотором смысле, экспоненциальный алгоритм почти столь же плох как никакой алгоритм вообще. К сожалению, есть некоторые известные вычислительные проблемы, которые, кажется, требуют экспоненциального времени выполнения. Обнаружение, Булева ли схема с n вводами могут когда-либо приводить к истине, поскольку вывод является одним из них: есть 2n возможные входные комбинации, и никак более нельзя упростить вычисление. Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.) |