- •2. Структуры данных. Элементарные данные.
- •3. Линейные структуры данных. Массив.
- •4. Линейные структуры данных. Запись.
- •5. Линейные структуры данных. Множество.
- •6. Линейный однонаправленный список. Способы реализации и основные операции.
- •7. Линейный двунаправленный список. Способы реализации и основные операции.
- •8. Циклический однонаправленный список. Способы реализации и основные операции.
- •9. Циклический двунаправленный список. Способы реализации и основные операции.
- •10. Стек. Способы реализации и основные операции.
- •11. Очередь. Способы реализации и основные операции.
- •12. Дек. Способы реализации и основные операции.
- •13. Мультисписки. Способы реализации и основные операции.
- •14. Слоёные списки. Способы реализации и основные операции.
- •15. Графы. Способы реализации и основные операции.
- •16. Общие сведения о деревьях. Двоичные деревья. Основные определения и способы реализации.
- •17. Обходы деревьев.
- •18. Организация файлов. Общие сведения.
- •21. Методы разработки алгоритмов
- •22. Алгоритмы поиска в линейных структурах. Последовательный (линейный) поиск
- •23. Алгоритмы поиска в линейных структурах. Бинарный поиск
- •24. Хеширование данных. Функция хеширования
- •25. Хеширование данных. Открытое хеширование
- •26. Хеширование данных. Закрытое хеширование
- •27. Поиск данных по вторичным ключам
- •28. Упорядоченные деревья поиска. Способы реализации и основные операции
- •29. Случайные деревья поиска и оптимальные деревья поиска. Основные понятия
- •31. Поиск в тексте. Прямой поиск
- •32. Поиск в тексте. Алгоритм Кнута, Мориса и Пратта
- •33. Поиск в тексте. Алгоритм Боуера и Мура
- •34. Общие сведения об алгоритмах кодирования (сжатия) данных. Метод Хаффмана
- •35. Алгоритм внутренней сортировки подсчетом
- •36. Алгоритм внутренней сортировки простым включением
- •37. Алгоритм внутренней сортировки простым извлечением
- •38. Алгоритм внутренней сортировки методом пузырька
- •39. Алгоритм внутренней быстрой сортировки (Хоара)
- •40. Алгоритм внутренней сортировки слиянием
- •41. Алгоритм внутренней сортировки распределением
- •42. Алгоритмы внешней сортировки
- •43. Алгоритм определения циклов в графе
- •45. Алгоритмы обхода графа. Поиск в ширину (Волновой алгоритм)
- •46. Алгоритмы нахождения кратчайшего пути в графе. Алгоритм Дейкстры
- •47. Алгоритмы нахождения кратчайшего пути в графе. Алгоритм Флойда
- •49. Алгоритмы нахождения минимального остовного дерева графа. Алгоритм Крускала
27. Поиск данных по вторичным ключам
2.3.4. Поиск по вторичным ключам До сих пор рассматривались способы поиска в таблице по ключам, позволяющим однозначно идентифицировать запись. Такие ключи называются и е р в и ч н ы м и Возможен вариант организации таблицы, при котором отдельный ключ не позволяет однозначно идентифицировать запись. Такая ситуация часто встречается в базах данных. Идентификация записи осуществляется по некоторой совокупности ключей. Ключи, не позволяющие однозначно идентифицировать запись в таблице, называются в т о р и ч н ы м и ключами. Даже при наличии первичного ключа, для поиска записи могут быть использованы вторичные. Например, поисковые системы InterNet часто организованы как наборы записей, соответствующих Web-страницам. В качестве вторичных ключей для поиска выступают ключевые слова страниц, а сама задача поиска сводится к выборке из таблицы некоторого множества записей, содержащих требуемые вторичные ключи. 2.3.3.1. Инвертированные иноексы Рассмотрим метод организации таблицы с инвертированными индексами (рис. 30). Для таблицы строится отдельный набор данных, содержащий так называемые и н в е р т и р о в а н н ы е индексы. Вспомогательный набор содержит для каждого значения вторичного ключа отсортированный список адресов записей таблицы, которые содержат данный ключ. Поиск осуществляется по вспомогательной структуре достаточно быстро, так как фактически отсутствует необходимость обращения к основной структуре данных. Область памяти, используемая для индексов, является относительно небольшой по сравнению с другими методами организации таблиц. Недостатками данной системы являются большие затраты времени на составление вспомогательной структуры данных и ее обновление. Причем эти затраты возрастают с увеличение объема базы данных. Система инвертированных индексов является чрезвычайно удобной и эффективной при организации поиска в больших таблицах. 2.3.3.2. Битовые карты Для таблиц небольшого объема используют организацию вспомогательной структуры данных в виде битовых карт (рис. 31). Для каждого значения вторичного ключа записей основного набора данных записывается последовательность битов. Длина последовательности битов равна числу записей. Каждый бит в битовой карте соответствует одному значению вторичного ключа и одной записи. Единица означает наличие ключа в записи, а нуль - отсутствие. Основным преимуществом такой организации является очень простая и эффективная организация обработки сложных запросов, которые могут объединять значения ключей различными логическими предика- тами. В этом случае поиск сводится к выполнению логических операций запроса непосредственно над битовыми строками и интерпретации результирующей битовой строки. Другим преимуществом является простота обновления карты при добавлении записей. К недостаткам битовых карт следует отнести увеличение длины строки карты пропорционально длине таблицы. При этом заполненность карты единицами уменьшается с увеличением длины файла. Для таблицы большой длины и редко встречающихся ключей битовая карта превращается в большую разреженную матрицу, состоящую в основном из одних нулей.
