Линейный и интерполяционный поиск

Исследование алгоритмов линейного и интерполяционного поиска, принципов их действия, логики каждого из методов. Анализ формул, примененных в алгоритмах. Описывание эксперимента и сравнительная характеристика интерполяционного и линейного поисков.

Рубрика Программирование, компьютеры и кибернетика
Вид отчет по практике
Язык русский
Дата добавления 15.10.2015
Размер файла 302,3 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Федеральное агентство связи

Федеральное государственное образовательное бюджетное учреждение

высшего профессионального образования

«Сибирский государственный университет телекоммуникаций и информатики»

(ФГОБУ ВПО «СибГУТИ»)

ОТЧЕТ

по учебной практике

Выполнил:

студент гр. ИВ-442 /Блинов А.И./

Руководитель практики от университета:

доцент Кафедры ВС/Курносов М.Г./

Новосибирск 2015

Содержание

1. Описание алгоритмов

1.1 Алгоритм линейного поиска (linear_search)

1.2 Алгоритм интерполяционного поиска (interpolating_search)

2. Организация экспериментов

3. Результаты экспериментов

Использованная литература

1. Описание алгоритмов

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

1.1 Алгоритм линейного поиска (linear_search)

Заключается в пробежке массива и проверкой каждого элемента массива с искомым элементом. Сложность по времени зависит от размера массива, и в худшем случае равна T(n) = O(n).

Псевдокод линейного поиска:

Key - искомый элемент

Array - массив

X - индекс массива

Sizeofarray - размер массива

Function linear_search ( Array[X], Key, Sizeofarray)

For X=0 to Sizeofarray-1 do

If Array[X] == Key

Return X

Else

Return -1;

End for

End function

1.2 Алгоритм интерполяционнго поиска (interpolating_search)

Интерполяция, интерполирование -- в вычислительной математике способ нахождения промежуточных значений величины по имеющемуся дискретному набору известных значений.

Основан на принципе поиска в телефонной книге или, например, в словаре.

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

В данном задании я применял формулу линейной интерполяции, потому что сам отсортированный массив на графике представляет собой последовательное соединение линейных функций (см. рисунок 1). Например, массив А={1,4,5,8,13}

Рисунок 1

Формула линейной интерполяции:

В математике данная формула позволяет найти значение значение функции f(x) в определённой точке Х, при том что x0 < x < x1 и f(x0) < f(x) < f(x1), если мы знаем f(x0), f(x1), x0 и x1.

Ниже представлен псевдокод интерполяционного поиска.

Key - искомый элемент

Array - массив

Sizeofarray - размер массива

L - левая граница массива (изначально 0)

R - правая граница массива (изначально Sizeofarray - 1)

M - вычисляемая ячейка массива между L и R

Function interpolating_search ( A [Sizeofarray-1], Sizeofarray, Key )

While (( A[L] < Key ) and (A[R] >= Key )) do

M = L + ((Key - A[L] ) * (R - L )) / ( A[R] - A[L] )

if ( A[M] < Key )

L = M + 1

else

if ( A[M] > Key )

R = M - 1

else

return M

End while

if ( A[L] == Key )

Return L

else

Return -1

End function

Логика, лежащая в основе этого метода, проста. Мы знаем, что значения массива не убывают от А[L] (изначально L=0) до А[R] (изначально R=размер_массива - 1), но не знаем, как именно.

Вычисленное по формуле

M = L + ((Key - A[L] ) * (R - L )) / ( A[R] - A[L] )”

значение индекса -- ожидаемая позиция элемента со значением, равным Key.

После сравнения Key с А[M] алгоритм либо прекращает работу (если они равны), либо продолжает поиск тем же способом среди элементов с индексами либо от L до M-1, либо от M+1 до R , в зависимости от того, меньше ли Key значения А[M] или больше. Таким образом, на каждой итерации размер задачи уменьшается, но, априори, мы не знаем, насколько именно. Поэтому сложность алгоритма, полученная методом неоднократных запусков программы, такова: T(n)=О(log(log(n))).

Простой пример: есть массив Arr[]=”1,2,4,7,11,16,22,28,37,49,52,57,60,62,74,91,93”, (зелёный цвет - это границы поиска, красный цвет - это ключ).

