VB, MS Access, VC++, Delphi, Builder C++ принципы(технология), алгоритмы программирования
| Категория реферата: Рефераты по информатике, программированию
| Теги реферата: презентация дипломной работы, отчет по производственной практике
| Добавил(а) на сайт: Памфил.
Предыдущая страница реферата | 6 7 8 9 10 11 12 13 14 15 16 | Следующая страница реферата
Если дверь остается закрытой, то:
Повернуть ключ в другую сторону
Повернуть ручку двери
И т.д.
Этот фрагмент «кода» отвечает только за открывание двери; при этом даже не
проверяется, какая дверь открывается. Если дверь заело или в машине
установлена противоугонная система, то алгоритм открывания двери может быть
достаточно сложным.
Формализацией алгоритмов занимаются уже тысячи лет. За 300 лет до н.э.
Евклид написал алгоритмы деления углов пополам, проверки равенства
треугольников и решения других геометрических задач. Он начал с небольшого
словаря аксиом, таких как «параллельные линии не пересекаются» и построил
на их основе алгоритмы для решения сложных задач.
Формализованные алгоритмы такого типа хорошо подходят для задач математики, где должна быть доказана истинность какого-либо положения или возможность
выполнения каких-то действий, скорость же исполнения алгоритма не важна.
Для выполнения реальных задач, связанных с выполнением инструкций, например
задачи сортировки на компьютере записей о миллионе покупателей, эффективность выполнения становится важной частью постановки задачи.
Анализ скорости выполнения алгоритмов
Есть несколько способов оценки сложности алгоритмов. Программисты обычно сосредотачивают внимание на скорости алгоритма, но важны и другие требования, например, к размеру памяти, свободному месту на диске или другим ресурсам. От быстрого алгоритма может быть мало толку, если под него требуется больше памяти, чем установлено на компьютере.
Пространство — время
Многие алгоритмы предоставляют выбор между скоростью выполнения и используемыми программой ресурсами. Задача может выполняться быстрее, используя больше памяти, или наоборот, медленнее, заняв меньший объем памяти.
===========2
Хорошим примером в данном случае может служить алгоритм нахождения
кратчайшего пути. Задав карту улиц города в виде сети, можно написать
алгоритм, вычисляющий кратчайшее расстояние между любыми двумя точками в
этой сети. Вместо того чтобы каждый раз заново пересчитывать кратчайшее
расстояние между двумя заданными точками, можно заранее просчитать его для
всех пар точек и сохранить результаты в таблице. Тогда, чтобы найти
кратчайшее расстояние для двух заданных точек, достаточно будет просто
взять готовое значение из таблицы.
При этом мы получим результат практически мгновенно, но это потребует
большого объема памяти. Карта улиц для большого города, такого как Бостон
или Денвер, может содержать сотни тысяч точек. Для такой сети таблица
кратчайших расстояний содержала бы более 10 миллиардов записей. В этом
случае выбор между временем исполнения и объемом требуемой памяти очевиден:
поставив дополнительные 10 гигабайт оперативной памяти, можно заставить
программу выполняться гораздо быстрее.
Из этой связи вытекает идея пространственно-временной сложности алгоритмов.
При этом подходе сложность алгоритма оценивается в терминах времени и
пространства, и находится компромисс между ними.
В этом материале основное внимание уделяется временной сложности, но мы
также постарались обратить внимание и на особые требования к объему памяти
для некоторых алгоритмов. Например, сортировка слиянием (mergesort), обсуждаемая в 9 главе, требует больше временной памяти. Другие алгоритмы, например пирамидальная сортировка (heapsort), которая также обсуждается в 9
главе, требует обычного объема памяти.
Оценка с точностью до порядка
При сравнении различных алгоритмов важно понимать, как сложность алгоритма
соотносится со сложностью решаемой задачи. При расчетах по одному алгоритму
сортировка тысячи чисел может занять 1 секунду, а сортировка миллиона — 10
секунд, в то время как расчеты по другому алгоритму могут потребовать 2 и 5
секунд соответственно. В этом случае нельзя однозначно сказать, какая из
двух программ лучше — это будет зависеть от исходных данных.
Различие производительности алгоритмов на задачах разной вычислительной
сложности часто более важно, чем просто скорость алгоритма. В
вышеприведенном случае, первый алгоритм быстрее сортирует короткие списки, а второй — длинные.
Производительность алгоритма можно оценить по порядку величины. Алгоритм
имеет сложность порядка O(f(N)) (произносится «О большое от F от N»), если
время выполнения алгоритма растет пропорционально функции f(N) с
увеличением размерности исходных данных N. Например, рассмотрим фрагмент
кода, сортирующий положительные числа:
For I = 1 To N
'Поиск наибольшего элемента в списке.
MaxValue = 0
For J = 1 to N
If Value(J) > MaxValue Then
MaxValue = Value(J)
MaxJ = J
End If
Next J
'Вывод наибольшего элемента на печать.
Print Format$(MaxJ) & ":" & Str$(MaxValue)
'Обнуление элемента для исключения его из дальнейшего поиска.
Value(MaxJ) = 0
Next I
===============3
Рекомендуем скачать другие рефераты по теме: доклад по химии, конспект зима.
Категории:
Предыдущая страница реферата | 6 7 8 9 10 11 12 13 14 15 16 | Следующая страница реферата