Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций СиАОД.docx
Скачиваний:
17
Добавлен:
01.03.2025
Размер:
4.62 Mб
Скачать
    1. Множества

Множество является базовой структурой, которая лежит в основании всей математики..

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

Множеством называется некая совокупность элементов, каждый элемент или сам является множеством, или является примитивным элементом, называемым атомом.

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

Все элементы одного множества имеют одинаковый тип данных (целые, символы, строки символов и т.п.)

Линейно упорядоченное множество S удовлетворяет условиям:

Для любых элементов a и b из множества S может быть справедливымтолько одно из следующих утверждений: a < b, a = b, a > b

Для любых элементов a, b, c из множества S таких, что a < b и b < c, следует a < c.

Операторы АТД, основанные на множествах:

1.UNION (A, B, C) - объединение множеств C = A B

2. INTERSECTION (A, B, C)- пересечение множеств

C = A B

3. DIFFERENCE (A, B, C)- разность множеств C = A \ B

4. MERGE (A, B, C)- слияние (объединение) непересекающихся множеств C = A B. Результат не определен, если A B

5. функция MEMBER (x, A) имеет аргументами множество A и объект x того же типа, что и элементы множества A, и возвращает булево значение true, если xA, и значение false, если xA

6. MAKENULL(A) – процедура присваивает множеству A значение пустого множества.

7. Процедура INSERT (x, A) делает x элементом множества A.

8. Процедура DELETE (x, A) удаляет элемент x из множества A.

9. Процедура ASSIGN(A, B) присваивает множеству A в качестве значения множество B.

10 Функция MIN (A) возвращает наименьший элемент множества A. Для применения функции необходимо, чтобы множество A было параметризовано и его элементы были линейно упорядочены.

11. Функция EQUAL (A, B) возвращает значение true тогда и только тогда, когда множества A и B состоят из одних и тех же элементов.

12. Функция FIND (x) оперирует в среде, где есть набор непересекающихся множеств. Она возвращает имя (единственное) множества, в котором есть элемент x

  1. Хеширование

Хеширование — преобразование по определённому алгоритму входного массива данных произвольной длины в выходную битовую строку фиксированной длины. Такие преобразования также называются хеш-функциями или функциями свёртки, а их результаты называют хешем, хеш-кодом или сводкой сообщения (англ. message digest).

Хеширование применяется для сравнения данных: если у двух массивов хеш-коды разные, массивы гарантированно различаются; если одинаковые — массивы, скорее всего, одинаковы. В общем случае однозначного соответствия между исходными данными и хеш-кодом нет в силу того, что количество значений хеш-функций меньше, чем вариантов входного массива; существует множество массивов с разным содержимым, но дающих одинаковые хеш-коды — так называемые коллизии. Вероятность возникновения коллизий играет немаловажную роль в оценке качества хеш-функций.

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

Словари

Абстрактый тип множеств с операторами MAKENULL, INSERT, DELETE и MEMBER называется DICTIONARY (Словарь)

Реализация словарей

  1. Сортированные или неотсортированные связанные списки;

  2. Двоичные векторы (когда элементы множества можно сопоставить с элементами множества целых чисел 1,…., N для некоторого N;

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

Оператор

Способ реализации словаря

1

2

3

INSERT

O(N)

O(1)

O(N)

DELETE

O(N)

O(1)

O(N)

MEMBER

O(N)

O(1)

O(N)

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

Ключи – числа из множества U= {0, 1, …, m-1}

Для хранения множества используется массив T[0..m-1], называемый таблицей с прямой адресацией (direct-address table).