SBP 02 Strukturi NoRestriction

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 66

Технички факултет Битола

Структури и бази на
податоци

2 Структури на податоци
доц. д-р Митко Костов

2010/11
Структури на податоци

 Под структура на податоци се подразбира


начин на сместување и организирање на
податоците во компјутер, така што тие може
ефикасно да се користат.
 Различни видови на структури на податоци се
погодни за различни видови апликации
 Пример, B-стебла се погодни за имплементација на
база на податоци, додека имплементациите на
апликации со компајлирање обично користат hash
табeли.

2010/11
2 М. Костов
Структури на податоци
Name Position
Aaron Manager
Charles VP
George Employee
Jack Employee
Janet VP
John President  два дијаграми за различни видови структури на
Kim Manager податоци:
Larry Manager  Во едната структура, податоците се
Martha Employee организирани во листа.
Patricia Employee  Ова е многу корисно за чување на
Rick Secretary имињата на вработените по азбучен ред,
Sarah VP така што може да се најде записот за некој
Susan Manager вработен многу брзо.
Thomas Employee  Но, оваа структура не е многу корисна за
Zack Employee прикажување на релациите помеѓу
вработените.
 Структурата на стебло е многу попогодна за
2010/11
3 оваа цел. М. Костов
Структури на податоци
 Типови на податоци (според сложеност)

Прости (примитивни) Сложени (структурни)


типови типови
• Вредноста е неделива • Се добиваат со агрегација на
• пр. int  5 повеќе други типови
• Boolean • Вредноста е сложена, се
состои од други вредности
• Character
• пр. запис (Петко, 143/03)
• Integer
• Структурните типови се
• String
нарекуваат и структури на
• Double податоци
• Float

2010/11
4 М. Костов
Структури на податоци

 Линеарни структури
 Секвенцијални, верижни, кружни, површински,
ортогонални
 Нелинеарни структури
 Стебла, нелинеарни листи
 Специјални нелинеарни структури
 Бинарни пребарувачки стебла
 B-стебла, B*-стебла, радикс-стебла,
R и R+-стебла

2010/11
5 М. Костов
Линеарни структури

 Линеарна уреденост
 Секвенца на елементите
 Еден претходник, еден следбеник
 Множество од n≥0 јазли (X(1), X(2),....., X(n))
чии структурни особини подразбираат само
линеарни (еднодимензионални) релативни
позиции на јазлите
 ако n>0, тогаш X(1) е прв јазол;
 ако 1<k<n, тогаш на k-тиот јазол X(k) му претходи
јазолот X(k – 1), а по него следува јазолот X(k+1);
 X(n) е последен јазол

2010/11
6 М. Костов
Линеарни структури
 Операции:
1. пристап до k-тиот јазол за да се испита или
измени содржината на неговите полиња;
2. вметнување нов јазол точно пред k-тиот јазол;
3. бришење на k-ти јазол;
4. комбинирање на две или повеќе листи во
единствена листа;
5. делење на една листа на две или повеќе
листи;
6. правење копија на дадена листа;
7. одредување на бројот на јазлите во една
листа;
8. сортирање на јазлите од листата;
9. пребарување на листата 2010/11
7 М. Костов
Линеарни структури
 Видови линеарни структури
 Се разликуваат по местото (локацијата) каде се
врши внесување и исфрлање на елементите
 Магацин (стек)
 Се внесува и исфрла (бриши) од истиот крај (врв
на магацинот)
 Ред
 Се внесува на еден, се исфрла на другиот
 Листа
 Внеси/исфрли било каде

2010/11
8 М. Костов
Магацин (stack)
 LIFO структура (Last In First Out)
 Функционира по принципот на стек
 Пример: Кутија за Пез бонбони

2010/11
9 М. Костов
Магацин (stack)

Внесување
или исфрлање

Врв
Излез Влез во магацинот
(локомотива која се Следен од врвот
приклучува на возот,
па потоа излегува со
целата композиција) Трет од врвот

Четврт од врвот

