Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otvety_na_voprosy_k_ekzamenu_po_AiSD.docx
Скачиваний:
42
Добавлен:
29.04.2019
Размер:
417.06 Кб
Скачать

20. Понятие поиска, ключей; назначение и структура алгоритмов поиска

Поиск

Поиск является одной из основных операций при обработке информации в ЭВМ. Ее назначение - по заданному аргументу найти среди массива данных те данные, которые соответствуют этому аргументу.

Набор данных (любых) будем называть таблицей или файлом. Любое данное (или элемент структуры) отличается каким-то признаком от других данных. Этот признак называется ключом. Ключ может быть уникальным, т. е. в таблице существует только одно данное с этим ключом. Такой уникальный ключ называется первичным. Вторичный ключ в одной таблице может повторяться, но по нему тоже можно организовать поиск. Ключи данных могут быть собраны в одном месте (в другой таблице) или представлять собой запись, в которой одно из полей - это ключ. Ключи, которые выделены из таблицы данных и организованы в свой файл, называются внешними ключами.. Если ключ находится в записи, то он называется внутренним.

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

1. индикация того, что данного нет

2. вставка данного в таблицу

21. Последовательный поиск и его эффективность

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

Пусть k - массив ключей. Для каждого k(i) существует r(i) - данное. Key - аргумент поиска. Ему соответствует информационная запись rec.

Алгоритм:

Переменная search хранит номер найденного элемента.

for i = 1 to n

if k(i) = key then

search = i

return

endif

next i

search = 0

return

Если элемент в таблице не найден и необходимо произвести вставку, то последние два оператора заменяются на

n = n + 1

k(n) = key

r(n) = rec

search = n

return

Поиск в односвязном списке

Если таблица задана в виде списка, то производится последовательный поиск в списке

Алгоритм:

q = nil

p = table

while (p <> nil) do

if k(p) = key then

search = p

return

endif

q = p

p = nxt(p)

endwhile

s = getnode

k(s) = key

r(s) = rec

nxt(s) = nil

if q = nil then table = s

else

nxt(q) = s

endif

search = s

return

Эффективность последовательного поиска

Эффективность любого поиска может оцениваться по количеству сравнений С аргумента поиска с ключами таблицы данных. Чем меньше количество сравнений, тем эффективнее алгоритм поиска.

Эффективность последовательного поиска в массиве

Cmin = 1, Cmax = n.

Если данные расположены равновероятно во всех ячейках массива, то

Cср ≈ (n + 1)/2.

Эффективность последовательного поиска в списке - то же самое.

Порядок эффективности последовательного поиска O (n)

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

Эффективность последовательного поиска можно увеличить.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]