Уровень алгоритма

Двоичный поиск: различия между версиями

Материал из Алговики
Перейти к навигации Перейти к поиску
[непроверенная версия][непроверенная версия]
Строка 1: Строка 1:
 
{{algorithm
 
{{algorithm
| name              =
+
| name              = Бинарный поиск
 
| serial_complexity =  
 
| serial_complexity =  
 
| pf_height        =  
 
| pf_height        =  
Строка 7: Строка 7:
 
| output_data      =  
 
| output_data      =  
 
}}
 
}}
Основные авторы описания:
+
Основные авторы описания: [[User:AntonChupin|А. В. Чупин]].
  
 
== Свойства и структура алгоритма ==
 
== Свойства и структура алгоритма ==
  
 
=== Общее описание алгоритма ===
 
=== Общее описание алгоритма ===
 +
'''Метод бинарного поиска''' используется в качестве быстрого варианта поиска в заранее отсортированном массиве. Получил распространение благодаря как наименьшей из возможных высоте алгортима, так и из-за ряда своих вычислительных характеристик, а также (в среде нечисленных алгоритмов) из-за своей рекурсивности, то есть лёгкости записи.
 +
 
=== Математическое описание алгоритма ===
 
=== Математическое описание алгоритма ===
 +
 +
Исходные данные: одномерный массив <math>n</math> чисел, упорядоченный по возрастанию (точнее - неубыванию) или убыванию (точнее - невозрастанию), а также число <math>A</math>, которое нужно найти в этом массиве.
 +
 +
Вычисляемые данные: индекс элемента, равного искомому (или ответ, что такого элемента нет).
 +
 +
Формулы метода: элементы на каждом этапе алгоритма рассматриваются в виде непрерывного отрезка массива. В каждой из пар находится сумма составляющих её элементов. На следующем этапе на пары разбиваются уже эти суммы (и те элементы, которые не вошли в уже вычисленные суммы), и т. д.
 +
 
=== Вычислительное ядро алгоритма ===
 
=== Вычислительное ядро алгоритма ===
 +
Вычислительное ядро последовательно-параллельного метода суммирования можно составить как из операций сравнения и получения середины отрезка, так и (рекуррентно) из набора реализаций метода бинарного поиска в массиве меньшего размера.
 +
 
=== Макроструктура алгоритма ===
 
=== Макроструктура алгоритма ===
 
=== Схема реализации последовательного алгоритма ===
 
=== Схема реализации последовательного алгоритма ===
Строка 20: Строка 31:
 
=== Ресурс параллелизма алгоритма ===
 
=== Ресурс параллелизма алгоритма ===
 
=== Входные и выходные данные алгоритма ===
 
=== Входные и выходные данные алгоритма ===
 +
 +
Входные данные: массив <math>x</math> (элементы <math>x_i</math>). Число <math>A</math>.
 +
 +
Дополнительные ограничения: массив упорядочен.
 +
 +
Объём входных данных: <nowiki/><math>n</math>.
 +
 +
Выходные данные: индекс элемента <math>A</math> в массиве, если он есть.
 +
 +
Объём выходных данных: один скаляр.
 +
 
=== Свойства алгоритма ===
 
=== Свойства алгоритма ===
  
Строка 25: Строка 47:
  
 
=== Особенности реализации последовательного алгоритма ===
 
=== Особенности реализации последовательного алгоритма ===
 +
Обычно в качестве ответа выводят -1, если число не найдено.
 +
 
=== Локальность данных и вычислений ===
 
=== Локальность данных и вычислений ===
 
==== Локальность реализации алгоритма ====
 
==== Локальность реализации алгоритма ====

Версия 00:43, 29 июня 2016


Бинарный поиск

Основные авторы описания: А. В. Чупин.

Содержание

1 Свойства и структура алгоритма

1.1 Общее описание алгоритма

Метод бинарного поиска используется в качестве быстрого варианта поиска в заранее отсортированном массиве. Получил распространение благодаря как наименьшей из возможных высоте алгортима, так и из-за ряда своих вычислительных характеристик, а также (в среде нечисленных алгоритмов) из-за своей рекурсивности, то есть лёгкости записи.

1.2 Математическое описание алгоритма

Исходные данные: одномерный массив [math]n[/math] чисел, упорядоченный по возрастанию (точнее - неубыванию) или убыванию (точнее - невозрастанию), а также число [math]A[/math], которое нужно найти в этом массиве.

Вычисляемые данные: индекс элемента, равного искомому (или ответ, что такого элемента нет).

Формулы метода: элементы на каждом этапе алгоритма рассматриваются в виде непрерывного отрезка массива. В каждой из пар находится сумма составляющих её элементов. На следующем этапе на пары разбиваются уже эти суммы (и те элементы, которые не вошли в уже вычисленные суммы), и т. д.

1.3 Вычислительное ядро алгоритма

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

1.4 Макроструктура алгоритма

1.5 Схема реализации последовательного алгоритма

1.6 Последовательная сложность алгоритма

1.7 Информационный граф

1.8 Ресурс параллелизма алгоритма

1.9 Входные и выходные данные алгоритма

Входные данные: массив [math]x[/math] (элементы [math]x_i[/math]). Число [math]A[/math].

Дополнительные ограничения: массив упорядочен.

Объём входных данных: [math]n[/math].

Выходные данные: индекс элемента [math]A[/math] в массиве, если он есть.

Объём выходных данных: один скаляр.

1.10 Свойства алгоритма

2 Программная реализация алгоритма

2.1 Особенности реализации последовательного алгоритма

Обычно в качестве ответа выводят -1, если число не найдено.

2.2 Локальность данных и вычислений

2.2.1 Локальность реализации алгоритма

2.2.1.1 Структура обращений в память и качественная оценка локальности
2.2.1.2 Количественная оценка локальности
2.2.1.3 Анализ на основе теста Apex-Map

2.3 Возможные способы и особенности параллельной реализации алгоритма

2.4 Масштабируемость алгоритма и его реализации

2.4.1 Масштабируемость алгоритма

2.4.2 Масштабируемость реализации алгоритма

2.5 Динамические характеристики и эффективность реализации алгоритма

2.6 Выводы для классов архитектур

2.7 Существующие реализации алгоритма

3 Литература