background image

1

Algorytmy i struktury danych, temat 2

ALGORYTMY I STRUKTURY DANYCH

WAT, 2008

Dr hab..inż. Andrzej Walczak, prof. WAT

awalczak@wat.edu.pl

Konspekt wykładu

background image

Algorytmy i struktury 

danych

Struktury danych

background image

3

Algorytmy i struktury danych, temat 2

Wykład 2: Podstawy struktur 

danych

definicja struktury danych

liniowe struktury danych

tablice z haszowaniem

struktury drzewiaste

sposoby realizacji struktur danych

background image

4

Algorytmy i struktury danych, temat 2

Wykład 2: Podstawy struktur 

danych

Co to jest relacja?

Co to jest iloczyn kartezjański?

background image

5

Algorytmy i struktury danych, temat 2

Definicja struktury danych

Definicja 2.1:

Strukturą danych nazywamy trójkę uporządkowaną   

S=(D, R, 

e)

,

gdzie:

D

 – oznacza zbiór danych elementarnych 

d

i, i = 1,..,|D|

 (i – 

jest indeksem poszczególnych danych),

R={r

we

, N}

 – jest zbiorem dwóch relacji określonych na 

strukturze danych:

                      – relacja wejścia do struktury danych S,

                      – relacja  następstwa (porządkująca) strukturę 
S,

e

 – jest elementem wejściowym do struktury danych S 

(nie jest to dana wchodząca w skład struktury danych S).

D

e

r

we

D

D

N

background image

6

Algorytmy i struktury danych, temat 2

Zbiór danych elementarnych 

D

Jak widać z definicji struktury danych, zbiór danych 
elementarnych jest skończony i dla wygody operowania 
oznaczeniem jego elementów poszczególne dane są 
indeksowane od wartości 1 w kierunku wartości większych. 

Weźmy zatem dla przykładu pięcioelementową strukturę 
danych 

S

. Zapis zbioru jej danych elementarnych może 

wyglądać następująco:

Liczność zbioru danych elementarnych wynosi 5, co 
zapisujemy:

|D|=5

5

4

3

2

1

,

,

,

,

d

d

d

d

d

background image

7

Algorytmy i struktury danych, temat 2

Dana elementarna, zmienna 

programowa

Dana elementarna 

d

i

 jest pojęciem abstrakcyjnym, rozumianym jako 

tzw. „nazwana wartość”. Jest ona określana jako uporządkowana 

dwójka elementów:

                                                          , gdzie:

n

i

 – nazwa danej,

w

i

 – aktualna wartość danej z określonej dziedziny wartości.

Zmienna programowa jest pojęciem związanym z realizacją danej w 

konkretnym środowisku programistycznym. Posiada ona 

zdefiniowaną etykietę (nazwę zmiennej), wraz z określeniem 

dziedziny wartości, którą może przyjmować dana reprezentowana 

przez zmienną, a także zdefiniowaną dla tej dziedziny wartości 

dziedziną algorytmiczną. Czyli np. Float jako typ wskazujący 

dziedzinę wartości i przypisana mu dziedzina algorytmiczna. 

Dziedzina wartości i dziedzina algorytmiczna to pojęcia podane na 

1szym wykładzie

i

i

i

w

n

d

,

background image

8

Algorytmy i struktury danych, temat 2

Relacja 

r

we

 – wskazanie korzenia 

struktury S

Relacja 

r

we

, jest opisywana poprzez jedno- lub wieloelementowy 

zbiór dwójek uporządkowanych elementów, z których pierwszym 
jest zawsze element wejściowy 

e

, natomiast drugim elementem 

jest jedna z danych elementarnych ze zbioru 

D

W sytuacji opisanej powyżej mówimy, że

„element 

e

 należy do dziedziny relacji 

r

we

” - 

Dz(r

we

),

„dana 

d

i

  należy do przeciwdziedziny 

r

we

” – 

PDz(r

we

)

Element (elementy) należące do 

PDz(r

we

)

 są nazywane 

korzeniem (korzeniami) struktury danych S. Struktura musi mieć 
zdefiniowany co najmniej jeden korzeń.