Таблица 1

I

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

Arr[I]

1

2

4

7

11

16

22

28

37

49

52

57

60

62

74

91

93

L=0, R=16, Arr[L]=0, Arr[R]=93, key=37 (см. таблицу 1). Действия по коду: алгоритм линейный интерполяционный поиск

Условие цыкла «while»: 0<37 и 93>37 ? - Да. Тогда М=0+((37-1)*(16-0))/(93-1)=6,453…=6 (целочисленный тип данных берёт только целую часть). Arr[6]=22<37. Следовательно, L=M+1.

Таблица 2

I

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

Arr[I]

1

2

4

7

11

16

22

28

37

49

52

57

60

62

74

91

93

Теперь L=7, R=16, Arr[L]=28, Arr[R]=93, key=37 (см. таблицу 2). Условие цыкла «while»: 28<37 и 93>37 ? - Да.

M=7+((37-28)*(16-7))/(93-28)=8,24….=8. 37<37 ? - Нет, а 37>37 ? - Нет, следовательно, вернуть значение M. И вправду, Arr[M]=key=37.

2. Организация экспериментов

· Эксперименты проводились на ноутбуке HP Pavilion g6 2137sr
(CPU: AMD A10-4600M APU (with integral video plate). 2.3 GHz, RAM: 8GB)

· Виртуальная операционная система Ubuntu 14.04 x64 (компилятор gcc 4.9.0)

· Ключи компиляции программы : -Wall -о

3. Результаты экспериментов

Таблица 3

Рисунок 2

Таблица 4

Рисунок 3

Таблица 5

Поиск ключа с индексом Sizeofarray+1 (несуществующий индекс)

Кол-во элементов

Время линейного поиска, с

Время интеполяционного поиска, с

300000000

2,000002211

0

310000000

2,000002211

0

320000000

2,000002211

0

330000000

3,000003111

0

340000000

2,000002211

0

350000000

2,000002211

0

360000000

2,000002211

0

370000000

23,00002311

0

380000000

27,00002711

0

390000000

59,00006111

0

400000000

84,00008511

0

Рисунок 4

Список использованной литературы

1. Программирование интерполяции [электронный реусурс]//Студопедия Ваша школопедия// URL: http://studopedia.ru/3_198520_programmirovanie-interpolyatsii.html

2. Интерполяция [электронный реусурс]//Wikipedia Свободная энциклопедия// URL: https://ru.wikipedia.org/wiki/%C8%ED%F2%E5%F0%EF%EE%EB%FF%F6%E8%FF#.D0.92_.D1.8F.D0.B7.D1.8B.D0.BA.D0.B0.D1.85_.D0.BF.D1.80.D0.BE.D0.B3.D1.80.D0.B0.D0.BC.D0.BC.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D1.8F

3. Алгоритмы. Введение в разработку и анализ (2006) (Левитин А.): Перевод с английского/ под редакцией С.Г. Трибуга и И.В. Красикова. - Москва: Издательский дом «Вильямс», 2006. - 576с.

Размещено на Allbest.ru

...

