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