Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЧМ в программировании. Справочник.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.29 Mб
Скачать
    1. Фибоначчиев поиск

Алгоритм предназначен для поиска аргумента K в таблице значений R1,R2,...,Rn, расположеных в порядке возрастания ключей: K1<K2<...<Kn.

Для удобства описания предполагается, что N+1 есть число Фибоначчи Fk+1. Подходящей начальной установкой данный метод можно сделать пригодным для любого N

1. [Начальная установка]. Установить i <=Fk, p<=Fk-1, q <= Fk-2. (В этом алгоритме p и q обозначают последовательные числа Фибоначчи.)

2. [Сравнение]. Если K<Ki, то перейти на F3; если K>Ki, то перейти на F4; если K=Ki, алгоритм заканчивается удачно.

3. [Уменьшение i ]. Если q=0, то алгоритм заканчивается неудачно. Если q<>0,то установить i<= i-q, заменить (p,q) на (q,p-q) и вернуться на F2.

4. [Уменьшение i ]. Если p=1, то алгоритм заканчивается неудачно. Если p<>1,то установить i<= i+q, p<=p-q, q<=q-p и вернуться на F2.

12 Задача выбора

Формулирование задачи. В заданном линейном списке целых чисел B={K1,K2,...,Kn} (могут быть и одинаковые) необходимо найти элемент, который был бы расположен на i-ой позиции, если бы список B упорядочить по убыванию элементов. Это задача выбора i-ого наибольшего значения. В частности, для i=1 задача эквивалентна поиску в B элемента с наибольшим значением, для i=2 - поиск элемента со вторым наибольшим значением и т.д. Особый интерес вызывает задача выбора i-ого элемента, i= an, 0 <a< 1 для некоторых значений a, например, выбор медианы при a=1/2.

Алгоритм поиска наибольшего значения легко меняется на алгоритм поиска наименьшего значения.

Все варианты задачи выбора развязываются легко, если список B полностью отсортированный; тогда задача сводится до взятия в нём необходимого элемента.

Для развязывания задачи выбора i-ого наибольшего элемента в списке B={K1,K2,...,Kn} модифицирован алгоритм быстрой сортировки. Список делится элементом K1 на подсписки B1и B2, такие, что когда K принадлежит B1, то K>=K1, а когда K принадлежит B2, то K<K1. Список B реорганизуется в список B1,<K1>,B2, в котором K1 находится ан j-ом месте. Если j=i, то необходимый элемент найден; если j>i, то i-ое наибольшее значение ищется с подсписке B1; если j<i, то (i-j)-ое наибольшее значение ищется с подсписке B2.

Алгоритм выбора. Алгоритм на базе быстрой сортировки довольно эффективный для его выполнения необходимо количество действий порядка О(n). По некоторым причинам он может стать неэффективным, вымогая для своей реализации количества действий порядка O(n*n). Неэффективность объясняется тем, что K1 делит список B на неравные подсписки B1 и B2. Для улучшения алгоритма необходимо уметь находить в списке B элемент M, который разделяет список почти поровну.

Заключение

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

Перечень ссылок

  1. Бахвалов Н.С. Численные методы. - М.: Наука, 1975.

  2. Волков Е.А. Численные методы. - М.: Наука, 1982.

  3. Горинштейн А.М. Практика решения инженерных задач на ЭВМ.- М.: Радио и связь, 1984.

  4. Корн Г., Корн Т. Справочник по математике для научных работников и инженеров. - М.: Наука, 1984.

  5. Самарский А.А. Введение в численные методы. - М.: Наука, 1982.

  6. Щуп Т. Решение инженерных задач на ЭВМ. - М.: Мир, 1982.

  7. Мудров А.Е. Численные методы для ПЭВМ на языках бейсик, фортран и паскаль. - Томск, МП ” Раско”, 1991.-272 с., ил.

  8. Вирт Н. Алгоритмы + структуры данных = программы: Пер. с англ. - М.: Мир, 1985.-406 с.

  9. Кнут Д. Искусство программирования для ЭВМ: Пер. с англ. - М. :Мир, 1978. Т.3. - 844 с.

  10. Дьяконов В.П. Справочник по алгоритмам и программам для персональных ЭВМ: Справочник. - М.: Наука, 1987. - 240 с.

  11. Каханер Д., Моулер К., Нэш С. Численные методы и математическое обеспечение: Пер. с англ. - М. :Мир, 1998.-575 с., ил.

А.И. Симкин Методы в программировании