Algorytmy (3) 2000/2001

Transkrypt

Algorytmy (3) 2000/2001
• Problem porządkowania zwanego również sortowaniem jest jednym z
najważniejszych i najpopularniejszych zagadnień informatycznych.
• Dane:
Liczba naturalna n i ciąg n liczb x1, x2, …, xn.
• Wynik:
Uporządkowanie tego ciągu liczb od najmniejszej do
największej.
• Ponieważ algorytmy porządkowania służą do znajdywania uporządkowania
liczb względem ich wartości wykonujemy:
– operacje porównania,
– a jeśli jest to konieczne ze względu na złe uporządkowanie porównywanych liczb
zmieniamy ich kolejność, czyli przestawiamy je.
• Porównanie w algorytmach porządkowania oznacza zbadanie prawdziwości
jednej z nierówności:
– słabej (<= lub >=)
– silnej (< lub >).
• W przypadku porządkowania dwóch liczb trudno jest sobie wyobrazić
algorytm wykonujący więcej niż jedno porównanie.
Luty 2001
Algorytmy (3) 2000/2001
[email protected]
1
• Mając do uporządkowania trzy liczby możemy postąpić następująco:
– najpierw ustawiamy w odpowiedniej kolejności a i b,
– potem wstawiamy c w odpowiednie miejsce względem a i b.
• W pierwszym etapie wykonujemy dokładnie jedno porównanie.
• W drugim etapie możemy (jeśli a<b) mieć następujące sytuacje:
– jeśli c<a to (c, a, b) jest szukanym uporządkowaniem,
– w przeciwnym wypadku należy sprawdzić, czy c<b. Jeśli tak, to mamy
uporządkowanie (a, c, b) - w przeciwnym wypadku będzie (a, b, c).
a<b
1
0
c<a
1
c<b
0
(c, a, b)
b<c
1
1
(c, b, a)
0
(a, b, c) (a, c, b)
Luty 2001
Algorytmy (3) 2000/2001
0
c<a
1
0
(b, c, a) (b, a, c)
[email protected]
2
• Liczba porównań prowadzących do wyróżnionej odpowiedzi algorytmu jest
równa liczbie wierzchołków pośrednich na drodze z korzenia do wierzchołka
końcowego - tę liczbę będziemy nazywali długością takiej drogi.
– Dwa wyniki otrzymujemy po wykonaniu dwóch porównań.
– Cztery pozostałe po trzech.
• Największa długość drogi z korzenia do wierzchołka końcowego, nazywana
wysokością drzewa algorytmu, jest największą liczbą operacji
wykonywanych w algorytmie dla jakiegokolwiek możliwego układu danych.
• Wielkość ta nazywa się złożonością obliczeniową lub pracochłonnością
algorytmu.
• Jest to najczęściej złożoność pesymistyczna (złożoność najgorszego
przypadku danych) - w niektórych przypadkach algorytm może działać
szybciej.
• W najmniej korzystnym (zwanym także najgorszym) przypadku danych:
– algorytm reprezentowany w postaci drzewa algorytmu jest tym lepszy (szybszy)
im niższe jest to drzewo (im mniejszą ma wysokość).
– Algorytmy porządkowania kilku liczb wykonują swoje zadanie za pomocą
najmniejszej możliwej liczby porównań. Są to więc algorytmy optymalne pod
względem pracochłonności.
Luty 2001
Algorytmy (3) 2000/2001
[email protected]
3
• Uporządkowanie czterech liczb a, b, c i d można znaleźć w dwóch krokach:
– uporządkować najpierw trzy liczby a, b i c a następnie umieścić czwartą w ciągu
trzech liczb.
• Ten sposób wstawiania czwartej liczby do trójki uporządkowanych liczb jest
szczególnym przypadkiem algorytmu binarnego umieszczania.
• Liczbę d należy najpierw porównać ze środkową liczbą z trzech
uporządkowanych!!! Wtedy wysokość drzewa wzrośnie o 2.
• Jeśli porównanie rozpoczniemy od pierwszej albo ostatniej liczby z trzech
wysokość drzewa wzrośnie o 3.
• Porządkowanie pięciu liczb można przeprowadzić rozszerzając algorytm
porządkowania czterech liczb.
• Otrzymujemy wtedy algorytm, w którym wykonuje się 8 porównań.
• Możliwy jest jednak algorytm, w którym wykonuje się co najwyżej 7
operacji.
Luty 2001
Algorytmy (3) 2000/2001
[email protected]
4
• Dotychczas przedstawione algorytmy były uniwersalne jedynie w tym
sensie, że danymi w nich mogły być dowolne liczby. Ich liczba była jednak z
góry ustalona.
• Obecnie prezentowane algorytmy powinny działać poprawnie zarówno na
zbiorze 3 jak i 100 000 elementów.
• Wynik działania algorytmu będzie najczęściej zależeć od wszystkich danych
w zbiorze - jego określenie będzie więc związane z koniecznością przejrzenia
całego zbioru i wykonania podobnych operacji na wszystkich elementach
zbioru.
• W algorytmie takiemu działaniu odpowiadać będzie iteracja (powtarzanie)
pewnych operacji lub całych fragmentów obliczeń.
• Dla uproszczenia rozumowania będziemy zajmować się zbiorami, których
elementami są liczby. Mogą one być traktowane jako reprezentacja innych
danych.
• Mówiąc o zbiorach danych będziemy mieli na uwadze zbiory liczb.
Luty 2001
Algorytmy (3) 2000/2001
[email protected]
5
• Dla każdej danej w zbiorze można określić częstość, wielkość określającą, ile
razy powtarza się ona w tym zbiorze.
• Rozpiętością zbioru jest różnica pomiędzy największą i najmniejszą liczbą
występującą w tym zbiorze.
• Najmniejszą liczbę w zbiorze nazywamy minimum zbioru a największa
maksimum zbioru.
• Miarami centralności danych w zbiorze, zwanymi również statystykami, są:
– średnia,
– mediana,
– modalna.
• Średnia jest równa sumie wszystkich danych podzielona przez ich liczbę.
• Mediana jest środkową wartością zbioru w tym sensie, że jeśli zbiór jest
uporządkowany, to występuje ona w środku tego uporządkowania.
• Modalna jest najczęściej występującą daną w zbiorze.
Luty 2001
Algorytmy (3) 2000/2001
[email protected]
6
• Istotnym zagadnieniem jest reprezentacja w algorytmach zbiorów o nie
ustalonej z góry liczbie elementów. Podczas prowadzenia obliczeń musimy
mieć pewność, że:
– żaden z elementów zbioru nie został pominięty przez algorytm,
– obliczenia nie będą się powtarzały w nieskończoność.
• Zakładamy, że zbiór danych, dla których będą wykonywane obliczenia:
– jest czytany z klawiatury,
– znajduje się w tablicy lub na taśmie.
• Opis algorytmu powinien być poprzedzony dyskusją, w jaki sposób są
przechowywane dane. Od sposobu przechowywania danych zależy bowiem
postać algorytmu.
• Taśmą będziemy nazywać ciąg komórek wypełnionych liczbami.
Luty 2001
Algorytmy (3) 2000/2001
[email protected]
7
• Bez względu na sposób reprezentowania zbioru powinniśmy wiedzieć, ile
zawiera on elementów, czyli jaka jest jego moc.
• Istnieją dwa podstawowe sposoby określenia zbioru (jego mocy):
– na początku danego ciągu danych podajemy, ile elementów zawiera zbiór, a
następnie wymieniamy jego elementy (wiemy wówczas, ile należy wykonać
dokładnie działań na wszystkich elementach zbioru);
– na końcu zbioru umieszczamy wyróżniony element, który nie należy do tego
zbioru - nazywamy go wartownikiem; jego zadaniem jest pilnowanie, by żadne
obliczenia dokonywane na elementach zbioru nie wykroczyły poza jego elementy
(dla zbioru liczb dodatnich wartownikiem może być każda liczba ujemna).
– Rola wartownika może być bardziej ogólna, niż tylko zakończenie zbioru.
• Najprostsze pytanie, jakie można postawiæ w odniesieniu do zbioru danych
brzmi: czy zawiera on poszukiwany przez nas element.
• Jeśli nie posiadamy żadnych informacji o uporządkowaniu elementów zbioru
najprostszą metodą udzielenia odpowiedzi na to pytanie jest sprawdzenie
element po elemencie, czy któryś z elementów nie jest równy
poszukiwanemu.
• Jest to przeszukiwanie liniowe.
Luty 2001
Algorytmy (3) 2000/2001
[email protected]
8
• W przeszukiwaniu wykorzystamy wartownika w następujący sposób:
– jeżeli y jest poszukiwanym elementem zbioru, to to dołączamy do tego zbioru na
jego końcu właśnie ten element.
• W takiej sytuacji przeszukiwanie zawsze zakończy się odnalezieniem
elementu równego y! Należy jedynie sprawdzić, czy znajduje się on w ciągu
danych czy tez może na dołączonej pozycji.
• W pierwszym wypadku przeszukiwany zbiór zawiera element y, a w drugim y
nie należy do tego zbioru.
• Dołączony do zbioru element odgrywa rolę wartownika - nie musimy
sprawdzać, czy przeglądanie objęło cały zbiór czy nie, zatrzyma się ono
bowiem zawsze na szukanym elemencie.
• W zbiorze poszukiwać możemy
– elementu o danej wartości,
– elementu o wyróżnionej właściwości (np. największego).
Luty 2001
Algorytmy (3) 2000/2001
[email protected]
9
Algorytm przeszukiwania liniowego z wartownikiem
Dane: Zbiór elementów w postaci ciągu; y - poszukiwany element
Wyniki: Jeśli y należy do zbioru podaj jego pozycję, jeśli nie zasygnalizuj jego
brak w zbiorze danych.
• Krok 1
{Utworzenie wartownika na końcu ciągu} Utwórz na końcu
ciągu wartownika i umieść w nim y.
• Krok 2
Dla kolejnego element z w danym ciągu jeśli z=y to przejdź do
następnego kroku, w przeciwnym razie powtórz ten krok.
• Krok 3
Jeżeli z jest wartownikiem, to zbiór nie zawiera y, w
przeciwnym wypadku z wskazuje pierwsze wystąpienie y w
ciągu.
Znalezienie czegokolwiek trwa na ogół krócej, niż stwierdzenie jego braku.
Luty 2001
Algorytmy (3) 2000/2001
[email protected]
10
Algorytm przeszukiwania liniowego z wartownikiem - wersja z tablicą
Dane: Zbiór elementów dany w tablicy a[k..l], gdzie k<=l; y - poszukiwany
element.
Wynik: Takie s (k<=s<=l), że as=y lub s=-1 jeśli y<>ai dla każdego i
(k<=i<=l)
al+1:=y {utworzenie wartownika na końcu ciągu}
• Krok 1
• Krok 2
Dla s=k, …, l, l+1, jeśli as=y to wykonaj następny krok.
• Krok 3
Jeśli s=l+1 to zbiór nie zawiera elementu y i przyjmujemy
s=-1; w przeciwnym wypadku as=y.
• Średnia ze zbioru liczb jest równa liczbie elementów podzielonej przez ich
liczbę.
• Algorytm obliczania średniej z liczb dodatnich wprowadzanych z klawiatury
będzie zależeć od sposobu czytania danych:
– zbiór danych jest poprzedzony ich liczbą w zbiorze,
– zbiór danych jest zakończony wartownikiem.
• Przyjmujemy, że suma elementów zbioru, który jest pusty, wynosi zero.
Luty 2001
Algorytmy (3) 2000/2001
[email protected]
11
Luty 2001
Algorytmy (3) 2000/2001
[email protected]
12

Podobne dokumenty