Дно

2010/11
10 М. Костов
Магацин (stack)
 Основни операции
 Вметнување (Push)
 и за иницијализација и
за проверка дали е полн
 Исфрлање (бришење, Pop)
 и за проверка дали е празен

 Останати операции
 Врати врв (Peek)
 Креирање празен магацин
 Број на елементи
 Проверка дали магацинот е празен
 Примери 2010/11
11 М. Костов
Ред (queue)
 FIFO листа (First In First Out)

 Пример: Ред во продавница

2010/11
12 М. Костов
Ред (queue)

 Се разликува чело и заднина на редот


 Елементите се ставаат на крајот (заднината),
а се земаат од почетокот на листата (челото),
како кај ред во продавница

внесување

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

бришење

2010/11
13 М. Костов
Ред (queue)

 Основни операции
 Вметнување (Enqueue)
 Исфрлање (Dequeue)
 Останати операции
 Број на елементи
 Креирање празен ред
 Проверка дали редот е празен

2010/11
14 М. Костов
Ред со два краја

 Вметнувањето и исфрлувањето се врши од двете


страни, т.е. двата краја.

2010/11
15 М. Костов
Ред со два краја

 Се разликува лев и десен крај на редот

внесување
или бришење

втор од втор од
најлев најдесен
лево десно

внесување
или бришење

2010/11
16 М. Костов
Ознаки

 TOP(А) врвниот елемент на магацинот А;


 А⇐X X e внесен на врвот од магацинот А
или X е внесен од заднината на редот
А;
 X⇐А во променливата X е сместен врвниот
елемент од магацинот А или од челото
на редот А

2010/11
17 М. Костов
Листа (list)

 Секвенца од елементи од ист тип


 Елементот (јазолот) во себе чува вредност
 Операции
 Вметнување
 Исфрлање
 Број на елементи
 Бришење на сите елементи

2010/11
18 М. Костов
Секвенцијални структури

 Наједноставен начин за чување на линеарна


структура во меморијата е нејзините јазли да
се постават секвенцијално
(последователно) или јазол по јазол
LOC(X(j + 1)) = LOC (X(j)) + c,
 каде c е број на зборови во јазолот

Адреса Содржина
Adr1 12
Adr1 + c 99
Adr1 + 2c 37

2010/11
19 М. Костов
Поврзана листа (linked list)
верижна
 Поврзаната листа е една од основните динамички
структури на податоци
 Претставува низа од елементи, од кои секој
елемент има 2 полиња
 Во едното е вредноста на елементот (она што би
било на тоа место во обична низа), а во другото
покажувач на следниот елемент во низата.
 Последниот елемент покажува на NULL.
 Типови на поврзани листи: еднострано
поврзани, двострано поврзани и кружни листи

 Еднострано поврзана листа (singly-linked)

2010/11
20 М. Костов
Поврзана листа (linked list)
верижна

 Секвенцијално и верижно доделување

Адреса Содржина Адреса Содржина Покажувач


Adr1 12 Adr1 12 Adr2
Adr1 + c 99 Adr2 99 Adr3
Adr1 + 2c 37 Adr3 37 Λ

Λ - нулта врска

2010/11
21 М. Костов
Поврзана листа (linked list)
верижна

 Покрај еднострано поврзани постојат и двострано


поврзани листи и кружни листи

 Двострано поврзана листа (doubly-linked)

2010/11
22 М. Костов
Поврзана листа (linked list)
 Кружно поврзана (циклична) листа
(Circularly-linked list)
 листа во која нејзиниот последен јазол е поврзан со
првиот  можен е пристап до било кое место во
листата

12 45 2 37

12 45 37

2010/11
23 М. Костов
Имплементација

24
Магацин (stack)

 Како статичка структура

 Пример:

12 37 45 2

top

2010/11
25 М. Костов
Магацин (stack)
 Вметнување

пред

12 37 45 2
после
top

12 37 45 2 17

top

2010/11
26 М. Костов
Магацин (stack)
 Исфрлање

