11. Речници - първа част

Речник АТД
Log файлове
Нареден речник АТД
Lookup таблици
Двоично търсене
Сравнение на прости реализации на нареден речник АТД


Речници (Dictionaries)

Речник АТД

Function
Input
Output
Description
size()
-
Integer
Връща броя на елементите на D.
isEmpty()
-
Boolean
Проверява дали D е празен.
elements()
-
Iterator of objects (elements)
Връща елементите, записани в D.
keys()
-
Iterator of objects (keys) Връща ключовете, записани в D.
find(k)
Object k (key) Position
Ако D съдържа член с ключ, равен на k, връща позицията на този член. Ако не, връща nullposition.
findAll(k)
Object k (key) Iterator of Positions Връща итератор от позициите на всички членове, чийто ключове са равни на k.
insertItem(k,e)
Objects: k (key) and e (element) -
Вмъква двойка с ключ k и елемент e в D.
removeElement(k)
Object k (key)
-
Премахва член с ключ равен на k от D. Ако в D няма такъв член се генерира грешка (error condition).
removeAllElements(k)
Object k (key) -
Премахва всички двойки с ключове равни на k от D.
Operation
Output
Dictionary
insertItem(5,A)
insertItem(7,B)
insertItem(2,C)
insertItem(8,D)
insertItem(2,E)
find(7)
find(4)
find(2)
findAll(2)
size()
removeElement(5)
removeElement(5)
removeAllElements(2)
find(2)
findAll(2)

-
-
-
-
-
p(B)
"nullposition"
p(C) or p(E)
p(C),p(E)
5
-
"error"
-
"nullposition"
"empty iterator"
{(5,A)}
{(5,A),(7,B)}
{(5,A),(7,B),(2,C)}
{(5,A),(7,B),(2,C),(8,D)}
{(5,A),(7,B),(2,C),(8,D),(2,E)}
{(5,A),(7,B),(2,C),(8,D),(2,E)}
{(5,A),(7,B),(2,C),(8,D),(2,E)}
{(5,A),(7,B),(2,C),(8,D),(2,E)}
{(5,A),(7,B),(2,C),(8,D),(2,E)}
{(5,A),(7,B),(2,C),(8,D),(2,E)}
{(7,B),(2,C),(8,D),(2,E)}
{(7,B),(2,C),(8,D),(2,E)}
{(7,B),(8,D)}
{(7,B),(8,D)}
{(7,B),(8,D)}
Operation
Input
Output
Description
element() -
Object (element) Връща псевдоним на елемента от двойката на тази позиция.
key() -
Object (key) Връща константен псевдоним на ключа от двойката на тази позиция.
isNull() -
Boolean
Връща true, ако това е nullposition.

Log файлове

LINEAR search with FLAMENCO dance


Наредени речници

В нареден речник се иска, освен обичайните операции за речник, да поддържа и такива, свързани с наредбата на ключовете.

Нареден речник АТД


Нареденият речник поддържа следните функции извън тези, включени в общия речник АТД:

Пример:
позиции: 0 1 2 3 4 5 6 7 8 9
ключове: 2 3 3 4 4 4 5 7 9 9

closestBefore(5) -> позиция 6, ключ 5
closestBefore(4) -> позиции 3, 4 или 5, ключ 4
closestBefore(6) -> позиция 6, ключ 5

closestAfter(5) -> позиция 6, ключ 5
closestAfter(4) -> позиции 3, 4 или 5, ключ 4
closestAfter(6) -> позиция 7, ключ 7

Lookup таблици
Двоично търсене [ООП]


От курса по ООП: bsearch.cpp

Двоично търсене:  алгоритъм и писане на програма на С++ (на английски).

BINARY search with FLAMENCO dance

Анализ на двоично търсене

Сравнение на прости реализации на нареден речник АТД

Function
Log File
Lookup Table
size(), isEmpty()
O(1)
O(1)
keys(), elements()
O(n)
O(n)
find(key)
O(n)
O(log n)
findAll(key)
O(n)
O(log n + s)
insertItem(key, element)
O(1)
O(n)
removeElement(key)
O(n)
O(n)
removeAllElements(key)
O(n) O(n)