Przykład: Załóżmy, że struktura S posiada dwa korzenie, według 

opisu: 

5

2

,

,

,

d

e

d

e

r

we

background image

9

Algorytmy i struktury danych, temat 2

Relacja 

N

 – ustalenie porządku 

struktury S

Relacja następstwa N opisuje wzajemne uporządkowanie elementów 
w strukturze danych S. Porządek struktury opisujemy w postaci 
zestawów dwójek uporządkowanych elementów.

Przykład: Opiszmy porządek naszej pięcioelementowej struktury 

danych S:

UWAGA: Korzenie struktury S nie mogą być elementami należącymi do

  

                

PDz(N)

3

5

4

3

4

1

3

1

1

2

,

,

,

,

,

,

,

,

,

d

d

d

d

d

d

d

d

d

d

poprzedn

ik

następni

k

background image

10

Algorytmy i struktury danych, temat 2

Model grafowy struktury danych

Aby łatwiej zobrazować strukturę danych i w ten sposób lepiej 
ją zrozumieć, można zbudować dla niej model grafowy. W 
modelu tym:

węzły (kółka) oznaczają poszczególne dane elementarne,

łuki (strzałki) służą do odwzorowania następstw 
poszczególnych danych elementarnych w strukturze S.

Przykład: Model grafowy dla opisywanej do tej pory struktury S:

5

4

3

2

1

,

,

,

,

d

d

d

d

d

5

2

,

,

,

d

e

d

e

r

we

3

5

4

3

4

1

3

1

1

2

,

,

,

,

,

,

,

,

,

d

d

d

d

d

d

d

d

d

d

e

d

2

d

5

d

1

d

3

d

4

liść

korzeń

korzeń

background image

11

Algorytmy i struktury danych, temat 2

Definicja liniowej struktury danych

Definicja 2.2:

Liniową strukturą danych nazywamy strukturę danych 

S=(D, R, 

e)

, w której relacja porządkująca 

N

 opisuje powiązania pomiędzy 

elementami odpowiednio dla poszczególnych rodzajów list.

Wyróżniamy cztery rodzaje list (jednopoziomowych):

• jednokierunkowe listy niecykliczne

• dwukierunkowe listy niecykliczne

• jednokierunkowe listy cykliczne (pierścienie 
jednokierunkowe)

• dwukierunkowe listy cykliczne (pierścienie 
dwukierunkowe)

background image

12

Algorytmy i struktury danych, temat 2

Jednokierunkowe listy niecykliczne

Model grafowy listy jednokierunkowej:

e

d

1

d

2

d

3

d

n

Relacja następstwa dla listy jednokierunkowej L:

1

...

1

,

,

:

,

1

1

D

D

d

d

d

d

N

N

N

i

i

i

i

i

L

L

background image

13

Algorytmy i struktury danych, temat 2

Dwukierunkowe listy niecykliczne

Model grafowy listy dwukierunkowej:

Relacja następstwa dla listy dwukierunkowej Ld:

e

d

1

d

2

d

3

d

n

N

N

D

D

d

d

d

d

N

N

N

N

L

W

i

i

i

i

L

W

L

Ld

i

1

1

1

1

...

1

,

,

:

,

background image

14

Algorytmy i struktury danych, temat 2

Pierścień jednokierunkowy

Model grafowy pierścienia jednokierunkowego:

Relacja następstwa dla pierścienia jednokierunkowego P:

e

d

1

d

2

d

3

d

n

D

D

d

d

d

d

N

N

n

,

,

:

,

1

n

1

n

L

P

background image

15

Algorytmy i struktury danych, temat 2

Złożoność obliczeniowa algorytmów 

sortowania, cd.

Sortowanie przez zamianę (bąbelkowe)

n  - ilość elementów w tablicy,

P

O

 - liczba porównań klucza,

P

Ri

 - liczba przesunięć elementów w tablicy

P

O

 = 0.5 (n

2

 - n)

P

Rmin

 = 0

P

Rśr

 = 0.75 (n

2

 - n)

P

Rmax

 = 1.5 (n

2

 - n) 

