Упорядоченное множество
| Определение: |
| Упорядоченное множество представляет собой коллекцию элементов , каждому из которых присваивается определенный ключ , отвечающий за порядок этого элемента в множестве. Бинарное отношение на упорядоченном множестве является отношением порядка. |
Вполне упорядоченным множеством, которое явяется важнейшим частным случаем, называется упорядоченное множество, каждое непустое подмножество которого содержит минимальный элемент.
Операции над упорядоченным множеством
Над упорядоченным множеством заданы следующие операции:
Insert
Функция добавляет заданный элемент , имеющий ключ , в подходящее место множества (сохраняя свойство упорядоченности).
Delete
Функция удаляет элемент, имеющий ключ (сохраняя свойство упорядоченности).
Search
Функция , которая получает на вход искомый ключ , и возвращает указатель на элемент множества или специальное значение , если такого элемента нет.
Minimum
Функция возвращает указатель на минимальный элемент множества .
Maximum
Функция возвращает указатель на максимальный элемент множества .
Predecessor
Функция возвращает указатель на элемент, стоящий перед элементом множества .
Successor
Функция возвращает указатель на элемент, стоящий после элемента множества .
Наивная реализация на массиве
Пусть — упорядоченное множество (массив), состоящее из элементов. В хранятся элементы множества, в — их ключи.
Функция :
func insert(Set, elem, elemKey):
n = n + 1
Array.Resize(Set[2], n)
i = n - 1
Set[1, i] = Set[1, i - 1]
Set[2, i] = Set[2, i - 1]
while elemKey < Set[2, i - 1]
Set[1, i - 1] = Set[1, i - 2]
Set[2, i - 1] = Set[2, i - 2]
i = i - 1
Set[1, i] = elem
Set[2, i] = elemKey
Функция :
func delete(Set, key):
i = 0
while i < n
if key == Set[2, i]
for j = i to n - 2
Set[1, j] = Set[1, j + 1]
Set[2, j] = Set[2, j + 1]
n = n - 1
Array.Resize(Set[2], n)
Функция :
int search(Set, key):
for i = 0 to n - 1
if Set[2, i] == key
return Set[1, i]
else
return null
Функция :
int minimum(Set):
return Set[1, 0]
Функция :
int maximum(Set):
return Set[1, n - 1]
Функция :
int predecessor(Set, elem):
for i = 1 to n - 1
if elem == Set[1, i]
return Set[1, i - 1]
else
return null
Функция :
int successor(Set, elem):
for i = 0 to n - 2
if elem == Set[1, i]
return Set[1, i + 1]
else
return null
В случае, когда упорядоченность элементов коллекции не важна, возможно использование хешей.
Примеры
- Графы;
- Пустое множество ;
- Множество натуральных чисел .
Литература
- Кормен, Т., Лейзерсон, Ч., Ривест, Р., Алгоритмы: построение и анализ = Introduction to Algorithms / — 1-е изд. — Пер. с англ под ред. А. Шеня. — М.: МЦНМО, 2002.—960 с. — ISBN 5-900916-37-5
- Александров П. С. Введение в теорию множеств и общую топологию. — М.: Наука, 1977. — 368 с.
- Н. К. Верещагин, А. Шень. Часть 1. Начала теории множеств // Лекции по математической логике и теории алгоритмов. — 2-е изд., испр. — М.: МЦНМО, 2002. — 128 с.