Упорядоченное множество — различия между версиями
Lephyora (обсуждение | вклад) |
Lephyora (обсуждение | вклад) |
||
| Строка 27: | Строка 27: | ||
=== Successor === | === Successor === | ||
Функция <tex>\mathrm {successor(Set, elem)}</tex> возвращает указатель на элемент, стоящий после элемента <tex>elem</tex> множества <tex>Set</tex>. | Функция <tex>\mathrm {successor(Set, elem)}</tex> возвращает указатель на элемент, стоящий после элемента <tex>elem</tex> множества <tex>Set</tex>. | ||
| + | |||
| + | ==Наивная реализация на массиве== | ||
| + | Пусть Set -- упорядоченное множество (массив), состоящее из n элементов. В | ||
| + | Set[1, i] хранятся элементы множества, в Set[2, i] -- их ключи. | ||
| + | |||
| + | int Set[2, n] | ||
| + | func initialize(): | ||
| + | for i = 0 to n - 1 | ||
| + | Set[1, i] = i | ||
| + | Set[2, i] = i + 1 | ||
| + | |||
| + | Функция insert добавляет заданный элемент elem, имеющий ключ elemKey, в | ||
| + | подходящее место множества Set (сохраняя свойство упорядоченности). | ||
| + | |||
| + | func insert(Set, elem, elemKey): | ||
| + | n = n + 1 | ||
| + | A rray.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 | ||
| + | |||
| + | Функция delete удаляет элемент, имеющий ключ key (сохраняя свойство | ||
| + | упорядоченности). | ||
| + | |||
| + | 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) | ||
| + | |||
| + | Функция search, которая получает на вход искомый ключ key, и возвращает | ||
| + | указатель на элемент множества Set или специальное значение null, если такого | ||
| + | элемента нет. | ||
| + | |||
| + | int search(Set, key): | ||
| + | for i = 0 to n - 1 | ||
| + | if Set[2, i] == key | ||
| + | return Set[1, i] | ||
| + | else return null | ||
| + | |||
| + | Функция minimum возвращает указатель на минимальный элемент множества Set. | ||
| + | |||
| + | int Minimum(Set): | ||
| + | return Set[1, 0] | ||
| + | |||
| + | Функция maximum возвращает указатель на максимальный элемент множества Set. | ||
| + | |||
| + | int maximum(Set): | ||
| + | return Set[1, n - 1] | ||
| + | |||
| + | Функция predecessor возвращает указатель на элемент, стоящий перед элементом | ||
| + | elem множества Set. | ||
| + | |||
| + | int predecessor(Set, elem): | ||
| + | for i = 1 to n - 1 | ||
| + | if elem == Set[1, i] | ||
| + | return Set[1, i - 1] | ||
| + | else return null | ||
| + | |||
| + | Функция successor(Set, elem) возвращает указатель на элемент, стоящий после | ||
| + | элемента elem множества Set. | ||
| + | |||
| + | int successor(Set, elem): | ||
| + | for i = 0 to n - 2 | ||
| + | if elem == Set[1, i] | ||
| + | return Set[1, i + 1] | ||
| + | else return null | ||
==Примеры== | ==Примеры== | ||
Версия 19:54, 3 июня 2015
| Определение: |
| Упорядоченное множество представляет собой коллекцию элементов , каждому из которых присваивается определенный ключ , отвечающий за порядок этого элемента в множестве. Бинарное отношение на упорядоченном множестве является отношением порядка. |
Вполне упорядоченным множеством, которое явяется важнейшим частным случаем, называется упорядоченное множество, каждое непустое подмножество которого содержит минимальный элемент.
Содержание
Операции над упорядоченным множеством
Над упорядоченным множеством заданы следующие операции:
Insert
Функция добавляет заданный элемент , имеющий ключ , в подходящее место множества (сохраняя свойство упорядоченности).
Delete
Функция удаляет элемент, имеющий ключ (сохраняя свойство упорядоченности).
Search
Функция , которая получает на вход искомый ключ , и возвращает указатель на элемент множества или специальное значение , если такого элемента нет.
Minimum
Функция возвращает указатель на минимальный элемент множества .
Maximum
Функция возвращает указатель на максимальный элемент множества .
Predecessor
Функция возвращает указатель на элемент, стоящий перед элементом множества .
Successor
Функция возвращает указатель на элемент, стоящий после элемента множества .
Наивная реализация на массиве
Пусть Set -- упорядоченное множество (массив), состоящее из n элементов. В Set[1, i] хранятся элементы множества, в Set[2, i] -- их ключи.
int Set[2, n] func initialize():
for i = 0 to n - 1
Set[1, i] = i
Set[2, i] = i + 1
Функция insert добавляет заданный элемент elem, имеющий ключ elemKey, в подходящее место множества Set (сохраняя свойство упорядоченности).
func insert(Set, elem, elemKey):
n = n + 1
A rray.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
Функция delete удаляет элемент, имеющий ключ key (сохраняя свойство упорядоченности).
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)
Функция search, которая получает на вход искомый ключ key, и возвращает указатель на элемент множества Set или специальное значение null, если такого элемента нет.
int search(Set, key):
for i = 0 to n - 1
if Set[2, i] == key
return Set[1, i]
else return null
Функция minimum возвращает указатель на минимальный элемент множества Set.
int Minimum(Set):
return Set[1, 0]
Функция maximum возвращает указатель на максимальный элемент множества Set.
int maximum(Set):
return Set[1, n - 1]
Функция predecessor возвращает указатель на элемент, стоящий перед элементом elem множества Set.
int predecessor(Set, elem):
for i = 1 to n - 1
if elem == Set[1, i]
return Set[1, i - 1]
else return null
Функция successor(Set, elem) возвращает указатель на элемент, стоящий после элемента elem множества Set.
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 с.