
- •Тема 3a. Поиск и сортировка
- •Зачем нужны сортировка и поиск
- •Зачем нужны сортировка и поиск
- •Организация работы с базами данных
- •Для определенности в дальнейшем тип массива записей введем следующим образом
- •Ключ записи, требования к нему
- •Наиболее частыми операциями при работе с базами данных являются «поиск» и «сортировка» записей
- •Поиск в массиве записей
- •Линейный поиск
- •Эффективность Линейного поиска
- •Поиск с барьером
- •Основная идея алгоритма поиска делением пополам в упорядоченном массиве
- •Алгоритм поиска делением пополам
- •Особенность
- •Рекурсивная реализация двоичного поиска
- •Трассировка алгоритма
- •Трассировка алгоритма
- •Эффективность двоичного поиска
- •Сортировка массивов
- •Методы внутренней сортировки массивов характеризуются тем, что все перестановки элементов должны выполняться «на
- •Эффективность сортировки
- •Прямые методы коротки, просто программируются
- •Прямые методы внутренней сортировки можно разбить на три категории
- •Метод прямого обмена
- •Программа метода прямого обмена
- •Трассировка метода пузырька
- •Метод прямого включения
- •Программа метода прямого включения
- •Трассировка метода прямого включения
- •Метод прямого выбора
- •Программа Метода прямого выбора
- •Трассировка метода прямого выбора
- •Двоичный поиск с объектом
- •Двоичный поиск с объектом1
- •Двоичный поиск с объектом3
- •Двоичный поиск с объектом1
- •Контрольные вопросы
- •Задачи на экзамен
- •Задачи на экзамен
- •Конец темы 3
Тема 3a. Поиск и сортировка
Зачем нужны сортировка и поискПоиск в массиве записейСортировка массивовПрямые методы сортировки
07/02/19 |
1 |
Зачем нужны сортировка и поиск
Вся человеческая деятельность связана с поиском и упорядочиванием.
Утром встаешь, ищешь тапочки, нужно позвонить – ищешь номер телефона, идешь в библиотеку – ищешь нужную книгу и т.д.
С другой стороны: свои вещи в квартире вы раскладываете по полочкам и стремитесь этот порядок поддерживать, список студентов в группе преподаватель, как правило, запишет в алфавитном порядке, номера домов тоже упорядочены.
Почему так устроена человеческая натура?
07/02/19 |
2 |
Зачем нужны сортировка и поиск
Оказывается потому, что поиск в упорядоченном массиве значительно эффективнее!
Ведь в природе зачастую успешность деятельности зависит от быстроты выбора правильного решения. Поэтому, если у вас в голове все знания упорядочены, вы достигаете больших успехов.
Перед программистом возникает ряд вопросов:
По каким алгоритмам осуществляются поиск и сортировка?
Насколько эффективнее поиск в упорядоченном массиве?
Третий том книги Дональда Кнута «Искусство программирования» в целом считается последним словом в области методик поиска и сортировки.
07/02/19 |
3 |
Организация работы с базами данных
Используя структурированный тип Record, создаются массивы записей всевозможных баз данных (информация о студентах Вуза, информация о товарах в магазине,….).
Обычно база данных накапливается и хранится на диске. К ней часто приходится обращаться, обновлять, перегруппировывать.
Работа с базой может быть организована двумя способами:
1) Вносить изменения и осуществлять поиск можно прямо на диске используя специфическую технику работы с записями на файлах, при этом временные затраты на обработку данных (поиск, сортировку) значительно возрастают, но нет ограничений на оперативную память;
2) В начале работы вся база (или ее необходимая часть) считывается в массивы записей и вся обработка производится в оперативной памяти, что значительно сокращает время обработки,
однако требует затрат оперативной памяти.
07/02/19 |
4 |
Для определенности в дальнейшем тип массива записей введем следующим образом
• |
type |
|
|
|
• |
Tinf=<описать |
свой |
тип |
информации>; |
• |
Tk= <описать |
свой |
тип |
ключа>; |
•Tzp=record
• |
zp:Tinf;//поле информации |
• |
k:Tk;//поле ключа |
• |
end; |
•Mas=array[1..1] of Tzp;//Массив записей
•Tmas=^mas;
•Begin
•n:=. . .;
•getmem(a,n*sizeof(Tzp));
07/02/19 |
5 |
Ключ записи, требования к нему
Обычно запись содержит некое ключевое слово (ключ), по которому ее находят среди множества других аналогичных записей.
В зависимости от решаемой задачи ключом может, например, служить фамилия или учетный номер или адрес.
Основное требование к ключу в задачах поиска и сортировки состоит в том, чтобы операция проверки на равенство была корректной.
Поэтому, например, в качестве ключа не следует выбирать действительное число, т.к. из-за всегда возможной ошибки округления, поиск нужного ключа может оказаться безрезультатным, хотя этот ключ в массиве имеется.
Для применения более эффективных методов поиска значения ключей должны допускать упорядоченность (т.е. проверку на > или <).
Желательно, чтобы в массиве записей не было повторяющихся
ключей. |
6 |
07/02/19 |
Наиболее частыми операциями при работе с базами данных являются «поиск» и «сортировка» записей по ключу.
Алгоритмы решения этих задач существенно зависят от того, организованы записи в массивы или размещены на диске.
07/02/19 |
7 |
Поиск в массиве записей
постановка задачи
Задача поиска требуемого элемента в массиве записей a[i], i=1..n заключается в нахождении индекса i удовлетворяющего условию
a[i].k=x.
Здесь ключ k выделен в отдельное поле, x - аргумент поиска того же типа что и k.
После нахождения i обеспечивается доступ ко всем другим полям найденной записи a[i].
07/02/19 |
8 |
Линейный поиск
используется когда нет никакой дополнительной информации о хранении разыскиваемых данных.
Он представляет собой последовательный перебор массива до обнаружения требуемого ключа или до конца, если ключ не обнаружен:
|
i:=1; n1:=n+1; |
While (a[i].k<>x) and (i<n1) do i:=i+1;
if i=n1 then ’элемент не найден’
|
else ’элемент I’; |
|
Видно, что на каждом шаге требуется увеличивать индекс и |
|
вычислять логическое выражение с двумя проверками. |
07/02/19 |
9 |
Эффективность Линейного поиска
Так как элемент х с равной вероятностью может быть
как вначале, так и в конце массива, то среднее количество повторений в цикле равно n/2.
Ввиду того, что в приведенном алгоритме в каждом цикле две проверки, его эффективность (по к-ву
проверок) пропорциональна количеству элементов n, что обозначается О(n).
А можно ли уменьшить здесь затраты на поиск?
07/02/19 |
10 |