Algorytmy sortowania wewnętrznego
|
|
- Feliks Chmielewski
- 8 lat temu
- Przeglądów:
Transkrypt
1 1 Cel ćwiczenia lgorytmy i struktury danych nstytut terowania i ystemów nformatycznych ydział lektrotechniki, nformatyki i elekomunikacji Uniwersytet Zielonogórski lgorytmy sortowania wewnętrznego Ćwiczenie ma na celu zapoznanie studentów z wybranymi metodami sortowania wewnętrznego. ą to: sortowanie przez proste wstawianie, sortowanie przez proste wybieranie (przez selekcję), sortowanie bąbelkowe, sortowanie szybkie (quicksort), sortowanie stogowe i sortowanie przez scalanie. 2 stęp Metoda sortowania jest nazywana wewnętrzną, jeśli dane uporządkowane są w postaci tablicy (zatem mieszczą się w pamięci operacyjnej M) oraz w procesie sortowania nie korzysta się z tablic pomocniczych. Dobra metoda sortowania powinna charakteryzować się stabilnością. Metoda sortowania jest stabilna, jeśli zachowuje względną kolejność elementów ze zdublowanymi kluczami. Przykładowo, jeśli ułożoną alfabetycznie listę osób posortuje się po roku urodzenia, metoda stabilna da w efekcie listę, w której osoby urodzone w tym samym roku będą nadal ułożone w kolejności alfabetycznej, natomiast metoda niestabilna nie gwarantuje tego. 3 Metody sortowania wewnętrznego 3.1 ortowanie przez proste wstawianie Metodę tę można porównać do porządkowania kart na ręku: należy brać kolejne, jeszcze nie uporządkowane karty, i wstawiać na odpowiednie miejsce pomiędzy karty już uporządkowane. Zakładając, że ciąg do posortowania oznaczony jest przez a i składa się on z elementów, sortowanie przez proste wstawianie odbywa się w następujący sposób: dla każdego i = 2, 3,..., trzeba powtarzać wstawianie elementu a i w już uporządkowaną część ciągu a 1 a i 1. metodzie tej obiekty podzielone są umownie na dwa ciągi: ciąg wynikowy a 1, a 2,..., a i 1 oraz ciąg źródłowy a i... a n. każdym kroku, zaczynając od i = 2, i-ty element ciągu źródłowego przenoszony jest do ciągu wynikowego i wstawiany w odpowiednie miejsce, po czym wartość i jest inkrementowana. Pętla zaczyna się od i = 2, gdyż zakładamy, że element a 1 już znajduje się na właściwym miejscu. Ponieważ przy przenoszeniu elementów w lewo istnieje możliwość przekroczenia zakresu tablicy, najczęściej stosuje się wartownika. Dla uproszczenia kodu zakłada się, że wartownik jest umieszczany pod indeksem 0. artownik musi być równy przenoszonemu elementowi, co zapewni, że nie da się wyjść poza tablicę. stawienie elementu w odpowiednie miejsce ciągu ilustruje rys. 1. Kolorem jasnoniebieskim zaznaczono elementy już posortowane, niebieskim - element do wstawienia.
2 lgorytmy sortowania wewnętrznego 2 artownik Ciąg ynik ysunek 1: stawianie elementu do uporządkowanej tablicy zaprezentowanym przykładzie wartownikiem jest element a 0. Pełni on także rolę bufora, w którym przechowywany jest aktualny element na czas przesunięcia innych elementów. ie można wykroczyć się poza pierwszy element tego ciągu, gdyż element a 0 ciągu, będący wartownikiem, jest zawsze elementem mniejszym lub równym od wstawianego, więc pętla zawsze zakończy się prawidłowo. Przykład opisuje wstawienie litery pomiędzy elementy i. pierwszym kroku kopiujemy literę na miejsce a 0, i staje się ona wartownikiem. Po skopiowaniu miejsce a 4, w którym dotychczas była litera, możemy potraktować jako wolne i wpisać tam inny element ciągu. Kopiujemy zatem literę a 3 (litera ) do a 4 - teraz wolne miejsce to a 3. Powtarzając kopiowanie do momentu natrafienia na literę większą lub równą przenoszonej, czyli jak w przykładzie literze, otrzymamy wolne miejsce, w które należy wstawić przenoszoną literę. staw element a i na miejsce o indeksie 0, otrzymując wartownika; Dopóki element a 0 jest mniejszy od a i 1 wykonuj przypisz elementowi a i element a i 1 zmniejsz i Przypisz elementowi a i element a 0 Przypisujemy do zmiennej a 0 element a i, następnie dopóki a 0 < a i wpisujemy do i-tego elementu ciągu element i 1, zmniejszając jednocześnie i. a zakończenie elementowi i-temu trzeba przypisać wartość a 0. lgorytm sortowania przez proste wstawianie działa stosunkowo wolno, jest on bowiem algorytmem klasy ( 2 ). znacza to, że w praktyce algorytm ten nie jest stosowany do sortowania długich ciągów. Jednocześnie zaletą algorytmu jest jego prostota. by posortować całą tablicę, należy po prostu wykonać algorytm wstawiania elementów do uporządkowanej tablicy dla elementów od indeksu 2 do. ozpatrzmy działanie algorytmu na przykładowym ciągu liter. a rys. 2, który obrazuje tę operację, elementy posortowane oznaczono kolorem jasnoniebieskim. a początku rozważana jest druga litera ciągu - litera (pierwsza litera ciągu - litera - znajduje się już na właściwym miejscu). Litera zostaje skopiowana na miejsce wartownika (a 0 ). astępnie powinna ona zostać wstawiona na odpowiednie miejsce w ciągu, czyli należy przenieść ją przed literę. arto zauważyć, że w tej iteracji przed wyjściem z lewej strony poza zakres tablicy chroni wartownik. iteracji nr 3 na właściwym miejscu, pomiędzy literami i, zostaje umieszczona litera. kolejnych iteracjach należy postępować analogicznie. niektórych iteracjach (np iteracja nr 3) przestawienie nie jest w ogóle konieczne, w pozostałych na właściwych miejscach zostają umieszczone odpowiednie litery.
3 lgorytmy sortowania wewnętrznego 3 artownik Ciąg ynik ysunek 2: ortowanie przez proste wstawianie ortowanie przez wstawianie połówkowe a metoda sortowania jest ulepszeniem sortowania przez proste wstawianie. Modyfikacja opiera się na prostej obserwacji: ponieważ wstawiamy elementy do posortowanej tablicy, można łatwo znaleźć miejsce, w które należy wstawić element dzięki metodzie przeszukiwania binarnego. Poza tą zmianą algorytm działa na identycznej zasadzie, jak zwykłe sortowanie przez proste wstawianie. Dzięki takiej modyfikacji zmniejsza się ilość porównań, liczba przesunięć pozostaje niezmieniona. Ponieważ jednak przesuwanie sortowanych elementów jest zwykle kosztowniejsze niż ich porównywanie, usprawnienie to nie jest znaczące. Dany jest ciąg o elementach a l... a p oraz element do wstawienia el. Poszukujemy miejsca w ciągu, w które powinien zostać wstawiony element el za pomocą algorytmu przeszukiwania binarnego. Można zapisać ten algorytm w następującej postaci: Dopóki l p wykonuj: blicz indeks elementu środkowego m ze wzoru m = (l + p)/2 ; Jeśli element eljest mniejszy od elementu a m : detnij prawą część tablicy przypisując p = m 1; przeciwnym wypadku: detnij lewą część tablicy, przypisując l = m + 1; Poszukujemy miejsca, w które należy wstawić literę P w ciągu (indeksowany od 1 do 10). a początku granice przeszukiwania określone są następująco - lewa l = 1, a prawa p = 10, gdyż przeszukujemy cały ciąg. zukamy indeksu środkowego elementu ciągu - jest to m = (l + p)/2 = 5, porównujemy zatem literę P ze środkową literą ciągu (litera ). Ponieważ litera P jest większa od, a wiadomo, że ciąg jest uporządkowany, to możemy odrzucić lewą część ciągu (na lewo od litery włącznie z samą literą ). obimy to poprzez przesunięcie lewego indeksu poszukiwań - teraz do l należy wstawić m + 1 = 6. a rysunku odrzucona część tablicy wyróżniona jest kolorem szarym. astępnie czynności powtarzamy: szukamy środka ciągu wg opisanej wyżej metody, otrzymując 8. Ze sprawdzenia (P < ) wynika, że tym razem litera w tablicy jest większa od
4 lgorytmy sortowania wewnętrznego 4 L=1 M=5 P=10 P L=6 M=8 P=10 P L=M=6 P=7 P L=P=M=7 P P=7 L=8 ysunek 3: Przeszukiwanie binarne szukanej, a więc można przesunąć prawą granicę przeszukania na m 1 = 7. Kontynuując w ten sposób do momentu, gdy lewa granica jest mniejsza lub równa od prawej, otrzymamy l = 8 i p = 7. Ponieważ L, przeszukiwanie kończy się. ndeks L jest miejscem, w które należy wstawić literę P. 3.2 ortowanie przez proste wybieranie (przez selekcję) Jest to kolejny prosty algorytm, który można opisać w następujący sposób: należy znaleźć najmniejszy element ciągu -elementowego i zamienić go miejscami z pierwszym elementem tego ciągu. astępnie znaleźć najmniejszy element w ciągu 1-elementowym (pierwszy element jest już posortowany, więc szukać najmniejszego elementu należy od indeksu 2) i zamienić go miejscami z drugim elementem ciągu. Kontynuując w ten sam sposób, ciąg zostanie posortowany. znaczając ciąg symbolem a i zakładając, że ma on elementów, sortowanie przez wybieranie polega na wyznaczeniu najmniejszego elementu ciągu a i... a dla każdego i = 1, 2,..., 1 i zamienieniu go elementem a i. perację tę powtarza się do czasu posortowania całego ciągu. większości implementacji liczba zamian w tym algorytmie wynosi 1, liczba porównań natomiast jest proporcjonalna do 2. Cechy te predestynują sortowanie przez proste wybieranie do obróbki zbiorów z dużymi polami danych i małymi kluczami, gdyż w takich zastosowaniach koszt przemieszczania danych dominuje nad kosztem porównań, a żaden inny algorytm nie dokonuje mniejszej ilości przestawień podczas sortowania. adą algorytmu sortowania przez wybieranie jest fakt, iż czas jego działania praktycznie nie zależy od stopnia uporządkowania zbioru sortowanego - oznacza to, że algorytm ten sortuje już posortowany ciąg lub ciąg zawierający te same liczby w takim samym czasie, jak ciąg całkowicie losowy. am algorytm ma następującą postać: ykonuj co następuje od indeksu i = 1 do i = 1: skaż najmniejszy element spośród a i... a ; Zamień ten element z elementem a i. Przebieg sortowania ciągu obrazuje rys. 4. Ciąg posortowany oznaczony jest kolorem niebieskim. pierwszym przebiegu pętli najmniejszym elementem jest, co zostało zaznaczone kolorem ciemnoniebieskim. lement ten jest zamieniany z pierwszym elementem ciągu (litera ).
5 lgorytmy sortowania wewnętrznego 5 Ciąg ynik ysunek 4: ortowanie przez proste wybieranie drugiej iteracji najmniejsze jest, dlatego też jest ono zamieniane z drugim elementem ciągu (pierwszym nieposortowanym) - literą. każdej kolejnej iteracji wyznaczane jest minimalny element w nieposortowanej części ciągu (elementy już posortowane oznaczane są kolorem jasnoniebieskim). astępnie, jeśli element minimalny nie znajduje się na właściwym miejscu, zamienia się go z pierwszym elementem nieposortowanym. Zdarza się, że element najmniejszy znajduje się już w ciągu posortowanym (tak, jak np w iteracji 5) - w takim przebiegu pętli nie zmienia się kolejności elementów w ciągu. 3.3 ortowanie bąbelkowe Metoda ta polega na zamienianiu miejscami dwóch sąsiadujących ze sobą elementów do czasu uzyskania zbioru uporządkowanego. azwa algorytmu pochodzi od analogii do pęcherzyków powietrza, ulatujących w górę tuby wypełnionej wodą. Zakładamy, że ciąg przeczesywany będzie zawsze od prawej do lewej strony. rafiając na najmniejszy element ciągu, zamieniany on jest z kolejnymi elementami aż trafi na pierwsze miejsce ciągu. drugim przebiegu postępuje się podobnie z drugim najmniejszym elementem, co prowadzi do umieszczenia tego elementu na drugim miejscu. Kontynuując otrzyma się ciąg posortowany. lgorytm ma następującą postać: ykonuj co następuje 1 razy od indeksu i = 1 do i = 1: skaż na ostatni element; ykonaj co następuje i razy od indeksu j = 1: Porównaj element j-ty z elementem j + 1; Jeśli porównywane elementy są w niewłaściwej kolejności (element j > j + 1), zamień je miejscami. ozważmy działanie algorytmu na przykładowym ciągu (rys. 5). pierwszej iteracji (rys. 6) ostatnia litera jest zamieniana kolejno z literami oraz (kolorem ciemnoniebieskim zaznaczono litery mniejsze - jeśli litera mniejsza znajduje się na dalszym miejscu ciągu, konieczna jest jej zamiana z literą poprzedzającą); zamiana zatrzymuje
6 lgorytmy sortowania wewnętrznego 6 Ciąg ynik ysunek 5: ortowanie bąbelkowe 1 ysunek 6: ortowanie bąbelkowe - pierwsza iteracja się na literze. astępnie to litera będzie zamieniana z każdą literą ją poprzedzającą i przesunie się na początek ciągu (litera jest najmniejsza w ciągu). kolejnych iteracjach, przy analogicznym postępowaniu, pojedyncze litery trafiają na właściwe miejsce w ciągu. Główną zaletą metody sortowania bąbelkowego jest łatwość jej implementacji. lgorytm ten ma natomiast wiele wad: zdarzają się puste przebiegi ciągu bez zamian, bo elementy są już posortowane, dodatkowo algorytm ten jest bardzo wrażliwy na konfigurację danych. Przykładowo, poniższe ciągi, prawie nie różniące się od siebie, wymagają różnej ilości zamian: w pierwszym przypadku jednej, a w drugim aż sześciu: Ciąg Ciąg B ortowanie szybkie lgorytm sortowania szybkiego (quicksort) jest najczęściej używanym algorytmem spośród wszystkich algorytmów sortowania. Podstawowa wersja tego algorytmu została wynaleziona w
7 lgorytmy sortowania wewnętrznego r. przez C... Hoare a. Popularność algorytmu sortowania szybkiego jest spowodowana jego zaletami: do posortowania n elementów wymaga średnio czasu proporcjonalnego do (n log n); czas działania algorytmu dla rzeczywistych przypadków jest najczęściej zbliżony do czasu średniego, a w wielu przypadkach czas ten jest nawet liniowy; jest dość prosty w implementacji, biorąc pod uwagę szybkość działania. lgorytm ten ma również wady: jest niestabilny, tzn. nie ma gwarancji zachowania kolejności takich samych elementów w tablicy posortowanej; np mając tablicę rekordów zawierających nazwiska oraz wiek, posortowaną po nazwiskach, sortując tę tablicę po wieku nie ma gwarancji, że osoby w tym samym wieku będą umieszczone alfabetycznie w tablicy posortowanej; pesymistyczna złożoność tego algorytmu wynosi (n 2 ). lgorytm sortowania szybkiego jest przykładem wykorzystania techniki dziel-i-rządź. echnika ta polega na wykorzystaniu cechy rekurencji: dekompozycji problemu na pewną ilość skończonych podproblemów tego samego typu, a następnie połączeniu otrzymanych częściowych rozwiązań w celu otrzymania rozwiązania globalnego. wielu przypadkach technika ta pozwala na zmianę klasy algorytmu (np z (n 2 ) do (n log 2 n)). lgorytm sortowania szybkiego działa na zasadzie podziału ciągu na dwie części i niezależnego, rekurencyjnego sortowania każdej z tych części. ajważniejszą częścią algorytmu jest proces podziału, który działa następująco: ybierany jest element osiowy - może to być dowolny element ciągu; Dokonuje się zamiany elementów ciągu tak, aby uzyskać dwie podtablice, pierwsza o elementach mniejszych lub równych elementowi osiowemu i druga o elementach większych lub równych elementowi osiowemu. Po dokonaniu podziału następuje rekurencyjne wywołanie algorytmu osobno dla części lewej i prawej. Można łatwo wykazać przez indukcję, że takie postępowanie prowadzi do posortowania danych, gdyż zawsze w wyniku podziału przynajmniej jeden element (osiowy) trafia na właściwą pozycję. Przykładowy schemat postępowania przy podziale ciągu jest następujący: dokonujemy wyboru elementu osiowego. Zwykle wybiera się pierwszy lub ostatni element ciągu; przeglądamy ciąg od jego lewego końca do momentu znalezienia elementu większego lub równego elementowi osiowemu; przeglądamy ciąg od prawego końca, do czasu znalezienia elementu mniejszego lub równego elementowi osiowemu; jeśli indeksy powyższych przeszukiwań nie minęły się, zamieniamy miejscami oba znalezione elementy;
8 lgorytmy sortowania wewnętrznego 8 ysunek 7: ortowanie szybkie - proces podziału kontynuujemy przeglądanie ciągu z lewej i prawej strony oraz zamianę miejscami elementów do czasu, gdy indeksy miną się. Przykład działania procesu podziału obrazuje rys. 7. Zakłada się, że elementem osiowym jest ostatni element ciągu (w przykładzie jest to litera ), co zostało na rysunku oznaczone kolorem jasnoniebieskim. dąc od początku ciągu szukamy pierwszego elementu większego lub równego od osiowego - warunek ten spełnia litera. astępnie idąc od prawej strony szukamy elementów mniejszych lub równych od osiowego - jak łatwo się domyślić, trafiamy na sam element osiowy, czyli literę. Zamieniamy miejscami litery oraz. Kontynuując, z lewej strony elementem większym od osiowego jest, natomiast z prawej strony jest to dopiero litera (litery oraz są większe od elementu osiowego - litery ). Zamieniamy miejscami litery oraz. kolejnej iteracji z lewej strony dochodzimy do elementu, a z prawej - do elementu, który jednak leży przed elementem. znacza to zakończenie przeczesywania tablicy. Po dokonaniu podziału ciągu na dwa podciągi, wystarczy tylko wywołać rekurencyjnie funkcję wykonującą szybkie sortowanie dla lewego oraz dla prawego podciągu. Podział na podciągi przebiega w miejscu minięcia się indeksów (w przykładzie - na literze, czyli dla indeksu równego 3). Przykład działania algorytmu szybkiego sortowania dla ciągu obrazuje rys. 8. Poszczególne linie przedstawiają postać ciągu już po wykonaniu podziału (zakłada się, że element osiowy jest ostatnim elementem ciągu - w każdej iteracji został on oznaczony kolorem jasnoniebieskim), miejsce podziału oznaczono pionową kreską. pierwszej iteracji elementem osiowym jest. Po dokonaniu podziału, wywoływana jest rekurencyjnie procedura sortująca na części lewej (ciąg ) oraz prawej (ciąg ). Dalsza część algorytmu wykonywana jest na identycznej zasadzie. Podczas implementowania algorytmu sortowania szybkiego należy pamiętać o: zapewnieniu zakończenia programu rekurencyjnego, czyli: procedura nie może wywołać sama siebie dla ciągów o długości 1 lub mniejszej procedura będzie wywoływać sama siebie dla ciągów o liczności mniejszej niż ilość elementów, z którymi została ona wywołana. Częstym błędzie implementacji polegającym na zapomnieniu o tym, by za każdym razem przynajmniej jeden element był wstawiany na właściwą pozycję. Błąd taki kończy się nieskończoną pętlą rekurencyjną, gdy element osiowy okazuje się być najmniejszym lub największym elementem ciągu.
9 lgorytmy sortowania wewnętrznego 9 Ciąg ynik ysunek 8: ortowanie szybkie ysunek 9: Przykładowe drzewo binarne, uporządkowane stogowo 3.5 ortowanie stogowe by omówić sortowanie stogowe, niezbędne jest wprowadzenie kilku podstawowych pojęć. Drzewo binarne jest drzewem, dla którego każdy ojciec ma co najwyżej dwóch bezpośrednich synów. trukturę taką przedstawia rys. 9. Każdy element drzewa, posiadający elementy dołączone na niższym poziomie, jest ich poprzednikiem (ojcem), natomiast same elementy dołączone są jego następnikami (zwanymi również potomkami lub synami). a przykład, na rys. 9 elementy 9 i 15 są bezpośrednimi następnikami (synami) elementu 21. lement 9 jest także bezpośrednim poprzednikiem (ojcem) elementów 3 i 2. Korzeń drzewa to element, nie posiadający poprzedników (znajdujący się na samej górze struktury - w przykładzie to element 21 ). drzewie uporządkowanym stogowo każdy poprzednik (ojciec) jest większy lub równy od wszystkich swoich następników (synów). znacza to, że korzeń drzewa jest jego największym elementem. Drzewo z rys. 9 jest uporządkowane stogowo. tóg jest zbiorem elementów, ułożonych w pełne drzewo binarne, uporządkowane stogowo i przedstawione w formie tablicy. Można przyjąć następującą zasadę: element na pozycji i ma następniki na pozycjach 2 i oraz 2 i + 1; analogicznie element na pozycji i ma poprzednika na pozycji i/2. astępniki elementu są mniejsze od samego elementu. Pośrednio można wnioskować, że na podstawie tej zasady żaden węzeł drzewa uporządkowanego stogowo nie jest większy od korzenia tego drzewa. zatem ciąg kluczy: h l, h l+1,..., h p jest stogiem, jeśli h i h 2 i h i h 2 i+1.
10 lgorytmy sortowania wewnętrznego 10 ablicowa reprezentacja drzewiasta tablicy H może przedstawiać się następująco: h 1 h 2 h 3 h 4 h 5 h 6 h 7 h 8 h 9 h 10 h 11 h 12 h 13 h 14 h 1 h 2 h 3 h 4 h 5 h 6 h 7 h 8 h 9 h 10 h 11 h 12 h 13 h 14 ysunek 10: ablica H oraz drzewo binarne ozpoczynając od pierwszego elementu tablicy do jej ostatniego elementu, dla wybranego elementu o indeksie i traktowanego jako poprzednik definujemy dwa następniki jako elementy o indeksach 2 i i 2 i + 1, np. dla elementu h tablicy H o indeksie 1 (h 1 ) jego następnikami będą elementy tablicy H o indeksach 2 (h 2 ) i 3 (h 3 ). nalogicznie dla elementu h 13 jego następnikami, zgodnie z opisaną zależnością, będą elementy h 26 oraz h 27. Dla każdego następnika można równie łatwo znaleźć jego poprzednika: w tablicy wystarczy odnaleźć element o indeksie i/2 - np dla elementu h 5 jego poprzednikiem będzie element h 2. Korzeniem drzewa jest element h 1 (o indeksie 1). czywiście muszą zachodzić zależności stogu, tzn. dla każdego i-tego elementu tablicy jego następniki na pozycjach 2 i oraz 2 i + 1 muszą być mniejsze od tego elementu. ależy zwrócić uwagę, że w podanym przykładzie element h 7 ma tylko jednego następnika - h 14. ynika to z faktu, że w tablicy H jest tylko 14 elementów. Mamy tutaj 7 poprzedników i jednocześnie 13 następników, czyli elementy h 1, h 2,..., h 7 są poprzednikami (są elementami z przynajmniej jednym następnikiem); jednocześnie elementy h 2, h 3,..., h 13 są następnikami (są elementami z przypisanym poprzednikiem). zatem w stogu część elementów jest jednocześnie poprzednikiem i następnikiem lgorytm tworzenia stogu z tablicy - przesiewanie stogu Jak wspomniano, stóg ma właściwość taką, że każdy i-ty element jest większy od swoich następników (elementów o indeksach 2 i oraz 2 i + 1). Zatem aby sprawdzić, czy tablica jest uporządkowana stogowo, należy przeanalizować wszystkie elementy będące poprzednikami i sprawdzić, czy ich następniki są mniejsze od tych elementów, a jeśli nie, zamienić miejscami badany element z następnikiem, który jest od niego większy. Po dokonaniu zamiany należy jeszcze sprawdzić, czy przesiany w dół element nie zakłócił porządku stogowego. by zmniejszyć ilość porównań, porównuje się następniki elementu, a sam element porównuje się z większym z jego następników. Przykład działania procedury przesiewania Dana jest tablica oraz reprezentowane przez nią drzewo binarne: eraz zaczynając od ostatniego elementu, będącego poprzednikiem wprowadzamy porządek stogowy w drzewie (rys. 12). Krok 1. bliczamy indeks ostatniego elementu będącego poprzednikiem poprzez obliczenie (m = /2, gdzie jest rozmiarem tablicy) - jest to wartość 4, a zatem indeks wskazuje
11 lgorytmy sortowania wewnętrznego ysunek 11: ablica H oraz reprezentowane przez nią drzewo binarne na element 8. lement ten ma jeden następnik, który jest mniejszy od niego, a zatem pierwsze poddrzewo, którego korzeniem jest element 4, spełnia własności stogu. Krok 2. Przechodzimy do elementu równego 5 o indeksie 3. en element ma dwóch następników, większym z nich jest 9 - a zatem poddrzewo nie jest stogiem (gdyż potomek 9 jest większy od swojego poprzednika) by ustanowić porządek stogowy, zamieniamy miejscami element 5 z elementem 9. Ponieważ żaden z następników nowego korzenia poddrzewa (elementu 9) nie jest ma swoich następników, po dokonaniu zamiany całe poddrzewo jest stogiem. Krok 3. lement równy 4 o indeksie 2. en element ma dwóch potomków - większym z nich jest 8, więc poddrzewo również nie jest stogiem (element 8 jest większy od poprzednika, elementu 4). Dokonujemy zatem zamiany miejscami elementu 4 i 8. Krok 3 B. eraz należy sprawdzić, czy całe poddrzewo jest już uporządkowane stogowo, sprawdzamy zatem, czy zamieniony element 4 jest większy od swoich następników (ma tylko jednego). kazuje się, że nie - więc konieczna jest kolejna zamiana elementów (element 4 o nowym indeksie 4 z elementem 6 o indeksie 8). Dopiero po przeczesaniu całego poddrzewa można uznać, że spełnia ono cechy stogu. Krok 4. Porównujemy element równy 1 o indeksie 1 z większym z jego następników (elementy o indeksach 2 i 3) i dokonujemy niezbędnej zamiany (element 3 z elementem 1). Krok 4 B. prawdzamy poddrzewo, którego korzeniem jest zamieniony moment wcześniej element 2. Zamiana nie jest wymagana, drzewo spełnia warunek stogu. Krok 5. Kończymy przesiewanie - całe drzewo jest uporządkowane stogowo. trzymujemy tablicę, przedstawioną w dolnej części rys. 12. am algorytm ma postać: ykonuj co następuje od indeksu i = /2 do i = 1: skaż na i-ty element tablicy; ybierz większego z następników tego elementu (jeśli ma jednego następnika, wybierz go); Jeśli następnik jest większy od badanego elementu wykonuj: Zamień miejscami badany element i-ty z jego większym potomkiem; Przypisz do i indeks elementu, który został przesiany w dół.
12 lgorytmy sortowania wewnętrznego B B ysunek 12: Działanie procedury przesiewania ortowanie stogowe ortowanie stogowe polega na wielokrotnym (n 1-krotnym, gdzie n oznacza rozmiar tablicy do posortowania) wykonaniu następującej sekwencji poleceń (zakładamy, że w tablicy jest już zaprowadzony porządek stogowy): ykonuj co następuje od indeksu i = do i = 2: Zamień i-ty element drzewa z korzeniem tego drzewa (elementem nr 1);
13 lgorytmy sortowania wewnętrznego 13 Przesiej drzewo, zawierające elementy od 1 do i 1; 3.6 ortowanie przez scalanie Działanie algorytmu sortowania przez scalanie można podzielić na dwie fazy: najpierw następuje podział tablicy na dwie równe części (lub prawie równe, gdy ilość elementów w tablicy jest nieparzysta), następnie każda z tych części jest nadal dzielona na pół itd. Proces podziału kończy się w momencie, gdy przetwarzana część tablicy zawiera tylko jeden element. tedy rozpoczyna się proces scalania poszczególnych fragmentów tablicy. Zasadę działania algorytmu sortowania przez scalanie przedstawia rys L=1 = L== L==6 L==1 L==2 L== L==5 PDZŁ L=1 = L=4 =5 CL L=1 = L=4 =6 L=1 = ysunek 13: ortowanie przez scalanie Uwaga! algorytmie sortowania przez scalanie, zgodnie z definicją algorytmu sortowania wewnętrznego, nie wolno używać dodatkowej tablicy! Zakładając, że sortowana tablica zawiera elementów, algorytm sortowania można przedstawić następująco: ykonuj co następuje dopóki tablica ma więcej niż jeden element: Podziel tablicę na dwie (prawie) równe części; ywołaj rekurencyjnie funkcję sortującą na lewej części tablicy; ywołaj rekurencyjnie funkcję sortującą na prawej części tablicy; Dokonaj scalenia obu części tablicy. zatem ciąg jest dzielony w każdym kroku na dwa niemal równoliczne podciągi, które rekurencyjnie porządkowane są tą sama metodą. arunkiem zakończenia rekurencji w tym algorytmie jest sytuacja, kiedy ciąg ma tylko jeden element. Zatem powrót z wywołań rekurencyjnych rozpoczyna się z ciągami złożonymi z pojedynczych elementów, które są następnie scalane w ciągi o długości dwa, a następnie w ciągi o długości trzy lub cztery elementy itd. am proces sortowania wymaga pamiętania lewej i prawej granicy podtablic, na które ciąg jest dzielony. ależy pamiętać, że podział na podtablice jest umowny, a wszystkie dane cały czas znajdują się w jednej tablicy, więc granice oznaczają tylko położenie podtablic w tablicy danych. Granice wszystkich podtablic zostały oznaczone na rys. 13, np w drugiej linii są dwie podtablice : 212 oraz 950, ich granicami są odpowiednio 1 i 3 oraz 4 i 6. Po zakończeniu rekurencyjnego dzielenia tablic, rozpoczyna się proces scalania. nalizując ten proces łatwo zauważyć, że zarówno lewa, jak i prawa część scalanej tablicy są zawsze posortowane prawidłowo, wystarczy więc elementy z prawej części tablicy wkomponować w część
14 lgorytmy sortowania wewnętrznego 14 lewą. Proces ten przypomina nieco sortowanie przez proste wstawianie, jednakże w tej sytuacji nie ma wartownika, należy więc kontrolować, czy podczas zamiany elementów indeksy cały czas wskazują na elementy tablicy. Fragment procesu scalania dwóch podtablic przedstawia rys. 14. lementy drugiego ciągu są wyróżnione kolorem ciemnoniebieskim. ysunek prezentuje wstawienie na właściwe miejsce tylko pierwszej cyfry drugiego ciągu (0), z kolejnymi cyframi drugiego ciągu należy postępować analogicznie. Ciąg Bufor ynik ysunek 14: Proces scalania dwóch ciągów - dla pierwszego elementu drugiego ciągu lgorytm scalania dwóch podtablic (l i r oznaczają odpowiednio lewy i prawy koniec tablicy) można zapisać następująco: ykonuj co następuje od indeksu i = (l + r)/2 do końca tablicy kopiuj i ty element tablicy do bufora tymczasowego; Ustaw indeks j na elemencie i 1; Dopóki j-ty element tablicy jest większy od bufora tymczasowego wykonuj: Przenieś element j-ty na miejsce j + 1; Zmniejsz j o 1; staw zawartość bufora tymczasowego w j + 1 miejsce tablicy. 4 Zadania do wykonania 1. Podać wynik działania każdego algorytmu dla ciągu PZYKLD. 2. Które z poznanych algorytmów sortowania są stabilne? Literatura [1] L. Banachowski i in. lgorytmy i struktury danych;, [2]. H. Cormen i in. prowadzenie do algorytmów,, 2000 [3]. Drozdek truktury danych w jezyku C,, 1996 [4] D.. Knuth ztuka programowania,, 2002 [5]. edgewick lgorytmy w C++, ydawnictwo M, 1999 [6] P. róblewski, lgorytmy, struktury danych i techniki programowania, HL, 1996 [7]. irth, lgorytmy + struktury danych = programy,, 2001
Sortowanie. Bartman Jacek Algorytmy i struktury
Sortowanie Bartman Jacek jbartman@univ.rzeszow.pl Algorytmy i struktury danych Sortowanie przez proste wstawianie przykład 41 56 17 39 88 24 03 72 41 56 17 39 88 24 03 72 17 41 56 39 88 24 03 72 17 39
Programowanie w VB Proste algorytmy sortowania
Programowanie w VB Proste algorytmy sortowania Sortowanie bąbelkowe Algorytm sortowania bąbelkowego polega na porównywaniu par elementów leżących obok siebie i, jeśli jest to potrzebne, zmienianiu ich
Strategia "dziel i zwyciężaj"
Strategia "dziel i zwyciężaj" W tej metodzie problem dzielony jest na kilka mniejszych podproblemów podobnych do początkowego problemu. Problemy te rozwiązywane są rekurencyjnie, a następnie rozwiązania
Algorytmy sortujące i wyszukujące
Algorytmy sortujące i wyszukujące Zadaniem algorytmów sortujących jest ułożenie elementów danego zbioru w ściśle określonej kolejności. Najczęściej wykorzystywany jest porządek numeryczny lub leksykograficzny.
Definicja. Ciąg wejściowy: Funkcja uporządkowująca: Sortowanie polega na: a 1, a 2,, a n-1, a n. f(a 1 ) f(a 2 ) f(a n )
SORTOWANIE 1 SORTOWANIE Proces ustawiania zbioru elementów w określonym porządku. Stosuje się w celu ułatwienia późniejszego wyszukiwania elementów sortowanego zbioru. 2 Definicja Ciąg wejściowy: a 1,
znalezienia elementu w zbiorze, gdy w nim jest; dołączenia nowego elementu w odpowiednie miejsce, aby zbiór pozostał nadal uporządkowany.
Przedstawiamy algorytmy porządkowania dowolnej liczby elementów, którymi mogą być liczby, jak również elementy o bardziej złożonej postaci (takie jak słowa i daty). Porządkowanie, nazywane również często
Sortowanie. LABORKA Piotr Ciskowski
Sortowanie LABORKA Piotr Ciskowski main Zaimplementuj metody sortowania przedstawione w następnych zadaniach Dla każdej metody osobna funkcja Nagłówek funkcji wg uznania ale wszystkie razem powinny być
Laboratorium nr 7 Sortowanie
Laboratorium nr 7 Sortowanie 1. Sortowanie bąbelkowe (BbS) 2. Sortowanie przez wstawianie (IS) 3. Sortowanie przez wybieranie (SS) Materiały Wyróżniamy następujące metody sortowania: 1. Przez prostą zamianę
Rekurencja. Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Przykład: silnia: n! = n(n-1)!
Rekurencja Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Przykład: silnia: n! = n(n-1)! Pseudokod: silnia(n): jeżeli n == 0 silnia = 1 w przeciwnym
Drzewa BST i AVL. Drzewa poszukiwań binarnych (BST)
Drzewa ST i VL Drzewa poszukiwań binarnych (ST) Drzewo ST to dynamiczna struktura danych (w formie drzewa binarnego), która ma tą właściwość, że dla każdego elementu wszystkie elementy w jego prawym poddrzewie
Sortowanie przez wstawianie Insertion Sort
Sortowanie przez wstawianie Insertion Sort Algorytm sortowania przez wstawianie można porównać do sposobu układania kart pobieranych z talii. Najpierw bierzemy pierwszą kartę. Następnie pobieramy kolejne,
Sortowanie - wybrane algorytmy
Sortowanie - wybrane algorytmy Aleksandra Wilkowska Wydział Matematyki - Katedra Matematyki Stosowanej Politechika Wrocławska 2 maja 2018 1 / 39 Plan prezentacji Złożoność obliczeniowa Sortowanie bąbelkowe
Algorytmy i Struktury Danych, 2. ćwiczenia
Algorytmy i Struktury Danych, 2. ćwiczenia 2017-10-13 Spis treści 1 Optymalne sortowanie 5 ciu elementów 1 2 Sortowanie metodą Shella 2 3 Przesunięcie cykliczne tablicy 3 4 Scalanie w miejscu dla ciągów
Analiza algorytmów zadania podstawowe
Analiza algorytmów zadania podstawowe Zadanie 1 Zliczanie Zliczaj(n) 1 r 0 2 for i 1 to n 1 3 do for j i + 1 to n 4 do for k 1 to j 5 do r r + 1 6 return r 0 Jaka wartość zostanie zwrócona przez powyższą
Drzewa poszukiwań binarnych
1 Cel ćwiczenia Algorytmy i struktury danych Instytut Sterowania i Systemów Informatycznych Wydział Elektrotechniki, Informatyki i Telekomunikacji Uniwersytet ielonogórski Drzewa poszukiwań binarnych Ćwiczenie
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.
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 x 1, x 2,, x n. Wynik: Uporządkowanie
Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium 7. 2 Drzewa poszukiwań binarnych
Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych Algorytmy i struktury danych Laboratorium Drzewa poszukiwań binarnych 1 Cel ćwiczenia Ćwiczenie ma na celu zapoznanie studentów
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH Temat : Drzewa zrównoważone, sortowanie drzewiaste Wykładowca: dr inż. Zbigniew TARAPATA e-mail: Zbigniew.Tarapata@isi.wat.edu.pl http://www.tarapata.strefa.pl/p_algorytmy_i_struktury_danych/
Sortowanie bąbelkowe
1/98 Sortowanie bąbelkowe (Bubble sort) prosty i nieefektywny algorytm sortowania wielokrotnie przeglądamy listę elementów, porównując dwa sąsiadujące i zamieniając je miejscami, jeśli znajdują się w złym
Jeszcze o algorytmach
Jeszcze o algorytmach Przykłady różnych, podstawowych algorytmów 11.01.2018 M. Rad Plan Powtórka Znajdowanie najmniejszego elementu Segregowanie Poszukiwanie przez połowienie Wstawianie Inne algorytmy
Algorytm selekcji Hoare a. Łukasz Miemus
Algorytm selekcji Hoare a Łukasz Miemus 1 lutego 2006 Rozdział 1 O algorytmie 1.1 Problem Mamy tablicę A[N] różnych elementów i zmienną int K, takie że 1 K N. Oczekiwane rozwiązanie to określenie K-tego
Rekurencja. Przykład. Rozważmy ciąg
Rekurencja Definicje rekurencyjne Definicja: Mówimy, iż ciąg jest zdefiniowany rekurencyjnie, jeżeli: (P) Określony jest pewien skończony zbiór wyrazów tego ciągu, zwykle jest to pierwszy wyraz tego ciągu
Sortowanie danych. Jolanta Bachan. Podstawy programowania
Sortowanie danych Podstawy programowania 2013-06-06 Sortowanie przez wybieranie 9 9 9 9 9 9 10 7 7 7 7 7 10 9 1 3 3 4 10 7 7 10 10 10 10 4 4 4 4 4 4 3 3 3 3 2 2 2 2 2 2 2 3 1 1 1 1 1 1 Gurbiel et al. 2000
Wstęp do programowania
Wstęp do programowania Algorytmy na tablicach Paweł Daniluk Wydział Fizyki Jesień 2013 P. Daniluk (Wydział Fizyki) WP w. III Jesień 2013 1 / 23 Dwadzieścia pytań Zasady 1 Osoba 1 wymyśla hasło z ustalonej
ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2014/2015. Drzewa BST c.d., równoważenie drzew, kopce.
POLITECHNIKA WARSZAWSKA Instytut Automatyki i Robotyki ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 204/205 Język programowania: Środowisko programistyczne: C/C++ Qt Wykład 2 : Drzewa BST c.d., równoważenie
Algorytmy przeszukiwania wzorca
Algorytmy i struktury danych Instytut Sterowania i Systemów Informatycznych Wydział Elektrotechniki, Informatyki i Telekomunikacji Uniwersytet Zielonogórski Algorytmy przeszukiwania wzorca 1 Wstęp Algorytmy
Algorytmy i struktury danych
Algorytmy i struktury danych Proste algorytmy sortowania Witold Marańda maranda@dmcs.p.lodz.pl 1 Pojęcie sortowania Sortowaniem nazywa się proces ustawiania zbioru obiektów w określonym porządku Sortowanie
Algorytmy sortujące. sortowanie kubełkowe, sortowanie grzebieniowe
Algorytmy sortujące sortowanie kubełkowe, sortowanie grzebieniowe Sortowanie kubełkowe (bucket sort) Jest to jeden z najbardziej popularnych algorytmów sortowania. Został wynaleziony w 1956 r. przez E.J.
Temat 7. Najlżejsze i najcięższe algorytmy sortowania
Temat 7 Najlżejsze i najcięższe algorytmy sortowania Streszczenie Komputery są często używane porządkowania różnych danych, na przykład nazwisk (w porządku alfabetycznym), terminów spotkań lub e-maili
Sortowanie zewnętrzne
Algorytmy i struktury danych Instytut Sterowania i Systemów Informatycznych Wydział Elektrotechniki, Informatyki i Telekomunikacji Uniwersytet Zielonogórski Sortowanie zewnętrzne 1 Wstęp Bardzo często
Podstawy Informatyki. Metody dostępu do danych
Podstawy Informatyki c.d. alina.momot@polsl.pl http://zti.polsl.pl/amomot/pi Plan wykładu 1 Bazy danych Struktury danych Średni czas odszukania rekordu Drzewa binarne w pamięci dyskowej 2 Sformułowanie
Struktury Danych i Złożoność Obliczeniowa
Struktury Danych i Złożoność Obliczeniowa Zajęcia 2 Algorytmy wyszukiwania, sortowania i selekcji Sortowanie bąbelkowe Jedna z prostszych metod sortowania, sortowanie w miejscu? Sortowanie bąbelkowe Pierwsze
Tadeusz Pankowski www.put.poznan.pl/~tadeusz.pankowski
: idea Indeksowanie: Drzewo decyzyjne, przeszukiwania binarnego: F = {5, 7, 10, 12, 13, 15, 17, 30, 34, 35, 37, 40, 45, 50, 60} 30 12 40 7 15 35 50 Tadeusz Pankowski www.put.poznan.pl/~tadeusz.pankowski
Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 9 Rekurencja
Podstawy Informatyki Inżynieria Ciepła, I rok Wykład 9 Rekurencja Rekurencja z łacińskiego oznacza to przybiec z powrotem - osiągniesz rzecz wielką, jeśli zawrócisz po to, by osiągnąć rzeczy małe Przykład:
Każdy węzeł w drzewie posiada 3 pola: klucz, adres prawego potomka i adres lewego potomka. Pola zawierające adresy mogą być puste.
Drzewa binarne Każdy węzeł w drzewie posiada pola: klucz, adres prawego potomka i adres lewego potomka. Pola zawierające adresy mogą być puste. Uporządkowanie. Zakładamy, że klucze są różne. Klucze leżące
Metodyki i Techniki Programowania 2
Metodyki i Techniki Programowania 2 zajęcia nr 5 algorytmy cz.1: sortowanie Elektronika i Telekomunikacja, semestr III rok akademicki 2009/2010 mgr inż.. Paweł Myszkowski Plan dzisiejszych zajęć 1. Sortowanie
Zadania do wykonania. Rozwiązując poniższe zadania użyj pętlę for.
Zadania do wykonania Rozwiązując poniższe zadania użyj pętlę for. 1. apisz program, który przesuwa w prawo o dwie pozycje zawartość tablicy 10-cio elementowej liczb całkowitych tzn. element t[i] dla i=2,..,9
Algorytmy przeszukiwania
Algorytmy przeszukiwania Przeszukiwanie liniowe Algorytm stosowany do poszukiwania elementu w zbiorze, o którym nic nie wiemy. Aby mieć pewność, że nie pominęliśmy żadnego elementu zbioru przeszukujemy
Kolejka priorytetowa. Często rozważa się kolejki priorytetowe, w których poszukuje się elementu minimalnego zamiast maksymalnego.
Kolejki Kolejka priorytetowa Kolejka priorytetowa (ang. priority queue) to struktura danych pozwalająca efektywnie realizować następujące operacje na zbiorze dynamicznym, którego elementy pochodzą z określonego
INFORMATYKA SORTOWANIE DANYCH.
INFORMATYKA SORTOWANIE DANYCH http://www.infoceram.agh.edu.pl SORTOWANIE Jest to proces ustawiania zbioru obiektów w określonym porządku. Sortowanie stosowane jest w celu ułatwienia późniejszego wyszukania
Sortowanie przez scalanie
Sortowanie przez scalanie Wykład 2 12 marca 2019 (Wykład 2) Sortowanie przez scalanie 12 marca 2019 1 / 17 Outline 1 Metoda dziel i zwyciężaj 2 Scalanie Niezmiennik pętli - poprawność algorytmu 3 Sortowanie
Algorytmy i Struktury Danych
Algorytmy i Struktury Danych Kopce Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 11 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 11 1 / 69 Plan wykładu
Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium Nr 4
Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych Algorytmy i struktury danych Laboratorium Nr 4 Algorytmy sortowania zewnętrznego 1 Wstęp Bardzo często przy rozwiązywaniu praktycznych
Zadanie projektowe 1: Struktury danych i złożoność obliczeniowa
Łukasz Przywarty 171018 Data utworzenia: 24.03.2010r. Mariusz Kacała 171058 Prowadzący: prof. dr hab. inż. Adam Janiak oraz dr inż. Tomiasz Krysiak Zadanie projektowe 1: Struktury danych i złożoność obliczeniowa
Wysokość drzewa Głębokość węzła
Drzewa Drzewa Drzewo (ang. tree) zbiór węzłów powiązanych wskaźnikami, spójny i bez cykli. Drzewo posiada wyróżniony węzeł początkowy nazywany korzeniem (ang. root). Drzewo ukorzenione jest strukturą hierarchiczną.
Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek
Algorytmy i str ruktury danych Metody algorytmiczne Bartman Jacek jbartman@univ.rzeszow.pl Metody algorytmiczne - wprowadzenia Znamy strukturę algorytmów Trudność tkwi natomiast w podaniu metod służących
Algorytmy sortujące. Sortowanie bąbelkowe
Algorytmy sortujące Sortowanie bąbelkowe Sortowanie bąbelkowe - wstęp Algorytm sortowania bąbelkowego jest jednym z najstarszych algorytmów sortujących. Zasada działania opiera się na cyklicznym porównywaniu
REKURENCJA W JĘZYKU HASKELL. Autor: Walczak Michał
REKURENCJA W JĘZYKU HASKELL Autor: Walczak Michał CZYM JEST REKURENCJA? Rekurencja zwana rekursją, polega na wywołaniu przez funkcję samej siebie. Algorytmy rekurencyjne zastępują w pewnym sensie iteracje.
Podstawowe algorytmy i ich implementacje w C. Wykład 9
Wstęp do programowania 1 Podstawowe algorytmy i ich implementacje w C Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 9 Element minimalny i maksymalny zbioru Element minimalny
Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.
Sortowanie Dane wejściowe: ciąg n-liczb (kluczy) (a 1, a 2, a 3,..., a n 1, a n ) Dane wyjściowe: permutacja ciągu wejściowego (a 1, a 2, a 3,..., a n 1, a n) taka, że a 1 a 2 a 3... a n 1 a n. Będziemy
liniowa - elementy następują jeden za drugim. Graficznie możemy przedstawić to tak:
Sortowanie stogowe Drzewo binarne Binary Tree Dotychczas operowaliśmy na prostych strukturach danych, takich jak tablice. W tablicy elementy ułożone są zgodnie z ich numeracją, czyli indeksami. Jeśli za
Algorytmy i struktury danych
Algorytmy i struktury danych ĆWICZENIE 2 - WYBRANE ZŁOŻONE STRUKTURY DANYCH - (12.3.212) Prowadząca: dr hab. inż. Małgorzata Sterna Informatyka i3, poniedziałek godz. 11:45 Adam Matuszewski, nr 1655 Oliver
Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe
Algorytmy i złożoności Wykład 3. Listy jednokierunkowe Wstęp. Lista jednokierunkowa jest strukturą pozwalającą na pamiętanie danych w postaci uporzadkowanej, a także na bardzo szybkie wstawianie i usuwanie
Typy danych. 2. Dane liczbowe 2.1. Liczby całkowite ze znakiem i bez znaku: 32768, -165, ; 2.2. Liczby rzeczywiste stało i zmienno pozycyjne:
Strona 1 z 17 Typy danych 1. Dane tekstowe rozmaite słowa zapisane w różnych alfabetach: Rozwój metod badawczych pozwala na przesunięcie granicy poznawania otaczającego coraz dalej w głąb materii: 2. Dane
Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno
Instrukcja laboratoryjna 5 Podstawy programowania 2 Temat: Drzewa binarne Przygotował: mgr inż. Tomasz Michno 1 Wstęp teoretyczny Drzewa są jedną z częściej wykorzystywanych struktur danych. Reprezentują
Algorytmy i struktury danych
Algorytmy i struktury danych Zaawansowane algorytmy sortowania Witold Marańda maranda@dmcs.p.lodz.pl 1 Sortowanie za pomocą malejących przyrostów metoda Shella Metoda jest rozwinięciem metody sortowania
Drzewo. Drzewo uporządkowane ma ponumerowanych (oznaczonych) następników. Drzewo uporządkowane składa się z węzłów, które zawierają następujące pola:
Drzewa Drzewa Drzewo (ang. tree) zbiór węzłów powiązanych wskaźnikami, spójny i bez cykli. Drzewo posiada wyróżniony węzeł początkowy nazywany korzeniem (ang. root). Drzewo ukorzenione jest strukturą hierarchiczną.
ALGORYTMY I STRUKTURY DANYCH
LGORTM I STRUKTUR DNH Temat 6: Drzewa ST, VL Wykładowca: dr inż. bigniew TRPT e-mail: bigniew.tarapata@isi.wat.edu.pl http://www.tarapata.strefa.pl/p_algorytmy_i_struktury_danych/ Współautorami wykładu
Struktury danych: stos, kolejka, lista, drzewo
Struktury danych: stos, kolejka, lista, drzewo Wykład: dane w strukturze, funkcje i rodzaje struktur, LIFO, last in first out, kolejka FIFO, first in first out, push, pop, size, empty, głowa, ogon, implementacja
Algorytmy i. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski
Algorytmy i struktury danych Wykład 5: Drzewa Dr inż. Paweł Kasprowski pawel@kasprowski.pl Drzewa Struktury przechowywania danych podobne do list ale z innymi zasadami wskazywania następników Szczególny
[12] Metody projektowania algorytmów (dziel i rządź, programowanie dynamiczne i algorytmy zachłanne).
[12] Metody projektowania algorytmów (dziel i rządź, programowanie dynamiczne i algorytmy zachłanne). Tworzenie projektów informatycznych opiera się w dużej mierze na formułowaniu i implementacji algorytmów,
WYKŁAD 3 WYPEŁNIANIE OBSZARÓW. Plan wykładu: 1. Wypełnianie wieloboku
WYKŁ 3 WYPŁNINI OSZRÓW. Wypełnianie wieloboku Zasada parzystości: Prosta, która nie przechodzi przez wierzchołek przecina wielobok parzystą ilość razy. Plan wykładu: Wypełnianie wieloboku Wypełnianie konturu
Jednym z najprostszych sposobów porządkowania jest technika stosowana przy sortowaniu listów:
Jednym z najprostszych sposobów porządkowania jest technika stosowana przy sortowaniu listów: Listy rozkładane są do różnych przegródek. O tym, do której z nich trafi koperta, decydują różne fragmenty
Złożoność obliczeniowa zadania, zestaw 2
Złożoność obliczeniowa zadania, zestaw 2 Określanie złożoności obliczeniowej algorytmów, obliczanie pesymistycznej i oczekiwanej złożoności obliczeniowej 1. Dana jest tablica jednowymiarowa A o rozmiarze
Wykład 3. Złożoność i realizowalność algorytmów Elementarne struktury danych: stosy, kolejki, listy
Wykład 3 Złożoność i realizowalność algorytmów Elementarne struktury danych: stosy, kolejki, listy Dynamiczne struktury danych Lista jest to liniowo uporządkowany zbiór elementów, z których dowolny element
Matematyka dyskretna - 7.Drzewa
Matematyka dyskretna - 7.Drzewa W tym rozdziale zajmiemy się drzewami: specjalnym przypadkiem grafów. Są one szczególnie przydatne do przechowywania informacji, umożliwiającego szybki dostęp do nich. Definicja
prowadzący dr ADRIAN HORZYK /~horzyk e-mail: horzyk@agh tel.: 012-617 Konsultacje paw. D-13/325
PODSTAWY INFORMATYKI WYKŁAD 8. prowadzący dr ADRIAN HORZYK http://home home.agh.edu.pl/~ /~horzyk e-mail: horzyk@agh agh.edu.pl tel.: 012-617 617-4319 Konsultacje paw. D-13/325 DRZEWA Drzewa to rodzaj
PODSTAWY INFORMATYKI wykład 5.
PODSTAWY INFORMATYKI wykład 5. Adrian Horzyk Web: http://home.agh.edu.pl/~horzyk/ E-mail: horzyk@agh.edu.pl Google: Adrian Horzyk Gabinet: paw. D13 p. 325 Akademia Górniczo-Hutnicza w Krakowie WEAIiE,
Wstęp do programowania
Wstęp do programowania Rekurencja, metoda dziel i zwyciężaj Paweł Daniluk Wydział Fizyki Jesień 2014 P. Daniluk(Wydział Fizyki) WP w. VIII Jesień 2014 1 / 27 Rekurencja Recursion See Recursion. P. Daniluk(Wydział
Sortowanie Shella Shell Sort
Sortowanie Shella Shell Sort W latach 50-tych ubiegłego wieku informatyk Donald Shell zauważył, iż algorytm sortowania przez wstawianie pracuje bardzo efektywnie w przypadku gdy zbiór jest w dużym stopniu
Wykład 5. Sortowanie w czasie liniowologarytmicznym
Wykład 5 Sortowanie w czasie liniowologarytmicznym 1 Sortowanie - zadanie Definicja (dla liczb): wejście: ciąg n liczb A = (a 1, a 2,, a n ) wyjście: permutacja (a 1,, a n ) taka, że a 1 a n 2 Zestawienie
Grafy (3): drzewa. Wykłady z matematyki dyskretnej dla informatyków i teleinformatyków. UTP Bydgoszcz
Grafy (3): drzewa Wykłady z matematyki dyskretnej dla informatyków i teleinformatyków UTP Bydgoszcz 13 (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 1 / 107 Drzewo Definicja. Drzewo to graf acykliczny
Listy, kolejki, stosy
Listy, kolejki, stosy abc Lista O Struktura danych składa się z węzłów, gdzie mamy informacje (dane) i wskaźniki do następnych węzłów. Zajmuje tyle miejsca w pamięci ile mamy węzłów O Gdzie można wykorzystać:
5. Podstawowe algorytmy i ich cechy.
23 5. Podstawowe algorytmy i ich cechy. 5.1. Wyszukiwanie liniowe i binarne 5.1.1. Wyszukiwanie liniowe Wyszukiwanie jest jedną z najczęściej wykonywanych operacji na strukturach danych i dotyczy wszystkich,
Drzewa czerwono-czarne.
Binboy at Sphere http://binboy.sphere.p l Drzewa czerwono-czarne. Autor: Jacek Zacharek Wstęp. Pojęcie drzewa czerwono-czarnego (red-black tree) zapoczątkował Rudolf Bayer w książce z 1972 r. pt. Symmetric
Znajdowanie wyjścia z labiryntu
Znajdowanie wyjścia z labiryntu Zadanie to wraz z problemem pakowania najcenniejszego plecaka należy do problemów optymalizacji, które dotyczą znajdowania najlepszego rozwiązania wśród wielu możliwych
Wykład 2. Drzewa zbalansowane AVL i 2-3-4
Wykład Drzewa zbalansowane AVL i -3-4 Drzewa AVL Wprowadzenie Drzewa AVL Definicja drzewa AVL Operacje wstawiania i usuwania Złożoność obliczeniowa Drzewa -3-4 Definicja drzewa -3-4 Operacje wstawiania
Instrukcje dla zawodników
Instrukcje dla zawodników Nie otwieraj arkusza z zadaniami dopóki nie zostaniesz o to poproszony. Instrukcje poniżej zostaną ci odczytane i wyjaśnione. 1. Arkusz składa się z 3 zadań. 2. Każde zadanie
dodatkowe operacje dla kopca binarnego: typu min oraz typu max:
ASD - ćwiczenia IX Kopce binarne własność porządku kopca gdzie dla każdej trójki wierzchołków kopca (X, Y, Z) porządek etykiet elem jest następujący X.elem Y.elem oraz Z.elem Y.elem w przypadku kopca typu
Rekurencja. Rekurencja zwana także rekursją jest jedną z najważniejszych metod konstruowania rozwiązań i algorytmów.
Rekurencja Rekurencja zwana także rekursją jest jedną z najważniejszych metod konstruowania rozwiązań i algorytmów. Zgodnie ze znaczeniem informatycznym algorytm rekurencyjny to taki który korzysta z samego
WYKŁAD 9. Algorytmy sortowania elementów zbioru (tablic) Programy: c4_1.c... c4_3.c. Tomasz Zieliński
WYKŁAD 9 Algorytmy sortowania elementów zbioru (tablic) Programy: c4_1.c... c4_3.c Tomasz Zieliński /* Przyklad 4.1 - SORTOWANIE TABLIC - metoda najprostsza */ #include #define ROZMIAR 11 void
WSTĘP DO INFORMATYKI. Drzewa i struktury drzewiaste
Akademia Górniczo-Hutnicza Wydział Elektrotechniki, Automatyki, Informatyki i Inżynierii Biomedycznej WSTĘP DO INFORMATYKI Adrian Horzyk Drzewa i struktury drzewiaste www.agh.edu.pl DEFINICJA DRZEWA Drzewo
Zaawansowane algorytmy i struktury danych
Zaawansowane algorytmy i struktury danych u dr Barbary Marszał-Paszek Opracowanie pytań teoretycznych z egzaminów. Strona 1 z 12 Pytania teoretyczne z egzaminu pisemnego z 25 czerwca 2014 (studia dzienne)
Wyszukiwanie binarne
Wyszukiwanie binarne Wyszukiwanie binarne to technika pozwalająca na przeszukanie jakiegoś posortowanego zbioru danych w czasie logarytmicznie zależnym od jego wielkości (co to dokładnie znaczy dowiecie
Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:
Sortowanie Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania: podać strukturę danych dla elementów dynamicznego skończonego multi-zbioru S, względem którego są wykonywane następujące
Teoretyczne podstawy informatyki
Teoretyczne podstawy informatyki Wykład 6a Model danych oparty na drzewach 1 Model danych oparty na drzewach Istnieje wiele sytuacji w których przetwarzane informacje mają strukturę hierarchiczną lub zagnieżdżoną,
Porządek symetryczny: right(x)
Porządek symetryczny: x lef t(x) right(x) Własność drzewa BST: W drzewach BST mamy porządek symetryczny. Dla każdego węzła x spełniony jest warunek: jeżeli węzeł y leży w lewym poddrzewie x, to key(y)
KODY SYMBOLI. Kod Shannona-Fano. Algorytm S-F. Przykład S-F
KODY SYMBOLI Kod Shannona-Fano KODOWANIE DANYCH, A.Przelaskowski Metoda S-F Kod Huffmana Adaptacyjne drzewo Huffmana Problemy implementacji Kod Golomba Podsumowanie Kod drzewa binarnego Na wejściu rozkład:
Wykład 3. Metoda dziel i zwyciężaj
Wykład 3 Metoda dziel i zwyciężaj 1 Wprowadzenie Technika konstrukcji algorytmów dziel i zwyciężaj. przykładowe problemy: Wypełnianie planszy Poszukiwanie (binarne) Sortowanie (sortowanie przez łączenie
Algorytmy i Struktury Danych.
Algorytmy i Struktury Danych. Metoda Dziel i zwyciężaj. Problem Sortowania, cd. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 2 Bożena Woźna-Szcześniak (AJD) Algorytmy
Luty 2001 Algorytmy (4) 2000/2001
Mając dany zbiór elementów, chcemy znaleźć w nim element największy (maksimum), bądź najmniejszy (minimum). We wszystkich naturalnych metodach znajdywania najmniejszego i największego elementu obecne jest
Programowanie proceduralne INP001210WL rok akademicki 2017/18 semestr letni. Wykład 3. Karol Tarnowski A-1 p.
Programowanie proceduralne INP001210WL rok akademicki 2017/18 semestr letni Wykład 3 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji (1) Co to jest algorytm? Zapis algorytmów Algorytmy
Wyszukiwanie w BST Minimalny i maksymalny klucz. Wyszukiwanie w BST Minimalny klucz. Wyszukiwanie w BST - minimalny klucz Wersja rekurencyjna
Podstawy Programowania 2 Drzewa bst - część druga Arkadiusz Chrobot Zakład Informatyki 12 maja 2016 1 / 8 Plan Wstęp Wyszukiwanie w BST Minimalny i maksymalny klucz Wskazany klucz Zmiany w funkcji main()
Algorytmy i struktury danych. Co dziś? Tytułem przypomnienia metoda dziel i zwyciężaj. Wykład VIII Elementarne techniki algorytmiczne
Algorytmy i struktury danych Wykład VIII Elementarne techniki algorytmiczne Co dziś? Algorytmy zachłanne (greedyalgorithms) 2 Tytułem przypomnienia metoda dziel i zwyciężaj. Problem można podzielić na
Podstawy Programowania 1 Sortowanie tablic jednowymiarowych. Plan. Sortowanie. Sortowanie Rodzaje sortowania. Notatki. Notatki. Notatki.
Podstawy Programowania 1 Sortowanie tablic jednowymiarowych Arkadiusz Chrobot Zakład Informatyki 12 listopada 20 1 / 35 Plan Sortowanie Wartość minimalna i maksymalna w posortowanej tablicy Zakończenie
Algorytmy i struktury danych. Wykład 4 Tablice nieporządkowane i uporządkowane
Algorytmy i struktury danych Wykład 4 Tablice nieporządkowane i uporządkowane Tablice uporządkowane Szukanie binarne Szukanie interpolacyjne Tablice uporządkowane Szukanie binarne O(log N) Szukanie interpolacyjne
Podstawą w systemie dwójkowym jest liczba 2 a w systemie dziesiętnym liczba 10.
ZAMIANA LICZB MIĘDZY SYSTEMAMI DWÓJKOWYM I DZIESIĘTNYM Aby zamienić liczbę z systemu dwójkowego (binarnego) na dziesiętny (decymalny) należy najpierw przypomnieć sobie jak są tworzone liczby w ww systemach
Kompresja danych Streszczenie Studia Dzienne Wykład 10,
1 Kwantyzacja wektorowa Kompresja danych Streszczenie Studia Dzienne Wykład 10, 28.04.2006 Kwantyzacja wektorowa: dane dzielone na bloki (wektory), każdy blok kwantyzowany jako jeden element danych. Ogólny
Efektywna metoda sortowania sortowanie przez scalanie
Efektywna metoda sortowania sortowanie przez scalanie Rekurencja Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Metoda dziel i zwycięŝaj Dzielimy
Podstawowe struktury danych
Podstawowe struktury danych 1) Listy Lista to skończony ciąg elementów: q=[x 1, x 2,..., x n ]. Skrajne elementy x 1 i x n nazywamy końcami listy, a wielkość q = n długością (rozmiarem) listy. Szczególnym