Подобные документы

  • Сущность построения, особенности применения и теоретическое обоснование алгоритмов приближенного решения математических задач. Основы численного метода, нахождение интерполяционного полинома методом Лагранжа. Руководство программиста и пользователя.

    курсовая работа [527,6 K], добавлен 16.08.2012

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

    курсовая работа [230,8 K], добавлен 12.02.2009

  • Анализ метода линейного программирования для решения оптимизационных управленческих задач. Графический метод решения задачи линейного программирования. Проверка оптимального решения в среде MS Excel с использованием программной надстройки "Поиск решения".

    курсовая работа [2,2 M], добавлен 29.05.2015

  • Построение интерполяционного полинома Ньютона по значениям функции в узлах согласно методу Лагранжа. Составление алгоритмов решения задачи, их реализация на программном уровне на языке Turbo Pascal. Представление результатов работы программы Polinom.

    курсовая работа [667,9 K], добавлен 01.10.2010

  • Теоретическая основа линейного программирования. Задачи линейного программирования, методы решения. Анализ оптимального решения. Решение одноиндексной задачи линейного программирования. Постановка задачи и ввод данных. Построение модели и этапы решения.

    курсовая работа [132,0 K], добавлен 09.12.2008

  • Математическое программирование. Линейное программирование. Задачи линейного программирования. Графический метод решения задачи линейного программирования. Экономическая постановка задачи линейного программирования. Построение математической модели.

    курсовая работа [581,5 K], добавлен 13.10.2008

  • Постановка задачи и ее формализация. Поиск значений интерполяционного многочлена в точках x1 и x2. Поиск минимума функции F(x) на отрезке [a;b]. Проверка условий сходимости методов. Тестирование программных модулей. Детализированная схема алгоритма.

    курсовая работа [893,0 K], добавлен 04.02.2011

  • Характеристика параметрических методов решения задач линейного программирования: методы внутренней и внешней точки, комбинированные методы. Алгоритм метода барьерных поверхностей и штрафных функций, применяемых для решения задач большой размерности.

    контрольная работа [59,8 K], добавлен 30.10.2014

  • Оптимизация движения автобетоносмесителей на строительную площадку с минимализацией времени и средств при строительстве. Расчет технических характеристик здания и определения минимального комплекта машин. Применение методов линейного программирования.

    курсовая работа [10,9 M], добавлен 06.03.2015

  • Оптимизационная задача линейного программирования. Виды задач линейного программирования. Принятие решений на основе количественной информации об относительной важности критериев. Выбор средств разработки. Программный комплекс векторной оптимизации.

    дипломная работа [1,3 M], добавлен 27.03.2013

  • Теоретическое описание линейного списка с алгоритмами реализации основных операций. Понятия, механизмы объектно-ориентированного программирования. Возможности проектируемого контейнера пользователей, его реализация на основе линейного списка с заголовком.

    курсовая работа [475,2 K], добавлен 26.02.2015

  • Формула Симпсона как интеграл от интерполяционного многочлена второй степени, рассмотрение сфер использования. Знакомство с основными особенностями и этапами написания программы для численного интегрирования с помощью формулы Симпсона, анализ примеров.

    практическая работа [153,8 K], добавлен 16.03.2015

  • Составление и программная реализация в среде Borland Delphi 7.0 алгоритмов итерационного и рекурсивного вариантов решения задачи поиска с возвращением. Исследование асимптотической временной сложности решения в зависимости от количества ячеек на плате.

    курсовая работа [57,5 K], добавлен 25.06.2013

  • Возможности и синтаксис команд MATLAB, листинг программы и описание цикла. Порядок составления программы вычисления коэффициентов алгебраического интерполяционного многочлена и построения сплайн-функции, "склеенной" из кусков многочленов 3-го порядка.

    лабораторная работа [30,8 K], добавлен 04.07.2009

  • Применение методов линейного программирования для решения оптимизационных задач. Основные понятия линейного программирования, свойства транспортной задачи и теоремы, применяемые для ее решения. Построение первичного опорного плана и системы потенциалов.

    курсовая работа [280,8 K], добавлен 17.11.2011

  • Общее понятие и характеристика задачи линейного программирования. Решение транспортной задачи с помощью программы MS Excel. Рекомендации по решению задач оптимизации с помощью надстройки "Поиск решения". Двойственная задача линейного программирования.

    дипломная работа [2,4 M], добавлен 20.11.2010

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

    лабораторная работа [61,4 K], добавлен 07.01.2011

  • Методы реализации алгоритмов сортировки и алгоритмов поиска на языках программирования высокого уровня. Программирование алгоритмов сортировки и поиска в рамках создаваемого программного средства на языке Delphi. Создание руководства пользователя.

    курсовая работа [1,7 M], добавлен 16.04.2012

  • Интерполирование функций методом Лагранжа. Получение функциональной зависимости по экспериментальным данным. Близость интерполяционного многочлена к заданной функции. Интерполяционный полином в форме Лагранжа. Построение интерполяционных графиков.

    лабораторная работа [315,8 K], добавлен 24.05.2014

  • Особенности задач линейного программирования. Симплексный метод решения задач линейного программирования. Обоснование выбора языка, инструментария программирования, перечень идентификаторов и блок-схема алгоритма. Логическая схема работы программы.

    дипломная работа [2,4 M], добавлен 13.08.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.