Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Повышение точности вычислений путем оптимизации алгоритма





Повышение точности вычислений может быть достигнуто существенным снижением количества вычислительных процедур. Это зависит от структуры алгоритма программы. Мы уже видели, что, применяя ряды, например, программа должна записываться как цикл:

, и так далее.

Кроме того, напомним, что в процессе перевода числа из одного типа счисления в другое тоже совершаются циклические процедуры. Например:

.

Если какое-нибудь значение записано в виде суммы, для получения которой следует организовать цикл с переменной i=N, его зачастую можно упростить. В результате можно существенно сократить количество вычислительных операций и избежать накопления погрешностей, а также сократить время и тем самым сэкономить ресурсы памяти. В качестве примера приведем следующие замещающие вычисления:

1) ; 4) ;

2) ; 5)

3) ; 6) .

Например, если А2=111112, то А10=24+1-1=25-1=31. Видим, насколько сократился объем вычислений, а соответственно повышается и точность вычислений. Очень существенна такая замена, если параметр цикла (i), т.е. число N – очень велико.

П р и м е р. Найти эквивалентное представление без помощи сумм для следующих выражений:

1) ;

2) ;

3) ;

4) ;

5) .

Таким образом алгоритм цикла заменяется одношаговым оператором.

 

Анализ алгоритмов

 

Одну и ту же задачу можно решить различными алгоритмами. Эффективность работы каждого из них оценивается различными критериями или характеристиками. Но прежде чем оценивать эффективность алгоритма, нужно доказать, что он правильно решает задачу. В противном случае вопрос об эффективности не имеет смысла. Если алгоритм решает поставленную задачу, то можно посмотреть, насколько он эффективен.

Наиболее естественным оценить эффективность алгоритма было бы фиксировать время его работы. Но трудно признать этот критерий за оценочный, так как на его величину оказывает влияние степень совершенства конструкции ЭВМ. Другим критерием эффективности является фактическое количество операций алгоритма. Число операций определяет относительное время выполнения алгоритма.

При анализе эффективности алгоритмов чаще всего используется условная характеристика «время работы алгоритма» - это число элементарных шагов, которые он выполняет. Остается определиться – что подразумевать под элементарным шагом. Наиболее целесообразно исходить из того, сколько вычислительных ресурсов требует решение одной и той же задачи при использовании сравниваемых алгоритмов (время работы, память).

Решение вопроса о том, что считать, состоит из двух этапов. На первом этапе выбирается значимая операция или группа операций, а на втором - какие из этих операций содержатся в теле алгоритма, а какие составляют накладные расходы или уходят на регистрацию и учет данных. В качестве значимых обычно выступают операции двух типов: сравнения и арифметические операции:

1) аддитивные операторы – сложения, вычитания, увеличение или уменьшение счетчика;

2) мультипликативные операторы – умножение, деление, взятие остатка по модулю.

Чтобы продемонстрировать один достаточно простой прием анализа алгоритмов рассмотрим следующий пример.

П р и м е р. Провести сравнение возможных алгоритмов вычисления степенного многочлена

.

Р е ш е н и е. Рассмотрим процесс вычисления многочлена по двум возможным схемам.

1) Представим порядок вычисления следующим образом:

.

Если обозначить через Сi количество значимых операций, то для первой схемы получаем

;

;

;

.

С учетом наличия трех операций сложения получим итоговое значение количества значимых операций

.

2) Введем вспомогательную процедуру

.

Тогда порядок вычисления степенного многочлена можно представить так:

.

Подсчитаем поэтапно «стоимость» вычислительных процедур:

;

;

;

;

.

С учетом операций сложения получим:

.

В ы в о д. Стоимость второго алгоритма вычисления степенного многочлена «дешевле» первого на три единицы, т.е. возможно снижение «стоимости» вычисления почти на 30%. Очевидно, что снижение сложности вычислений по мере роста степени многочлена будет тем большим, чем выше максимальная степень многочлена.

В составе алгоритма достаточно часто применяются циклы. Если стоимость однократного вычисления в цикле составляет С, а цикл предполагает повторение вычислений т раз, то общая стоимость вычислений дает вклад в размере С∙т в общее число операций. Если цикл реализуется с переменным значением счетчика, то множитель т будет записан как сумма

.

Если алгоритм вычисления представлен в виде текста программы, то можно ввести понятие «стоимости» Сi в удобной для анализа размерности (например, число символов, число операций вычисления, число ячеек памяти и т.д.). Безусловным исходным объектом для анализа в этом случае будет построчный текст программы.

