Изменения

Перейти к: навигация, поиск

Упорядоченное множество

367 байт убрано, 20:42, 3 июня 2015
Нет описания правки
==Наивная реализация на массиве==
Пусть <tex>Set -- </tex> — упорядоченное множество (массив), состоящее из <tex>n </tex> элементов. В<tex>Set[1, i] </tex> хранятся элементы множества, в <tex>Set[2, i] -- </tex> — их ключи.
int Функция <tex>\mathrm {insert(Set[2, n]elem, elemKey)}</tex>:<code> '''func initialize''' insert(Set, elem, elemKey): for n = n + 1 Array.Resize(Set[2], n) i = 0 to 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>
Функция insert добавляет заданный элемент elem<tex>\mathrm {delete(Set, имеющий ключ elemKeykey)}</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>
func insertФункция <tex>\mathrm {search(Set, elem, elemKeykey)}</tex>: n = n + 1<code>A rray.Resize '''int''' search(Set[2], nkey): '''for''' i = 0 '''to''' n - 1 Set[1, i] = Set[1, i - 1] '''if''' Set[2, i] = Set[2, i - 1] while elemKey < Set[2, i - 1] Set[1, i - 1] = Set[1, i - 2]key '''return''' Set[2, i - 1] = Set[2, i - 2] i = i - 1 '''else''' Set[1, i] = elem '''return''' null Set[2, i] = elemKey</code>
Функция delete удаляет элемент, имеющий ключ key <tex>\mathrm {minimum(сохраняя свойствоSet)}</tex>:<code>упорядоченности '''int''' minimum(Set).: '''return''' Set[1, 0]</code>
func deleteФункция <tex>\mathrm {maximum(Set, key)}</tex>: i = 0 while i < ncode> if key == '''int''' maximum(Set[2, i]): for j = i to n - 2 Set[1, j] = '''return''' Set[1, j + 1] Set[2, j] = Set[2, j + 1] n = n - 1] Array.Resize(Set[2], n)</code>
Функция search<tex>\mathrm {predecessor(Set, elem)}</tex>:<code> '''int''' predecessor(Set, которая получает на вход искомый ключ keyelem): '''for''' i = 1 '''to''' n - 1 '''if''' elem == Set[1, и возвращаетi]указатель на элемент множества '''return''' Set или специальное значение [1, i - 1] '''else''' '''return''' null, если такогоэлемента нет.</code>
Функция <tex>\mathrm {successor(Set, elem)}</tex>:<code> '''int search''' successor(Set, keyelem): '''for ''' i = 0 '''to ''' n - 12 '''if ''' elem == Set[21, i] == key '''return ''' Set[1, i+ 1] '''else ''' '''return ''' null</code>
Функция 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 множества Setint successor(Set, elem): for i = 0 to n - 2 if elem == Set[1, i] return Set[1, i + 1] else return null
==Примеры==
21
правка

Навигация