Упорядоченное множество — различия между версиями

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

Версия 20:42, 3 июня 2015

Определение:
Упорядоченное множество [math]Set[/math] представляет собой коллекцию элементов [math]elem[/math], каждому из которых присваивается определенный ключ [math]key[/math], отвечающий за порядок этого элемента в множестве. Бинарное отношение [math]R[/math] на упорядоченном множестве [math]Set[/math] является отношением порядка.

Вполне упорядоченным множеством, которое явяется важнейшим частным случаем, называется упорядоченное множество, каждое непустое подмножество которого содержит минимальный элемент.

Операции над упорядоченным множеством

Над упорядоченным множеством [math]Set[/math] заданы следующие операции:

Insert

Функция [math]\mathrm {insert(Set, elem, elemKey)}[/math] добавляет заданный элемент [math]elem[/math], имеющий ключ [math]elemKey[/math], в подходящее место множества [math]Set[/math] (сохраняя свойство упорядоченности).

Delete

Функция [math]\mathrm {delete(Set, key)}[/math] удаляет элемент, имеющий ключ [math]key[/math] (сохраняя свойство упорядоченности).

Search

Функция [math]\mathrm {search(Set, key)}[/math], которая получает на вход искомый ключ [math]key[/math], и возвращает указатель на элемент множества [math]Set[/math] или специальное значение [math]null[/math], если такого элемента нет.

Minimum

Функция [math]\mathrm {minimum(Set)}[/math] возвращает указатель на минимальный элемент множества [math]Set[/math].

Maximum

Функция [math]\mathrm {maximum(Set)}[/math] возвращает указатель на максимальный элемент множества [math]Set[/math].

Predecessor

Функция [math]\mathrm {predecessor(Set, elem)}[/math] возвращает указатель на элемент, стоящий перед элементом [math]elem[/math] множества [math]Set[/math].

Successor

Функция [math]\mathrm {successor(Set, elem)}[/math] возвращает указатель на элемент, стоящий после элемента [math]elem[/math] множества [math]Set[/math].

Наивная реализация на массиве

Пусть [math]Set[/math] — упорядоченное множество (массив), состоящее из [math]n[/math] элементов. В [math]Set[1, i][/math] хранятся элементы множества, в [math]Set[2, i][/math] — их ключи.

Функция [math]\mathrm {insert(Set, elem, elemKey)}[/math]:

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

Функция [math]\mathrm {delete(Set, key)}[/math]:

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)

Функция [math]\mathrm {search(Set, key)}[/math]:

int search(Set, key):
    for i = 0 to n - 1
        if Set[2, i] == key
            return Set[1, i]
        else
            return null

Функция [math]\mathrm {minimum(Set)}[/math]:

int minimum(Set):
    return Set[1, 0]

Функция [math]\mathrm {maximum(Set)}[/math]:

int maximum(Set):
    return Set[1, n - 1]

Функция [math]\mathrm {predecessor(Set, elem)}[/math]:

int predecessor(Set, elem):
    for i = 1 to n - 1
        if elem == Set[1, i]
            return Set[1, i - 1]
        else
            return null

Функция [math]\mathrm {successor(Set, elem)}[/math]:

int successor(Set, elem):
    for i = 0 to n - 2
        if elem == Set[1, i]
            return Set[1, i + 1]
        else
            return null

В случае, когда упорядоченность элементов коллекции не важна, возможно использование хешей.

Примеры

  • Графы;
  • Пустое множество [math] \varnothing [/math];
  • Множество натуральных чисел [math] \mathbb N [/math].

Литература

  1. Кормен, Т., Лейзерсон, Ч., Ривест, Р., Алгоритмы: построение и анализ = Introduction to Algorithms / — 1-е изд. — Пер. с англ под ред. А. Шеня. — М.: МЦНМО, 2002.—960 с. — ISBN 5-900916-37-5
  2. Александров П. С. Введение в теорию множеств и общую топологию. — М.: Наука, 1977. — 368 с.
  3. Н. К. Верещагин, А. Шень. Часть 1. Начала теории множеств // Лекции по математической логике и теории алгоритмов. — 2-е изд., испр. — М.: МЦНМО, 2002. — 128 с.