пред

12 37 45 2
после
top

12 37 45 2

top

2010/11
27 М. Костов
 Како динамичка структура

top
45 2 37

2010/11
28 М. Костов
 Вметнување

пред
top
2 37

после
45

top
45 2 37

2010/11
29 М. Костов
 Исфрлање

пред

top
45 2 37
после

top
2 37

2010/11
30 М. Костов
 Исфрлање на јазол од листата
 Се менува само покажувачот
 Вметнување на јазол во средината на листата
 Со промена на покажувачите

2010/11
31 М. Костов
Површински листи

 Генерализација
 дводимензионална или
повеќедимензионална површинска листа од
информации

 A(1,1) L A(1, m) 
 M 
 
 A(m, m) A(m, m)

 Секој елемент припаѓа на 2 линеарни листи


 листата на редицата i и листата на
колоната j
 Секвенцијални, верижни
2010/11
32 М. Костов
Стебла

33
Основни термини

 Нелинеарност на структурата
 Разгранета хиерархиска структура
 Стеблата овозможуваат побрзо минување и
манипулација
 Корен
 Родител – дете
 Потстебла

2010/11
34 М. Костов
2010/11
35 М. Костов
Основни термини

 Деф: Стебло T е множество јазли со однос


родител-дете со следните особини:
 T содржи почетен јазол k кој се нарекува корен
 Секој јазол p од множеството T има родител r,
освен јазолот k
 Дете
 Браќа
 Надворешни – внатрешни јазли
 Предок – потомок

2010/11
36 М. Костов
2010/11
37 М. Костов
Основни термини
 Уреденост на стеблото
 Децата се уредени по некој редослед така што се
знае кое е прво дете, кое е второ, ...
 Потстебло
 Јазол заедно со неговите потомци, за кои тој јазол е
корен
 Гранка (раб) G
 Линиски сегмент кој поврзува два јазли
D E
 Лист F
 Јазол кој нема деца
B C

А
2010/11
38 М. Костов
Основни термини
 Пат, должина на патот
 Пат – низа од една или повеќе гранки кои поврзуваат
два јазли
 Должина на пат е бројот на гранки што ги содржи
патот
 Ниво на јазел ниво 3 G
 Должината на патот од
коренот до тој јазол ниво 2 D E
F
 Висина на стеблото
 Висина на стеблото е ниво 1 B C
највисокото ниво на
стеблото зголемено за
еден ниво 0 А
2010/11
39 М. Костов
Основни термини
 Потполно стебло
 Сите листови се на исто ниво
 Комплетно стебло
 Сите внатрешни јазли
ниво 3 G
имаат n деца (содржи
максимален број јазли за ниво 2 D E
неговата висина) F
 Балансирано стебло
ниво 1 B C

ниво 0 А

2010/11
40 М. Костов
Видови стебла
 Бинарно стебло
 Секој јазол има најмногу две деца
 Комплетно бинарно стебло
 Вкупен број на јазли
(20+21+22+...+2n)
 Лево дете, десно дете
 Лево потстебло, десно потстебло

25

13 17

5 8 3
2010/11
41 М. Костов
Видови стебла
 Heap
 Вид на бинарно стебло, за кое е задоволен условот
децата на секој јазол да се секогаш поголеми или
еднакви од/на самиот јазол
 Голема примена: често е потребно да се знае во секој
момент кој е најмал елемент на некоја низа (тоа е
првиот елемент во heap-от)

max heap min heap 2010/11


42 М. Костов
Видови стебла
 Бинарно пребарувачко стебло (Binary search tree)
 Дрво во кое левото дете на секој јазол е секогаш помало
од јазолот, a десното секогаш поголемо
 Служи за организирање поголем број на податоци

10

5 16

2 8 26

6 9 20

2010/11
43 М. Костов
Видови стебла
 AVL стебло бинарно пребарувачко стебло
балансирано по висина
 За секој внатрешен јазол разликата во висината на
