Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ответы аисд.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.94 Mб
Скачать

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

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

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

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

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

В случае нахождения ключа (и информации ему соответствующей) возможны две операции:

обработка найденной информации;

удаление найденной информации.

В случае отсутствия ключа возможны тоже две операции:

индикация того, что ключа нет;

вставка ключа (и информации) в таблицу.

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

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

 

Алгоритм поиска в списке

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), то есть величина одного порядка с n.

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

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

22.Индексно-последовательный поиск.

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

 

Введем  обозначения: 

 n - размер основной таблицы;

 m - размер индексной таблицы;

 p - размер шага; 

  m = n / p     

Тогда

 C   = (m+1)/2 + (n+1)/2 =  (n/p+1)/2 + (n+1)/2 = n/2p + n/2 + 1

   Продифференцируем C по p и приравняем производную нулю :

   dC/dp = (d/dp) (n/2p + n/2 +1) = - n / 2 p2 +  1/2 = 0

      Отсюда

Подставив  Оптимальное значение p  в выражение для C, получим следующее количество сравнений:

 

 Порядок  эффективности индексно-последовательного поиска

 

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

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