Você está na página 1de 3

Literatura

Wykład 1

1. T.H. Cormen, C.E. Leiserson, R.L. Rivest


„Wprowadzenie do algorytmów”
 Literatura 2. N. Wirth
 Algorytmy „Algorytmy + struktury danych = programy”
 Dane i struktury danych 3. K.Balińska
 Klasyfikacja struktur „Projektowanie algorytmów i struktur danych”
 Wyszukiwanie połówkowe 4. M.M. Sysło, N.Deo, J.S. Kowalik
„Algorytmy optymalizacji dyskretnej”
5. E.M. Reingold, J. Nievergelt, N. Deo
„Algorytmy kombinatoryczne”

Literatura Algorytm

6. L. Banachowski, K. Diks, W. Rytter  Definicja


 Ciąg elementarnych operacji przekształcający dane wejściowe
„Algorytmy i struktury danych” w wyniki
7. P. Wróblewski  Środek umoŜliwiający rozwiązanie konkretnego problemu
obliczeniowego
„Algorytmy, struktury danych i techniki programowania”
 Przykład: sortowanie
8. A.V. Aho, J.E. Hopcroft, J.D. Ullman  Dane wejściowe: ciąg n liczb a1, a2, ... an
„ Algorytmy i struktury danych”  Wynik: permutacja liczb a’1, a’2, ... a'n, taka Ŝe a’1≤a’≤ ...≤a'n
9. J. Marecki  Przykład danych wejściowych - instancja problemu
„Struktury danych”  Algorytm jest poprawny jeŜeli dla kaŜdej instancji
10. R. Jagielski, zatrzymuje się i daje poprawny wynik
„Tablice rozproszone”

Algorytm Analiza algorytmów

 Algorytm jako technologia  Analiza algorytmów:


 Współczesne zaawansowane technologie informatyczne:  to dział informatyki zajmujący się szukaniem najlepszych
 sprzęt (procesory, karty graficzne) algorytmów dla zadań komputerowych,
 sieci (lokalne, globalne)  odpowiada na pytania:
 GUI  czy dany problem moŜe być rozwiązany na komputerze
 Czy algorytmy są równie istotne co powyŜsze technologie? w dostępnym CZASIE i PAMIĘCI?
 Algorytm moŜna przedstawić:  który algorytm zastosować w danych okolicznościach?
 w języku naturalnym  czy jest lepszy algorytm (czy jest on optymalny)?
 jak uzasadnić, Ŝe algorytm rozwiązuje postawione zadanie?
 w pseudokodzie
 prowadzona jest w dwóch aspektach: poprawności
 w postaci programu
semantycznej i złoŜoności obliczeniowej
 w postaci realizacji sprzętowej
 uwzględnia: poprawność semantyczną, prostotę, czas
działania, zajętą pamięć, optymalność, okoliczności uŜycia.

1
ZłoŜoność obliczeniowa Typowe złoŜoności

 Definiuje się ją jako:  stała


 ilość zasobów komputerowych potrzebnych do jego  logarytmiczna
wykonania (czas procesora, wielkość pamięci).
 liniowa
 WyróŜnia się:
 złoŜoność pesymistyczną (ilość zasobów potrzebnych przy  liniowo logarytmiczna
„najgorszych” danych wejściowych o rozmiarze n),  kwadratowa
 złoŜoność oczekiwaną (ilość zasobów potrzebnych przy
„typowych” danych wejściowych o rozmiarze n),  sześcienna
 wielomianowa
 wykładnicza
 silnia

ZłoŜoność czasowa a czas wykonania


Struktury danych
Rozmiar
problemu
n 10 20 30 40 50
Funkcja
złoŜoności
 Dana: zapis informacji na nośniku komputerowym.
 Dana prosta: zapis informacji, którego Ŝadna część
nie jest zapisem informacji.
 Dana złoŜona (struktura danych): środek słuŜący
do przechowywania i organizowania danych w celu
ułatwienia dostępu i ich modyfikacji.

Klasyfikacja struktur danych Struktury mnogościowe - zbiory

 Zbiór.
 Ze względu na powiązania elementów struktury:  Operacje proste:
 inicjalizacja nowego zbioru,
 mnogościowe  sprawdzenie czy zbiór pusty,
 liniowe  sprawdzenie czy element naleŜy do zbioru,
 dołączenie elementu do zbioru,
 drzewiaste  usunięcie elementu ze zbioru.
 grafowe (sieciowe)  Operacje złoŜone:
 suma zbiorów,
 iloczyn zbiorów,
 róŜnica zbiorów,
 róŜnica symetryczna zbiorów,
 ...
 Implementacje: bitowa, listowa.

2
Struktury liniowe - tablice Rekordy

 Tablica jest to struktura liniowa o:  Rekord jest to struktura mnogościowa o:


 dostępie adresowym.  dostępie adresowym (nazwa pola).
 Operacje proste:
 odczytywanie zawartości działki,  Tablica rekordów
 zmiana zawartości działki.  Pole kluczowe (jedno z pól w rekordzie):
 Operacje złoŜone:  moŜe decydować o połoŜeniu rekordu w tablicy
 odszukiwanie elementu, (rozmieszczanie rekordów),
 sortowanie elementów.  moŜe być podstawą odszukiwania.

Rozmieszczanie rekordów w tablicy Tablica - operacje złoŜone

 Klasyfikacja według gęstości:  Dla tablicy chaotycznej (zwartej oraz luźnej):


 wprowadzenie rekordu,
 luźne,
 odszukiwanie rekordu (sekwencyjne),
 zwarte.
 rozmieszczanie elementów,
 Klasyfikacje według powiązania z zawartością:  reorganizacja tablicy (np. monotonizacja).
 chaotyczne,
 Dla tablicy monotonicznej dochodzi:
 sterowane:
 monotonicznie (np. niemalejące, nierosnące),
 odszukiwanie: binarne (połówkowe), interpolacyjne.
 algorytmicznie („haszowanie”).  Dla tablicy z rozmieszczeniem algorytmicznym:
 odszukiwanie algorytmiczne,
 rozmieszczanie algorytmiczne,
 zmiana algorytmu rozmieszczającego.

Wyszukiwanie połówkowe Wyszukiwanie połówkowe

t : array [1..MAX] of integer;


t : array [1..MAX] of integer;
lewy:= 1;
prawy:= MAX; lewy:= 1;
found:= false; prawy:= MAX;
repeat repeat
sr:=(lewy+prawy) div 2; sr:=(lewy+prawy) div 2;
if t[sr]=sz then if t[sr]<sz then
found:= true lewy:= sr+1
else if t[sr]<sz then else
lewy:= sr+1 prawy:= sr-1
else until lewy>prawy;
prawy:= sr-1 if t[lewy]=sz then write(lewy) else write(’not found’)
until found or (lewy>prawy);
if found then write(sr) else write(’not found’)

Você também pode gostar