левото и десното потстебло е најмногу 1
 При секое додавање или исфрлање на елемент, се
внимава стеблото да остане избалансирано

2010/11
44 М. Костов
Видови стебла
 Бинарно пребарувачко стебло (Binary search tree)
 Основни операции:
 Пребарување јазол
 Вметнување јазол
 Бришење јазол
 Ако јазолот не е лист, треба да се зачуваат
потстеблата на избришаниот јазол

2010/11
45 М. Костов
Минување низ стебло

 Постојат повеќе методи за минување низ јазлите


во бинарното стебло
 Секој јазел се посетува точно еднаш

 Префиксно (preorder)
 корен-лево-десно A

 Инфиксно (inorder)
B G
 лево-корен-десно
 Постфиксно (postorder) C D H

 лево-десно-корен
E F I
2010/11
46 М. Костов
((((3 + 1) × 3)/((9 − 5) + 2)) − ((3 × (7 − 4)) + 6))

2010/11
47 М. Костов
Видови стебла
 B стебло
 Чува сортирани податоци
 Дозволува пребарувања, додавања, бришења
и секвенцијален пристап
 Генерализација на бинарно пребарувачко дрво
 Постојат повеќе од две патеки од еден јазол

2010/11
48 М. Костов
Видови стебла
 B стебло
 За разлика од бинарното дрво, секој јазол може да има
различен број на клучеви и деца
 Клуч на јазол - вредностите на едно или повеќе полиња од
јазолот
 Клучевите се сместени во неопаѓачки редослед
 На секој клуч му е придружено дете кое е корен на
потстебло кое ги содржи сите јазли со клучеви помали
или еднакви на клучот, но поголеми од претходниот
клуч
 Најдесно дете

2010/11
49 М. Костов
Видови стебла
 B стебло
 Деф. B стебло од ред m (максимален број на деца за
секој јазол)
 Секој јазол има најмногу m деца
 Секој јазол (освен коренот) има најмалку m⁄2 деца
 Коренот има најмалку две деца освен ако не е лист
 Сите листови се на исто ниво
 Јазол со k деца содржи k-1 клучеви

2010/11
50 М. Костов
Видови стебла
 B* стебло
 B-стебло во кое секој јазол е најмалку две
третини исполнет (наместо половина)

2010/11
51 М. Костов
Граф
 Стеблото е специјален случај на граф
 Графовите се слични на стеблата само што имаат
помалку ограничувања
 Стеблото има почетен јазол - корен и сите други јазли
во стеблото се деца на овој јазол
 Сите јазли кај стеблото имаат многу деца, но само
еден родител
 Со ослободување од овие ограничувања, добиваме
структура на податоци - граф

2010/11
52 М. Костов
Граф
 Графот нема корен како стеблото
 Наместо тоа, секој јазол може да биде поврзан со
било кој друг јазол
 Јазлите немаат родител/дете врска
 Јазлите се нарекуваат соседи ако се поврзани со
гранка (раб)
 Пример, јазелот A има три соседи: B, C и D
 Примена на графот за претставување податоци
 Секој од јазлите може да претставува град и
рабовите кои ги поврзуваат претставуваат патишта
 Со граф може да се претстави компјутерска мрежа
каде јазлите се работните станици, а рабовите -
мрежните конекции 2010/11
53 М. Костов
Граф
- дефиниции -
 Деф: Граф е Множество од линиски сегменти
(наречени гранки или рабови) и јазли
(темиња) како крајни точки на гранките

 Графот е ориентиран (насочен) ако на секоја


гранка е доделена ориентација

2010/11
54 М. Костов
Граф
- дефиниции -
 Бројот на јазли се нарекува степен на графот
 Нулти граф е граф со степен нула
 Јамки се рабови кои поврзуваат едно теме само
со себе
 Графот G се нарекува прост граф ако
 не содржи јамки и
 не постои повеќе од еден раб кој поврзува еден
пар темиња

2010/11
55 М. Костов
Граф
- дефиниции -
 Патека (пат) во граф е уредена низа од јазли и
