Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АиПА / Лекции / 6_Комбинаторные задачи и вычисл на множествах.doc
Скачиваний:
16
Добавлен:
07.02.2016
Размер:
150.53 Кб
Скачать

11

2010.11.17

В.П. Пинчук

Анализ и построение алгоритмов. Краткий конспект лекций -

Запорожье: ЗНТУ, 2010.

Глава 5

комбинаторные задачи и вычисления на множествах

1. Понятие множества. Представление множества для вычислений

2. Набор операций для множеств

3. Алгоритмы выполнения основных операций над множествами и их эффективность

4. Получение полных наборов комбинаторных объектов. Перестановки

5. Подмножества

6. Разбиения

7. Поиск наибольшей монотонно возрастающей подпоследовательности

1. Понятие множества. Представление множества для вычислений

Множество

Определение. Способы задания множества: перечисление элементов, предикатный метод. Универсальное множество (универсум).

Представление множеств для вычислений

Так как бесконечные множества не являются объектами дискретных вычислений, рассматриваются только конечные множества. Для представления множеств при компьютерных вычислениях используются три базовые структуры данных:

- битовый вектор;

- неупорядоченный массив целых чисел;

- упорядоченный массив целых чисел.

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

Под универсумом (универсальным множеством) понимают множество, включающее в себя элементы любого множества, используемого в данном рассмотрении. Таким образом, если U – универсальное множество, а A – некоторое множество в данном рассмотрении, то имеем: A: AU (и всегда необходимо добавлять: в данном рассмотрении).

Битовый вектор

Битовый вектор представляет собой бинарный код, размер которого соответствует мощности универсального множества. Пусть A – рассматриваемое множество. Значение i-того элемента битового вектора ai множества A определяется по следующему правилу: ai = 1, если i-тый элемент универсума принадлежит множеству A, и ai = 1, если нет.

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

Неупорядоченный массив целых чисел

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

Упорядоченный массив целых чисел

Упорядоченный массив также может быть простым или динамическим. Преимуществом использования упорядоченного массива является малое время выполнения основных операций, прежде всего проверки принадлежности. Связано это с возможностью использования алгоритма бинарного поиска, имеющего время O(ln(n)), где n =|A|, A – рассматриваемое множество. Недостатком является необходимость поддерживать упорядоченность массива при выполнении любой операции над множеством.

Для представления множеств при выполнении компьютерных вычислений создают или используют, в соответствии с технологией объектно-ориентированного программирования, соответствующие классы. Например, можно использовать класс Set из стандартной библиотеки STL для С++.