background image

16

Algorytmy i struktury danych, temat 2

Pierścienie dwukierunkowe

Model grafowy pierścienia dwukierunkowego:

Relacja następstwa dla pierścienia dwukierunkowego Pd:

N

N

N

N

N

P

Pw

Pw

P

PD

1

e

d

1

d

2

d

3

d

n

background image

17

Algorytmy i struktury danych, temat 2

Przykłady liniowych struktur danych

Definicja listy stanowi podstawę dla zdefiniowania 
struktury liniowej. Wszystkie przypadki struktur 
liniowych można zdefiniować bazując na ich 
odpowiednich reprezentacjach listowych

Bazując na pojęciu listy powiemy sobie o innych 
liniowych strukturach danych, będą to:

kolejki,

stosy,

napisy,

tablice sekwencyjne

tablice rzadkie

tablice rozproszone (z haszowaniem).

background image

18

Algorytmy i struktury danych, temat 2

Kolejki

Kolejka (queue) jest strukturą danych wykorzystywaną 
najczęściej jako bufor przechowujący dane określonych 
typów. 

Dyscypliny kolejek:

FIFO (First In First Out) - pierwszy element 
wchodzący staje się pierwszym wychodzącym

Round-Robin - cykliczna kolejka z dyscypliną czasu 
obsługi komunikatu przechowywanego w kolejce (w 
systemach operacyjnych, sieciach komputerowych)

LIFO (Last In First Out) - ostatni wchodzący staje się 
pierwszym wychodzącym (tak działa stos)

kolejki priorytetowe - dodatkowo w 
standardowym mechanizmie kolejki uwzględnia się 
wartości priorytetów przechowywanych danych 

background image

19

Algorytmy i struktury danych, temat 2

Kolejki FIFO

Dyscyplina First In First Out:

d

1

We

Wy

d

1

We

Wy

d

2

d

1

We

Wy

d

2

d

3

d

4

d

5

d

6

background image

20

Algorytmy i struktury danych, temat 2

Kolejki FIFO

template <class TypPodst>  class FIFO

{

  TypPodst *t;

  int glowa,ogon,MaxElt;

public:

  FIFO(int n)

 {

 MaxElt=n;

 glowa=ogon=0;

 t=new TypPodst[MaxElt+1];

 }

void wstaw(TypPodst x)

 {

 t[ogon++]=x;

 if(ogon>MaxElt) ogon=0;

 }

  

background image

21

Algorytmy i struktury danych, temat 2

Kolejki FIFO

int obsluz(TypPodst &w)

 {

 if (glowa==ogon) return -1; // informacja o błędzie 

operacji

 w=t[glowa++];

 if(glowa>MaxElt) glowa=0;

 return 1;

 }

  int pusta() // czy kolejka jest pusta?

 {

 if (glowa==ogon)

return 1; // kolejka pusta

 else

 return 0;

 }

};

background image

22

Algorytmy i struktury danych, temat 2

Kolejki FIFO

#include <iostream.h>

#include "kolejka.h"

static char *tab[]={"Kowalska","Fronczak","Becki","Pigwa"};
void main() {

FIFO<char*> kolejka(5); // kolejka 5-osobowa

for(int i=0; i<4;i++)

  kolejka.wstaw(tab[i]);

  char *s;
  for(i=0; i<5;i++)   {

  int res=kolejka.obsluz(s);

  if (res==1)

cout <<  "Obsluzony zostal klient: "<<s<<endl;

  else

cout <<  "Kolejka pusta!\n";   }

background image

23

Algorytmy i struktury danych, temat 2

Stos (kolejka LIFO)

Dyscyplina Last In First Out:

d

1

We

Wy

d

1

d

2

We

Wy

d

1

d

2

d

3

d

4

d

5

d

6

We

Wy

background image

24

Algorytmy i struktury danych, temat 2

Stos (kolejka LIFO)

Do odkładania danych na wierzchołek stosu służy 
zwyczajowo funkcja push(x) lokująca element x na 
wierzchołku stosu.Zmienna x może być przy tym 
dowolnego typu wbudowanego lub może być obiektem

Pobieranie elementu ze stosu realizuje także 
zwyczajowo funkcja pop(x). Pobiera ona element z 
wierzchołka stosu.

Każda z tych funkcja zawiera także obsługę błędu 
sygnalizującego stos pusty lub brak miejsca na stosie.

W języku C++ ułatwieniem jest stosowanie tych funkcji 
w bibliotece szablonów STL. Zaprezentowany zostanie 
kod korzystający z tej biblioteki.

Stos realizuje się zwykle w formie tablicy z jednym 
miejscem zarezerwowanym na pole wskazujące liczbę 
elementów tablicy.

background image

25

Algorytmy i struktury danych, temat 2

Stos (kolejka LIFO) – definicja klasy 

stos w C++

const int DLUGOSC_MAX=300;

const int STOS_PELNY=3;

const int STOS_PUSTY=2;

const int OK=1;

template <class TypPodst>  class STOS {

  TypPodst t[DLUGOSC_MAX+1]; 

// 

stos=t[0]...t[DLUGOSC_MAX]

  int szczyt;

public:              

    // szczyt = pierwsza WOLNA komórka

  STOS() { szczyt=0;}          // konstruktor

  void clear() { szczyt=0;}    // zerowanie stosu

  int push(TypPodst x);

  int pop (TypPodst &w);

  int StanStosu();

}; // koniec definicji klasy STOS

background image

26

Algorytmy i struktury danych, temat 2

Stos (kolejka LIFO) – definicja klasy 

stos w C++

template <class TypPodst> int 
STOS<TypPodst>::push(TypPodst x)

    {

    if ( szczyt<=DLUGOSC_MAX)

       {

t[szczyt++]=x;

return (OK);

       }else

return (STOS_PELNY);

    }

background image

27

Algorytmy i struktury danych, temat 2

Stos (kolejka LIFO) – definicja klasy 

stos w C++

template <class TypPodst> int STOS<TypPodst>::pop(TypPodst 

&w)

 // "w" zostanie "załadowane wartościa zdjętą ze stosu

 { 

if (szczyt>0) 

{

w=t[--szczyt];

return (OK);

}else

return (STOS_PUSTY);    }

template <class TypPodst> int STOS<TypPodst>::StanStosu()

  { 

// zwraca informacje o stanie stosu

 switch(szczyt)   {

   case 0           :return (STOS_PUSTY);

   case DLUGOSC_MAX+1

:return (STOS_PELNY);

   default          :return (OK);

  }

     }

background image

28

Algorytmy i struktury danych, temat 2

Drzewiaste struktury danych

Definicja 2.4:

Drzewiastą strukturą danych nazywamy strukturę danych 

S=(D, R, e)

, w której relacja porządkująca 

N

 opisuje kolejne, 

rekurencyjne powiązania pomiędzy danymi elementarnymi 
drzewa, tworzącymi kolejne „poddrzewa”.

Wniosek: Drzewo ze swojej natury jest strukturą hierarchiczną 
                (rekurencyjną). Niezwykle istotne jest tutaj 
odpowiednie
                przypisanie danych elementarnych ze zbioru 

D

 do 

kolejnych
                poziomów drzewa i opisanie porządku w relacji 

N

background image

29

Algorytmy i struktury danych, temat 2

Drzewiaste struktury danych – kilka 

pojęć podstawowych

Korzeń drzewa – jest tylko i wyłącznie jeden dla drzewa. Jest 

to dana wskazywana przez element wejściowy 

e

,

Liść drzewa – jest to dana elementarna, która nie posiada 

swojego 

następnika w w sensie relacji 

N

,

Stopień drzewa – maksymalna liczba możliwych następników 

dla 

dowolnego elementu drzewa. Najczęściej przyjmuje 

się, że  stopień drzewa jest potęgą liczby 2 (drzewa 

dwójkowe,  czwórkowe, ósemkowe, szesnastkowe),

Droga w drzewie – kolejne łuki pomiędzy wskazanymi dwoma 

elementami drzewa, które trzeba pokonać, aby dojść 

od

jednego elementu drzewa do innego 

Poziom drzewa – elementy ułożone w tej samej odległości 

(długości 

drogi) od korzenia drzewa,

Drzewo zupełne – takie drzewo, którego wszystkie elementy 

(oprócz  liści) mają taką liczbę następników, ile wynosi 

stopień  drzewa

background image

30

Algorytmy i struktury danych, temat 2

Przykład modelu grafowego drzewa 

dwójkowego 

(binarnego)

e

d1

d2

d3

d4

d5

d6

d7

d8

poziom 1

poziom 2

poziom 3

poziom 4

Dla powyższego drzewa: wskaż korzeń, liście, opisz zbiór D, relacje r

we

 i N

background image

31

Algorytmy i struktury danych, temat 2

Rekurencja w drzewie

e

d1

d2

d3

d4

d5

d6

d7

d8

prawe 

podrzewo

prawe 

podrzewo 

prawego 

podrzewa

prawe 

podrzewo 

prawego 

podrzewa

prawego 

podrzewa

lewe 

podrzewo

lewe 

podrzewo 

prawego 

podrzewa

background image

32

Algorytmy i struktury danych, temat 2

Drzewiaste struktury danych

W informatyce drzewa są strukturami danych 
reprezentującymi drzewa matematyczne. W naturalny 
sposób reprezentują hierarchię danych (obiektów 
fizycznych i abstrakcyjnych, pojęć, itp.), toteż głównie 
do tego celu są stosowane. Drzewa ułatwiają i 
przyspieszają wyszukiwanie, a także pozwalają w 
łatwy sposób operować na posortowanych danych. 
Znaczenie tych struktury jest bardzo duże i ze względu 
na swoje własności drzewa są stosowane praktycznie 
w każdej dziedzinie informatyki (np. bazy danych, 
grafika komputerowa, przetwarzanie tekstu, 
telekomunikacja). 

background image

33

Algorytmy i struktury danych, temat 2

Drzewiaste struktury danych

danym wierzchołkiem, a leżące na następnym poziomie są 
nazywane dziećmi tego węzła (np. dziećmi wierzchołka D są 
G i H, wierzchołka H: J, K oraz L). Wierzchołek może mieć 
dowolną liczbę dzieci, jeśli nie ma ich wcale nazywany jest 
liściem; na rysunku liście zaznaczone są kolorem niebieskim.

Wierzchołek jest rodzicem dla każdego swojego dziecka; 
każdy węzeł ma dokładnie jednego rodzica. Wyjątkiem jest 
korzeń drzewa, który nie ma rodzica.

W drzewie istnieje dokładnie jedna ścieżka pomiędzy węzłem 
a korzeniem
; przez ścieżkę rozumie się ciąg krawędzi, na 
rys. przykładowa ścieżka do węzła J jest zaznaczona na 
czerwono. Liczba krawędzi w ścieżce jest nazywana 
długością (lub głębokością) – liczba o jeden większa określa 
poziom węzła. Z kolei wysokość drzewa to największy 
poziom istniejący w drzewie (przykładowe drzewo ma 
wysokość 4).

background image

34

Algorytmy i struktury danych, temat 2

Drzewiaste struktury danych

Podstawowe operacje na 
drzewach to:

 

    * wyliczenie wszystkich 
elementów drzewa,

    * wyszukanie 
konkretnego elementu,

    * dodanie nowego 
elementu w określonym 
miejscu drzewa,

    * usunięcie elementu.

background image

35

Algorytmy i struktury danych, temat 2

Drzewiaste struktury danych

Pod pojęciem przechodzenia 
drzewa rozumie się 
odwiedzanie kolejnych 
wierzchołków, zgodnie z 
zależnościami rodzic-dziecko. 
Jeśli przy przechodzeniu drzewa 
na wierzchołkach są 
wykonywane pewne działania, 
to mówi się wówczas o 
przechodzeniu:

 

    * preorder - gdy działanie jest 
wykonywane najpierw na 
rodzicu, następnie na dzieciach;

    * postorder - gdy działanie 
jest wykonywane najpierw na 
wszystkich dzieciach, na końcu 
na rodzicu.

 

background image

36

Algorytmy i struktury danych, temat 2

Drzewiaste struktury danych

W przypadku drzew 

binarnych istnieje jeszcze 

metoda inorder, gdzie 

najpierw wykonywane jest 

działanie na jednym z dzieci, 

następnie na rodzicu i na 

końcu na drugim dziecku.

 

Jeśli działaniem byłoby 

wypisanie liter 

przechowywanych w węzłach 

przykładowego drzewa, to 

przy przechodzeniu drzewa 

metodą preorder otrzymamy 

ABEFCDGIHJKL, natomiast 

przy przechodzeniu drzewa 

metodą postorder: 

EFBCIGJKLHDA.

background image

37

Algorytmy i struktury danych, temat 2

Drzewo binarne 

w teorii grafów to drzewo, w którym stopień każdego 
wierzchołka jest nie większy od 3.

Ukorzenione drzewo binarne to drzewo binarne o 
stopniu nie większym niż 2, w którym wyróżniono jeden 
z wierzchołków (zwany korzeniem).

W informatyce drzewo binarne to jeden z rodzajów 
drzewa (struktury danych), w którym liczba synów 
każdego wierzchołka wynosi nie więcej niż dwa. 
Wyróżnia się wtedy lewego syna i prawego syna danego 
wierzchołka.

Drzewo binarne, w którym liczba synów każdego 
wierzchołka wynosi albo zero albo dwa, nazywane jest 
drzewem regularnym.

Szczególnymi odmianami drzew binarnych są drzewa 
BST oraz kopce.

background image

38

Algorytmy i struktury danych, temat 2

Drzewo AVL 

to zrównoważone binarne drzewo poszukiwań (BST), czyli 

takie w którym wysokość lewego i prawego poddrzewa 

każdego węzła różni się co najwyżej o jeden. Nazwa AVL 

pochodzi od nazwisk rosyjskich matematyków: Adelsona-

Velskii oraz Landisa (właściwie: Grigorij Adelson-Wielskij i 

Jewgienij Ładnis), którzy zaproponowali rozwiązanie problemu 

utrzymania dobrego drzewa wyszukiwań w roku 1962 [1].

Drzewo AVL pozostaje drzewem BST, co oznacza, że 

wierzchołki są uporządkowane w określony sposób. Zazwyczaj 

przyjmuje się, iż elementy w lewym poddrzewie są mniejsze 

od wierzchołka, zaś w prawym - większe. Zrównoważenie 

drzewa osiąga się przypisując każdemu węzłowi współczynnik 

wyważenia, który jest równy różnicy wysokości lewego i 

prawego poddrzewa. Może wynosić 0, +1 lub -1. Wstawiając 

lub usuwając elementy drzewa (tak aby zachować własności 

drzewa BST) modyfikuje się też współczynnik wyważenia, a 

gdy przyjmie on niedozwoloną wartość wykonuje specjalną 

operację rotacji węzłów, która przywraca zrównoważenie.

background image

39

Algorytmy i struktury danych, temat 2

Drzewo AVL

Koszt modyfikacji drzewa jest nieco większy niż dla 
zwykłego drzewa BST, ale za to własności drzewa AVL 
gwarantują, że pesymistyczny czas wyszukiwania 
elementu w drzewie o n węzłach wynosi (log

2

n)/2, 

podczas gdy dla niezrównoważonego BST (w postaci 
listy) czas ten wynosi n.

Drzewa AVL są często porównywane z czerwono-
czarnymi drzewami, ponieważ pozwalają na wykonanie 
tych samych operacji (dodawanie, usuwanie oraz 
wyszukiwanie elementów) o równej co do rzędu 
pesymistycznej złożoności czasowej O(log n). Przy 
powtarzających się wyszukiwaniach drzewa AVL są 
jednak wydajniejsze. [2]

background image

40

Algorytmy i struktury danych, temat 2

AVL

W wielu praktycznych 
zastosowaniach zdarza się, 
że do części obiektów sięga 
się częściej niż do 
pozostałych, przykładem 
może być słownik. Wówczas 
lepszym rozwiązaniem jest 
zastosowanie optymalnego 
drzewa poszukiwań.

 obok AVL niezrównoważone

Podobnie jak w BST, nie jest 
możliwe, by drzewo 
posiadało dwa równe 
elementy. Zazwyczaj 
oznacza to, iż elementy 
muszą posiadać unikalny 
klucz identyfikacyjny.

background image

41

Algorytmy i struktury danych, temat 2

AVL

Poprzednie AVL po 
zrównoważeniu

background image

42

Algorytmy i struktury danych, temat 2

Realizacje struktur danych

Realizacje sekwencyjne (statyczne) - wtedy, gdy z góry 

znamy maksymalny rozmiar przetwarzanej struktury liniowej i z 

góry chcemy zarezerwować dla niej określony zasób (pamięć 

operacyjne, pamięć zewnętrzna. W czasie wytwarzania 

programów komputerowych bazujemy wtedy na zmiennych 

statycznych,

Realizacje łącznikowe (dynamiczne) - wtedy, gdy rozmiar 

struktury nie jest z góry znany i w czasie jej przetwarzania może 

istnieć konieczność dodawania do niej nowych elementów lub ich 

usuwania. W czasie wytwarzania programów komputerowych 

bazujemy wtedy na zmiennych dynamicznych (wskaźnikowych),

Realizacje łącznikowo-sekwencyjne (hybrydowe) - 

połączenie obu powyższych metod - wtedy gdy konieczny jest 

odpowiedni balans pomiędzy zmiennymi statycznymi i 

dynamicznymi

O statycznych (sekwencyjnych) realizacjach struktur danych mówiliśmy już na 

wykładzie wprowadzającym z WdP. Więcej realizacjach dynamicznych (łacznikowych) 

będziemy mówić na obecnym wykładzie podczas omawiamia tematu nr 3. 

background image

43

Algorytmy i struktury danych, temat 2

Definicja tablicy rozproszonej (z 

haszowaniem)

Definicja 2.3:

Tablicą rozproszoną nazywamy trójkę uporządkowaną

h

D

K

T

,

,

, gdzie

K = {k

1

, k

2

, k

3

,..., k

n

} - zbiór kluczy,

D = {d

1

, d

2

, d

3

,..., d

n

} - zbiór adresów,

h  -  funkcja mieszająca (haszująca) 

zdefiniowana następująco:

D

K

:

h

Tradycyjnym obszarem zastosowań tablic 
rozproszonych są zagadnienia związane z 
przetwarzaniem danych.

background image

44

Algorytmy i struktury danych, temat 2

Tablice rozproszone, funkcja 

haszująca

Zadaniem funkcji haszującej h jest w miarę 
równomierne obciążanie tablicy rozproszonej (jej 
komórek). Zagadnienie definiowania funkcji 
mieszającej jest istotne dla efektywności obliczeń 
realizowanych na bazie tablic rozproszonych. 

Ma to szczególnie duże znaczenie dla tablic 
rozproszonych przetwarzanych bezpośrednio w 
nośnikach zewnętrznych (taśmach, dyskach)

Nie można jednak wykluczyć powstawania tzw. 
konfliktów w tablicach rozproszonych.

background image

45

Algorytmy i struktury danych, temat 2

Konflikty w tablicach rozproszonych

Kolizją (konfliktem) w tablicy rozproszonej nazywamy 
sytuację powstałą wtedy, gdy:

 

 

k

k

j

i

 ,

,

h

h

k

k

K

k

k

j

i

j

i

Elementy k

i

, k

j

 biorące udział w kolizji nazywamy synonimami.

Dużo więcej o listach i tablicach rozproszonych będziemy mówić na wykładzie 3 i 4

background image

46

Algorytmy i struktury danych, temat 2

Podsumowanie:

poznaliśmy już przykłady struktur danych

wiemy w jaki sposób można realizować struktury danych

dalsze szczegóły poznamy na kolejnych wykładach

Następny wykład:

zajmiemy się implementacjami dynamicznych struktur danych

dziękuję za uwagę


Document Outline