гранки во која секоја гранка има заеднички јазол
со претходната и во која секој јазол може да се
јави само едаш
 Должина на патека е бројот на гранки што тој
ги содржи
 Поврзан граф е графот во кој има најмалку една
патека помеѓу било кои два јазли
 Циклус (контура) дел од граф во кој на секој
јазол припаѓаат две и само две гранки
 Ацикличен граф е граф без циклуси

2010/11
56 М. Костов
Граф
- дефиниции -
 Влезен степен на теме (ознака INDEG(v)) во
насочен граф е бројот на рабови што завршуваат
(влегуваат) во тоа теме
 Излезен степен на теме (ознака OUTDEG(v)) во
насочен граф е бројот на рабови што излегуваат
од тоа теме
 Степен на теме е збир на влезниот и излезниот
степен.

2010/11
57 М. Костов
Граф

 Претстава на графовите во компјутерите – преку


матрица

2010/11
58 М. Костов
Граф

 Матрица на инциденција А
 Го опишува графот алгебарски

2010/11
59 М. Костов
Hash табела
 Hash табела е структура на податоци која
користи hash функција за ефикасно мапирање на
одредени идентификатори или клучеви (пр.
имиња на лица) во придружни вредности (пр.
нивните телефонски броеви).
 Hash функција е секоја добро дефинирана
процедура или математичка функција која
конвертира голема количина на податоци со
променлива големина во мал број, обично integer
кој може да служи како индекс на поле.
 Најчесто се користи за забрзување на пристапот до
податоците во табела, споредување, криптографија
 Вредностите вратени од hash функцијата се
наречени hash вредности, hash кодови или
само hash. 2010/11
60 М. Костов
Hash табела
 Секој елемент кој сакаме да го сместиме во оваа
структура на податоци го “хашираме“, т.е.
пресметуваме вредност која некоја hash функција
ја дава за него, и го сместуваме на тоа место во
табелата.

 Пример.
 Имаме низа од 1000 елементи
 Ако ја знаеме позицијата на конкретен елемент сместен
во низата, можеме брзо да пристапеме до него
 Знаеме дека даден елемент е на позиција 3
 x=arr[3] 2010/11
61 М. Костов
Hash табела
 Корисно за брзо пребарување
 Предност
 Брзината
 Недостаток
 Потешко за имплементација
 Избор на ефикасна hash функција за конкретна
апликација

2010/11
62 М. Костов
Hash табела

2010/11
63 М. Костов
Hash табела
 Пример: Треба да се зачуваат имињата на учениците
од некое одделение и уште еден податок за секој
ученик, на пример телефонскиот број.
 Пример за hash функција може да се земе збирот од
ASCII вредностите на сите букви во името по модулот на
големината на табелата (најпожелно е да е некој прост
број).
 Ако тоа место е заземено, се додава уште еден внес во
истото поле.
 Кога треба да се најде телефонскиот број на Мирко, ги
собираме ASCII вредностите на буквите во зборот
“Мирко", ја земаме таа вредност по модулот на
големината на таблицата, и бараме на тоа место во hash
табелата.

2010/11
64 М. Костов
Hash табела

0 Ана
1
2
3 Марија
4 Мирко 12345
5
...

2010/11
65 М. Костов
Hash табела
 Примена
 Структури добри за ситуации за брзо пребарување на
енормна количина податоци:
 Возачки дозволи. Со hash табела, брзо може да се
добие информација за возачот (име, адреса, возраст)
преку бројот на возачката дозвола.
 Компајлирање. Компајлерот користи табела со
симболи за зачувување на симболите дефинирани од
корисникот во еден C++ програм.
 Интернет пребарувачите.
 Тел. база на податоци. Брзо пребарување на тел.
број.
 Електронски библиот. каталози. Брзо пребарување
статија.
 Лозинки кај повеќекориснички системи. Брзо
пребарување на лозинката за дадено корисничко М.име.
2010/11
66 Костов

You might also like