В качестве примера рассмотрим программу сортировки массива цифр, например, по возрастающей его элементов. Как известно, предложено множество способов реализации этой задачи, имеющей большое практическое применение в области прикладных задач. Выберем метод вставок. Суть его в следующем.

Предположим, имеем неорганизованный массив чисел . Говорят, что п=6 – длина массива. Обозначим эту величину через length(A). Последовательность сортировки представлена на рисунке 2.7.

Рисунок 2.7 – Алгоритм сортировки вставкой

 

В таблице 2.4 представлена программа Inserthion-sort(A) сортировки методом вставки.

 

Таблица 2.4 – Текст программы

  Содержание процедуры Стоимость Число раз
  For j→2 to length(A) C1 n
  Do key→A(j) C2 n-1
  Добавить A(j) к отсортированной части А(1, j-1)    
  i→j-1 C4 n-1
  While i>0 and A(i)>key C5
  Do A(i+1)→A(i) C6
  i→j-1 C7
  A(i+1)→key C8 n-1

 

Для каждого j от 2 до п подсчитаем сколько раз будет исполнена строка 5, и обозначим это число через tj (строки внутри цикла выполняются на один раз меньше, чем проверка, так как последняя проверка выводит из цикла). Строка стоимостью С, повторенная т раз, дает вклад (С∙т) в общее число операций. Сложив вклады всех строк, получим:

Предположим, что введен уже отсортированный массив. Тогда цикл в строке 5 завершается после первой же проверки (так как A(j)≤key при i=j-1), поэтому все tj равны единице, и общее время есть:

.

Таким образом, в наиболее благоприятном случае (имеем готовый отсортированный массив) время Т(п), необходимое для сортировки массива размера п, является линейной функцией от п, т.е.

,

где а,b – константы, зависящие от стоимости (С1, С2, …,С8).

Если же массив находится в наихудшем состоянии (отсортирован по убывающей), то время его работы будет максимальным. Каждый элемент A(j) придется сравнивать со всеми элементами А(1), А(2), …, А(j-1). При этом tj=j. Поэтому в худшем случае время работы вычислений равно:

 

Теперь функция Т(п) – квадратичная, т.е. имеет вид:

.

Итак, на примере сортировки мы получили

или .

Каково же реальное время выполнения процедуры? Ответ на этот вопрос требует привлечения вероятности, так как массив (первичная информация) может находиться в промежуточном состоянии. Поэтому вводится понятие наихудшего случая, наилучшего случая и среднего случая.

Так как процедура сортировки массива может быть выполнена рядом способов, интересно привести сравнительные данные по времени выполнения алгоритмов по другим способам. Например,

1) сортировка методом пузырька дает время

;

2) сортировка Шелла

;

3) пирамидальная сортировка

.

Приведенные сведения об анализе алгоритмов дают представление о возможностях в области технологии программирования, которые позволяют разработать наиболее рациональный алгоритм, а соответственно повысить эффективность вычислительного процесса в целом.

 

 

Список рекомендуемой литературы

1. Шикин Е.В., Шикина Г.Е. Исследование операций: Учебник. - М.: ТК Велби, изд-во Проспект, 2008.- 280 с.

2. Хедми А.Таха. Введение в исследование операций: Пер.с англ. – М.: Издательский дом «Вильямс», 2007. – 912 с.

3. Острейковский В.А. Информатика: Учебн. для вузов. М.: Высш.шк.,2001. – 511 с.

4. Кормен Т., Лейзерсон Ч., Ривест Р. Алгоритмы: построение и анализ: Пер. с англ. – М.: МЦНМО: Бином. Лаборатория знаний. 2004. – 960 с.

5. Беллман Р. Динамическое программирование. — М.: Изд-во иностранной литературы, 1960.

6. Кормен, Т., Лейзерсон, Ч., Ривест, Р., Штайн, К. Глава 15. Динамическое программирование // Алгоритмы: построение и анализ = Introduction to Algorithms / Под ред. И. В. Красикова. — 2-е изд. — М.: Вильямс, 2005. — 1296 с. — ISBN 5-8459-0857-4

7. Акулич И.Л. Математическое программирование в примерах и задачах.- М: Высшая школа.1986.-318с.

8. Лунгу К. Н. Линейное программирование. Руководство к решению задач. - М.: ФИЗМАТЛИТ, 2005. - 128 с.

 

 

Учебное издание

Кадиев Александр Мазаевич

Казанов Юрий Константинович

Date: 2016-07-18; view: 867; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.007 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию