Разделы презентаций


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

Содержание

Идея двоичного поиска: Возьмем средний элемент упорядоченного массива и сравним с ключом поиска «Х». Возможны варианты:1) am = Х элемент найден2) am < Х продолжаем поиск в

Слайды и текст этой презентации

Слайд 1Двоичный поиск в упорядоченном массиве







Пусть дан массив А

= (a1, a2, … , an ),
упорядоченный по возрастанию, т.е.

a1 ≤ a2 ≤ … ≤ an .

Найти: 1) Элемент с ключом Х;
2) Все элементы с ключом Х.
Двоичный поиск  в  упорядоченном массиве Пусть дан массив А = (a1, a2, … , an

Слайд 3





Идея двоичного поиска: Возьмем средний элемент упорядоченного массива и сравним

с ключом поиска «Х». Возможны варианты:
1) am = Х

элемент найден
2) am < Х продолжаем поиск в правой половине массива
3) am > Х продолжаем поиск в левой половине массива
Каким образом?
Идея двоичного поиска: Возьмем средний элемент упорядоченного массива и сравним с ключом поиска «Х». Возможны варианты:1) am

Слайд 4Алгоритм на псевдокоде (первая версия)
Обозначим
L, R – правая и

левая границы рабочей части массива,
Найден – логическая переменная,

в которой будем отмечать факт успешного завершения поиска.
L: = 1, R: = n, Найден: = нет
DO ( L ≤ R )
m: = ⌊(L+R)/2⌋
IF (am=X) Найден: =да OD FI
IF (am < X) L: = m+1
ELSE R: = m-1
FI
OD
Алгоритм на псевдокоде (первая версия)Обозначим L, R – правая и левая границы рабочей части массива, Найден –

Слайд 5 1 2 3

4 5

6 7 8 9 10 11 12
а б б б в г д е ж з и к Х=б
L=1, R=12
1 2 3 4 5
а б б б в L=1, R=5


Недостатки первой версии алгоритма:
1) на каждой итерации цикла два сравнения,
2) находит первый попавшийся элемент из нескольких с заданным ключом.
1    2    3     4

Слайд 6Рассмотрим вторую версию алгоритма,
в которой
уменьшим количество сравнений

путем исключения из алгоритма

проверки на равенство.

Рассмотрим вторую версию алгоритма, 		в которой уменьшим количество сравнений 	   путем исключения из алгоритма

Слайд 7L: = 1, R: = n
DO ( L

⌊(L+R)/2⌋
IF (am < X) L: = m+1
ELSE R: =

m
FI
OD
IF (aR=X) Найден: = да
ELSE Найден: = нет
FI

Алгоритм на псевдокоде (вторая версия)

L: = 1, R: = n	DO ( L

Слайд 8 1 2 3

4 5

6 7 8 9 10 11 12
а б б б в г д е ж з и к Х=б
L=1, R=12
1 2 3 4 5 6
а б б б в г L=1, R=6
1 2 3
а б б L=1, R=3
1 2
а б L=1, R=2
2
б L=2, R=2
Преимущества второй версии алгоритма:
1) на каждой итерации цикла одно сравнение,
2) находит самый левый элемент среди тех, которые удовлетворяют ключу.
1    2    3     4

Слайд 9Трудоемкость двоичного поиска
Сначала определим
максимальное количество итераций (k).
Рассмотрим худший

случай, когда
1) часть массива aL , … , aR

содержит нечетное количество элементов
2) в начале каждой итерации
слева элементов на один больше
3) на каждом шаге выбирается левая часть массива.
Трудоемкость двоичного поискаСначала определим 	максимальное количество итераций (k). Рассмотрим худший случай, когда 1) часть массива aL ,

Слайд 10Трудоемкость двоичного поиска

Трудоемкость двоичного поиска

Слайд 12Графики трудоемкости двоичного поиска

Графики трудоемкости двоичного поиска

Слайд 13Сортировка данных со сложной структурой

Дан массив абонентов

А: Иванов Петров

Абрамов
223322 345767 667891

Struct abonent { char name[10];
long phone;
} A[n];

Чтобы отсортировать такой массив структур, нужно определить отношение порядка его элементов (> < =).


Сортировка данных  со сложной структуройДан массив абонентов    А:  Иванов

Слайд 14Сортировка данных со сложной структурой
Пример. Struct abonent {

char name[10];
long phone;
} A[n];
Попытка сортировки:
DO (

i = 1, 2, …, n-1 )
DO ( j = n, n-1, …, i+1)
IF ( Aj < Aj-1 ) Aj ↔ Aj-1 FI
OD
OD

Эта запись не будет верной, т.к. компилятор не знает как сравнивать элементы типа структура, т.к. они не являются встроенными элементами языка.
Сортировка данных  со сложной структуройПример. Struct  abonent  { char name[10]; 				 long phone; 				}

Слайд 16 Логическая функция Less (меньше)

При сортировке по имени абонента:
int less

( struct abonent X, struct abonent Y)
{ if ( X.name

return 1;
else return 0;
}
При сортировке по номеру телефона абонента:
int less ( struct abonent X, struct abonent Y)
{ if ( X.phone else return 0;
}
Логическая функция Less (меньше)При сортировке по имени абонента: int less ( struct abonent X, struct abonent Y)	{

Слайд 17Наполовину пуст? Наполовину полон?
Программист считает, что
стакан в два раза больше,

чем нужно

Наполовину пуст? Наполовину полон?Программист считает, что стакан в два раза больше, чем нужно

Слайд 18При сортировке по сложному ключу так же легко определить функцию

less.
Для сортировки по фамилии абонента и (дополнительно) по номеру телефона:


int less ( struct abonent X, struct abonent Y)
{ if ( X.name < Y.name) return 1;
else if ( X.name > Y.name) return 0;
else if ( X.phone < Y.phone) return 1;
else return 0;
}
При сортировке по сложному ключу так же легко определить функцию less.Для сортировки по фамилии абонента и (дополнительно)

Слайд 19Тогда в алгоритмах сортировок вместо оператора сравнения используем вызов функции

less.
Например, в пузырьковой сортировке:
DO ( i = 1, 2,

…, n-1)
DO ( j = n, n-1, …, i+1)
IF ( less ( Aj , Aj-1 ) ) Aj ↔ Aj-1 FI
OD
OD


Тогда в алгоритмах сортировок вместо оператора сравнения используем вызов функции less.Например, в пузырьковой сортировке: 	DO ( i

Слайд 20 Вывод:
Если структура сортируемых данных
не соответствует
простым (встроенным) типам языка,

то
операции отношения необходимо переопределить
с помощью соответствующих булевых функций.

Аналогичное

переопределение операций сравнений требуется и для организации поиска!



Вывод:Если структура сортируемых данных 		не соответствует простым (встроенным) типам языка, то операции отношения необходимо переопределить с помощью

Слайд 21 Преимущества:
1) Операции отношения могут быть определены различными способами в зависимости

от ключа сортировки и условия упорядочения данных.
2) Изменение направления упорядочения

массива легко достигается с помощью изменения знака в операции отношения на противоположный.

Операции пересылки не требуют переопределения,
т.к. выполняются путем побайтового копирования.
Преимущества:1) Операции отношения могут быть определены различными способами в зависимости от ключа сортировки и условия упорядочения данных.2)

Слайд 23Сортировка по множеству ключей
Пусть рассмотренный телефонный справочник хранится в виде

базы данных в памяти компьютера и мы хотим использовать его

для эффективного решения двух задач:
1) Быстро искать запись по заданной фамилии (справочник должен быть отсортирован по фамилиям абонентов);
2) Быстро искать запись по заданному номеру телефона (справочник должен быть отсортирован по номерам телефонов абонентов);
Для одновременного решения этих задач рассмотрим прием, называемый индексацией.
Сортировка по множеству ключейПусть рассмотренный телефонный справочник хранится в виде базы данных в памяти компьютера и мы

Слайд 24Индексация данных
Рассмотрим суть индексации на массиве целых чисел:

1

2 3 4 5 6 7 8 - физические номера
А: 5 7 3 4 2 6 1 8
В: 7 5 3 4 1 6 2 8
1 2 3 4 5 6 7 8 - логические номера
Массив В - индексный массив (индекс) массива А.
А [ B[i] ] – обращение к элементу массива А
через индекс В.

С: 8 2 6 1 4 3 5 7 - номера элементов массива А по убыванию
Массив С – индексный массив (индекс) массива А.
А [ С[i] ] – обращение к элементу массива А
через индекс С.
Индексация данныхРассмотрим суть индексации на массиве целых чисел:

Слайд 25 Чтобы упорядочить массив А (по возрастанию),
мы построили

индексный массив В,
в него записали номера элементов массива А

(по возрастанию элементов) и
обращаемся к элементам массива А
через индекс В.

При доступе к массиву А через индекс
мы работаем с ним как с упорядоченным
(например, можем производить быстрый двоичный поиск), в то время как
сами элементы физически не переставляются.
Чтобы упорядочить массив А (по возрастанию), мы построили индексный массив В, в него записали номера

Слайд 26Пример. Вывод элементов массива (по возрастанию):
DO ( i = 1,

…, n)
вывод ( А [ В[i] ] )
OD
Пример.

Двоичный поиск (вторая версия):
L: = 1, R: = n
DO ( L m: = ⌊(L+R)/2⌋
IF (А[В[m]] < X) L: = m+1
ELSE R: = m
FI
OD
IF (А[В[R]] = X) Найден: = да
ELSE Найден: = нет
FI

Пример. Вывод элементов массива (по возрастанию):		DO ( i = 1, …, n) 			вывод ( А [ В[i]

Слайд 27Построение индексного массива
Построение индексного массива выполняется
на базе любого алгоритма

сортировки.
*Вначале в массив В записываются физические номера элементов массива А.


*Затем производится любая сортировка
при условии, что:
1) В операциях сравнения элементы массива А индексируются через В;
2) Перестановки делаются только в массиве В;

Построение индексного массиваПостроение индексного массива выполняется на базе любого алгоритма сортировки.*Вначале в массив В записываются физические номера

Слайд 28 Построение индексного массива Алгоритм на псевдокоде (на примере пузырьковой сортировки)


B := (1, 2, …, n)

DO ( i = 1, 2, …, n-1)
DO ( j = n, n-1, …, i+1)
IF ( a[ bj ] < a[ bj-1 ]) bj↔bj-1 FI
OD
OD

Построение индексного массива Алгоритм на псевдокоде  (на примере пузырьковой сортировки)

Слайд 29Преимущества индексации
1) Появляется возможность построения нескольких различных

индексов, которые можно использовать по мере необходимости.

2) Исключается копирование больших массивов данных.
3) Возможность
фильтрации данных.
Преимущества индексации  1)  Появляется возможность построения нескольких различных индексов, которые можно использовать по мере необходимости.

Слайд 30Преимущества индексации

Определение. Фильтрация – использование при работе только тех элементов,

которые отвечают некоторым условиям.
Совокупность условий называется фильтром.
Пример. Из массива А

выбираем только четные элементы по возрастанию.
1 2 3 4 5 6 7 8
А : 5 7 3 4 2 6 1 8
D : 5 4 6 8 - только четные, по возрастанию
Преимущества индексацииОпределение. Фильтрация – использование при работе только тех элементов, которые отвечают некоторым условиям.Совокупность условий называется фильтром.Пример.

Обратная связь

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

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика