ALGORYTMY I STRUKTURY DANYCH

Slides:



Advertisements
Podobne prezentacje
ALGORYTMY I STRUKTURY DANYCH
Advertisements

ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH WYKŁAD 04 k-ty co do wielkości. Stosy Grażyna Mirkowska PJWSTK, ITN semestr letni 2002.
Ekonometria stosowana WYKŁAD 4 Piotr Ciżkowicz Katedra Międzynarodowych Studiów Porównawczych.
Stężenia Określają wzajemne ilości substancji wymieszanych ze sobą. Gdy substancje tworzą jednolite fazy to nazywa się je roztworami (np. roztwór cukru.
Jak majtek Kowalski wielokąty poznawał Opracowanie: Piotr Niemczyk kl. 1e Katarzyna Romanowska 1e Gimnazjum Nr 2 w Otwocku.
© Matematyczne modelowanie procesów biotechnologicznych - laboratorium, Studium Magisterskie Wydział Chemiczny Politechniki Wrocławskiej, Kierunek Biotechnologia,
Excel 2007 dla średniozaawansowanych zajęcia z dnia
Przemiany energii w ruchu harmonicznym. Rezonans mechaniczny Wyk. Agata Niezgoda Projekt współfinansowany przez Unię Europejską w ramach Europejskiego.
Poczta elektroniczna – e- mail Gmail zakładanie konta. Wysyłanie wiadomości.
Wypadkowa sił.. Bardzo często się zdarza, że na ciało działa kilka sił. Okazuje się, że można działanie tych sił zastąpić jedną, o odpowiedniej wartości.
Zmienne losowe Zmienne losowe oznacza się dużymi literami alfabetu łacińskiego, na przykład X, Y, Z. Natomiast wartości jakie one przyjmują odpowiednio.
Zapraszamy na naszą stronę. Zależy nam na kontakcie z Wami. Czytajcie, komentujcie i dyskutujcie na forum. Nic o Was bez Was Zapraszamy na naszą stronę.
W KRAINIE TRAPEZÓW. W "Szkole Myślenia" stawiamy na umiejętność rozumowania, zadawania pytań badawczych, rozwiązywania problemów oraz wykorzystania wiedzy.
Materiały pochodzą z Platformy Edukacyjnej Portalu Wszelkie treści i zasoby edukacyjne publikowane na łamach Portalu
Algorytm Newtona - Raphsona
KOMBINATORYKA.
Metody Analizy Danych Doświadczalnych Wykład 9 ”Estymacja parametryczna”
Menu Jednomiany Wyrażenia algebraiczne -definicja Mnożenie i dzielenie sum algebraicznych przez jednomian Mnożenie sum algebraicznych Wzory skróconego.
I T P W ZPT 1 Realizacje funkcji boolowskich Omawiane do tej pory metody minimalizacji funkcji boolowskich związane są z reprezentacją funkcji w postaci.
Optymalna wielkość produkcji przedsiębiorstwa działającego w doskonałej konkurencji (analiza krótkookresowa) Przypomnijmy założenia modelu doskonałej.
Metody sztucznej inteligencji - Technologie rozmyte i neuronowe 2015/2016 Perceptrony proste nieliniowe i wielowarstwowe © Kazimierz Duzinkiewicz, dr hab.
Podstawowe prace w jednym z najlepszych programów graficznych.
Renata Maciaszczyk Kamila Kutarba. Teoria gier a ekonomia: problem duopolu  Dupol- stan w którym dwaj producenci kontrolują łącznie cały rynek jakiegoś.
Nr36zad3 Klasa IIIa Gimnazjum w Bogdańcu ma zaszczyt zaprezentować rozwiązanie zadania: o trójkątach z monet!
 Przedziałem otwartym ( a;b ) nazywamy zbiór liczb rzeczywistych x spełniających układ nierówności x a, co krócej zapisujemy a
Budżetowanie kapitałowe cz. III. NIEPEWNOŚĆ senesu lago NIEPEWNOŚĆ NIEMIERZALNA senesu strice RYZYKO (niepewność mierzalna)
 Austriacki fizyk teoretyk,  jeden z twórców mechaniki kwantowej,  laureat nagrody Nobla ("odkrycie nowych, płodnych aspektów teorii atomów i ich zastosowanie"),
O PARADOKSIE BRAESSA Zbigniew Świtalski Paweł Skałecki Wydział Matematyki, Informatyki i Ekonometrii Uniwersytet Zielonogórski Zakopane 2016.
Test analizy wariancji dla wielu średnich – klasyfikacja pojedyncza
PODZIELNOŚĆ WIELOMIANÓW
Schematy blokowe.
Wyznaczanie miejsc zerowych funkcji
DEFINICJA I ZASTOSOWANIE W JĘZYKU HASKELL
terminologia, skale pomiarowe, przykłady
On-the-Fly Garbage Collection
Ciąg arytmetyczny Opracowały : Iwona Głowacka i Małgorzata Jacek.
Liczby pierwsze.
Przybliżenia dziesiętne liczb rzeczywistych
ALGORYTMY I STRUKTURY DANYCH
Podstawy automatyki I Wykład /2016
Programowanie obiektowe
Wstęp do Informatyki - Wykład 3
Elementy analizy matematycznej
Opracowała: Monika Grudzińska - Czerniecka
Elementy fizyki kwantowej i budowy materii
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
Tworzenie modelu: przeglądanie wyników, redukcja rozmiarów modelu.
ALGORYTMY I STRUKTURY DANYCH
Problem Plecakowy (Problem złodzieja okradającego sklep)
ALGORYTMY I STRUKTURY DANYCH
Pisemne dzielenie liczb naturalnych
ALGORYTMY I STRUKTURY DANYCH
MATEMATYKAAKYTAMETAM
ALGORYTMY I STRUKTURY DANYCH
Implementacja rekurencji w języku Haskell
Znajdowanie liczb pierwszych w zbiorze
Doskonalenie rachunku pamięciowego u uczniów
Wyrównanie sieci swobodnych
ALGORYTMY I STRUKTURY DANYCH
Język C++ Operatory Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła.
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
Elementy Kombinatoryki
WYBRANE ZAGADNIENIA PROBABILISTYKI
Grazyna Mirkowska Matematyka Dyskretna PJWSTK 2001
dr Robert Kowalczyk, PWSZ Płock
Zapis prezentacji:

ALGORYTMY I STRUKTURY DANYCH WYKŁAD 02 Wyszukiwanie Grażyna Mirkowska PJWSTK, 2003/2004

G. Mirkowska, ASD_02 Wyszukiwanie Plan wykładu Wyszukiwanie w dowolnym ciągu Algorytm naiwny Analiza kosztu średniego Wyszukiwanie w ciągu uporządkowanym Algorytm sekwencyjny Algorytm ze skokami algorytm binarnych poszukiwań Problem optymalności 2019-11-02 G. Mirkowska, ASD_02 Wyszukiwanie

Wyszukiwanie w ciągu nieuporządkowanym Problem Niech E będzie daną przestrzenią, a X jej skończonym podzbiorem. Zbadać, czy dany element x przestrzeni E należy do wybranego podzbioru X. Metoda rozwiązania polega na porównywaniu kolejnych elementów ciągu, poczynając od pierwszego, z elementem x. Jeśli badany element jest równy x, to kończymy postępowanie; jeśli nie, to rozważamy następny element ciągu. Specyfikacja wp ={(ei ) ciąg n elementów przestrzeni E , n 1} wk ={ wynik  ( i n) ei = x} Zakładamy, że elementy ciągu są przechowywane w pewnej tablicy e[1], e[2],...,e[n]. 2019-11-02 G. Mirkowska, ASD_02 Wyszukiwanie

G. Mirkowska, ASD_02 Wyszukiwanie Diagram przepływu początek wynik := false; i := 1; x  {e[1],...,e[i-1]}, wynik=false , i=1 i n and not wynik koniec x  {e[1],...,e[i-1]}, in+1,wynik=false, in x= e[i] Tak Nie x  {e[1],...,e[i-1]}, in, x e[i] wynik := true i := i+1; x  {e[1],...,e[i-1]}, in+1, wynik=false x=e[i], in wynik=true 2019-11-02 G. Mirkowska, ASD_02 Wyszukiwanie

G. Mirkowska, ASD_02 Wyszukiwanie Algorytm Wersja 1 { i :=1; wynik := false; while ( i  n and not wynik) { if x=e[i] then wynik := true else i := i+1 fi; } Wersja 2 { e[n+1]:= x; i:=1; while (e[i]  x ) { i := i+1; } wynik := (i  n ); } wynik= true, i  n , e[i]=x lub wynik=false, i=n+1, x  {e[1],...,e[i-1]} wynik = true wttw dla pewnego i  n , e[i]=x 2019-11-02 G. Mirkowska, ASD_02 Wyszukiwanie

G. Mirkowska, ASD_02 Wyszukiwanie Analiza kosztu Operacja dominująca = porównywanie elementów W najlepszym razie algorytm wykona 1 porównanie. W najgorszym razie n- porównań. Prawdopodo-bieństwo wystąpienia danych d Koszt średni A(n)=S d Dn p(d) * t(d) Koszt realizacji algorytmu dla danych d Niech p(xX)= p i załóżmy, że jest jednakowo prawdopodobne, że x znajduje się na 1szym, 2gim czy i-tym miejscu. Wtedy p(x=e[i]) = p/n. A koszt pamięciowy? Zatem A(n) =1* p/n+ 2*p/n +...+n*p/n +n*(1-p) = n - (n-1)*p/2. 2019-11-02 G. Mirkowska, ASD_02 Wyszukiwanie

Wyszukiwanie w ciągu uporządkowanym Problem Dany jest ciąg rosnący e[1],..,e[n] oraz element x pewnej przestrzeni liniowo uporządkowanej <E, >. Chcemy ustalić przedział e[i], e[i+1], w którym ewentualnie mieści się x. e[1] e[2] e[n-1] e[n] ... Przedział 0 Przedział 1 Przedział n-1 Przedział n e[3] Specyfikacja : wp= {(i<n) e[i]<e[i+1] , n>0 } wk= {wynik= i wttw x należy do itego przedziału} Metoda sekwencyjna 1. Zbadamy przypadki skrajne: przedział 0 i przedział n-ty i ew. kończymy . 2. Następnie porównujemy x z kolejnymi elementami ciągu poczynając od e[2]. Jeśli x jest mniejsze prawego końca rozważanego i-tego przedziału, to znaczy , że x znajduje się w tym przedziale, e[i] x <e[i+1]. Jeśli tak nie jest, to trzeba zbadać następny przedział. Na kolejnych slajdach pokażemy kilka rozwiązań tego samego problemu: wyszukiwania w ciągu uporządkowanym. Przykład ten ma tę zaletę, że jest prosty i łatwo pokazać różnicę w kosztach kolejnych wersji rozwiązania problemu. 2019-11-02 G. Mirkowska, ASD_02 Wyszukiwanie

Metoda poszukiwań sekwencyjnych Poniważ x  e[i+1], to i+1 nie może być równe n,bo z wcześniejszych porównań wiemy, że x<e[n]. Czyli i+1<n Koszt algorytmu { if x<e[1] then i := 0 else if x e[n] then i := n else i := 1; while x e[i+1] { i := i+1; } fi; fi; wynik := i; } e[i]x  e[n], 1i  n e[i]x , xe[i+1], i+1  n xe[i] , i n W skrajnych przypadkach mamy 1 lub 2 porównania W najgorszym razie 2 + (n-1) porównań.Czyli W(n) = O(n). Chociaż zadanie zostało sformułowane ogólnie, to ograniczymy się w tej chwili do struktury liczb rzeczywistych. Oczywiście nie zmienia to ogólności postępowania, ale zamieszczony tutaj tekst używa standardowego rozumienia relacji niewiększości. W ogólnym przypadku należałoby napisać funkcję o wartościach booleowskich, która realizowałaby porównywanie elementów i odpowiednio jej użyć w testach programu. e[i] x  e[i+1], i n A koszt średni? 2019-11-02 G. Mirkowska, ASD_02 Wyszukiwanie

Koszt średni algorytmu sekwencyjnego Rozszerzamy dany ciąg o elementy a i b, tzn. przyjmujemy e[0] = a i e[n+1] =b, gdzie [a,b] jest przedziałem, w którym mieszczą się elementy ciągu oraz x. Załóżmy, że prawdopodobieństwo tego, że x przyjmuje jakąś wartość z przedziału [a,b] jest zawsze takie samo. Mamy p(x [e[i],e[i+1])) = (e[i+1] – e[i])/(b-a) Koszt oczekiwany algorytmu A(n) = Przedział został podzielony na (n+1) kawałków. Skoro mają być takie same, to długość jednego wynosi (b-a)/(n+1). Oznaczmy to przez x. Zatem A(x)= 1+ (m-1)x/nx + Suma{ ((n-i) x)/(n x) : i=1...n-1} = 1 + 1/n{ n-1 + 1+ 2 + ... + n-1} = 1+ 1/n {(n-1) + n (n-1)/2} = n/2 + 1.5 - 1/n Jeśli długości przedziałów są takie same, to A(n) = n/2 +c, gdzie c<2 2019-11-02 G. Mirkowska, ASD_02 Wyszukiwanie

G. Mirkowska, ASD_02 Wyszukiwanie Skoki „co 4” omiń Idea Porównujemy element x z co czwartym elementem danego ciągu tak długo aż znajdziemy element większy od x. Wtedy szukamy x sekwencyjnie wśród czterech poprzedzających go elementach ciągu. Metoda dokładniej: 1 krok: Zbadać czy x [e[1],e[n]). Jeśli nie, to ustalić wynik zgodnie ze specyfikacją, a jeśli tak to wykonać krok 2. 2 krok: Porównywać x z kolejnymi elementami o indeksach 4i, tak długo aż (a) znajdziemy element e[4i]>x lub (b) aż przekroczymy n (a) szukamy wyniku sekwencyjnie w przedziale [e[4i- 4], e[4i]), (b) szukamy wyniku sekwencyjnie w przedziale [e[4i- 4], e[n]). 2019-11-02 G. Mirkowska, ASD_02 Wyszukiwanie

G. Mirkowska, ASD_02 Wyszukiwanie Algorytm skoki „co 4” { if x < e[1] then i :=0 else if x  e[n] then i := n else i := 4; bool := false; while (i  n and not bool) do if x  e[i] then i := i + 4 else bool := true fi od; i := i- 4; while x  e[i+1] do i := i+1 od; fi; fi; wynik := i } e[1]  x  e[n] e[j]  x dla j=1,2,...,i-4,  bool e[j]  x dla j=1,2,...,i,  bool, in e[j]  x dla j=1,2,...,i-4,  bool , in+4 e[j]  x dla j=1,2,...,i-4, x<e[i], bool bool oraz e[i- 4]  x<e[i] lub  bool oraz e[i- 4]  x<e[n] Koszt pesymistyczny: W(n)= 2 +[n/4]+3 2019-11-02 G. Mirkowska, ASD_02 Wyszukiwanie

G. Mirkowska, ASD_02 Wyszukiwanie Skoki „co k” { if x < e[1] then i :=0 else if x  e[n] then i := n else i := k; bool := false; while (i  n and not bool) do if x  e[i] then i := i + k else bool := true fi od; i := i-k; while x  e[i+1] do i := i+1 od; fi; fi; wynik := i } Niezmiennik: e[j]  x<e[n] dla j=1,2,...,i-k, i  n+k 2019-11-02 G. Mirkowska, ASD_02 Wyszukiwanie

G. Mirkowska, ASD_02 Wyszukiwanie Optymalne k Dla jakich wartości k algorytm ma najmniejszy koszt pesymistyczny? Koszt pesymistyczny wyraża się funkcją f(n) = 2 + n/k + ( k-1) Szukamy minimum tej funkcji: f’(k) = -n/k2 + 1 f’(k) = 0 dla k = n oraz f’’ ( n)>0 Koszt pesymistyczny będzie najmniejszy, gdy k =  n Wniosek 2019-11-02 G. Mirkowska, ASD_02 Wyszukiwanie

Algorytm binarnych poszukiwań Metoda „dziel i zwyciężaj” Podziel dany ciąg na dwie części. Sprawdź, w której połowie ciągu znajduje się poszukiwany element i dalej szukaj tą samą metodą w tej właśnie połowie. wp : e[1]  x < e[n], n>1 wk : e[wynik]  x< e[wynik+1] { i :=1; j := n; while j-i >1 do m := (i+j) div 2; if e[m]  x then i := m else j := m fi od; wynik := i } Niezmiennik e[i]  x  e[j], i  j W tym algorytmi pominiemy przypadek, że x nie należy do żadnego z przedziałów wyznaczonych przez nasz ciąg e1,...en. Uprościmy i skrócimy tym samym algorytm. Oczywiście, dopisując takie same testy jak w poprzednich algorytmach łatwo przekształcimy podany tu algorytm do przypadku ogólnego. W związku z powyższym, specyfikacja wygląda tym razem nieco inaczej. Łatwo też wykryć niezmiennik pętli. Zaproponowana formuła jest rzeczywiście niezmiennikiem pętli w tym programie. Skoro x jest między i-tym i jty, elementem to znajduje się albo w lewej albo w prawej połowie tego przedziału. Po ustaleniu (porównanie w instrukcji if) , w której części znajduje się nasz element , przesuwamy jeden z końców przedziału. Zatem po wykonaniu treści pętli, znów x znajduje się miedzy i-tym i j-tym elementem. Po wykonaniu całej pętli mamy j-i=1 zatem ustaliliśmy przedział. 1+i = j oraz e[i]  x  e[j] 2019-11-02 G. Mirkowska, ASD_02 Wyszukiwanie

Koszt algorytmu binarnych poszukiwań Czy ten algorytm zatrzymuje się ? Niech k będzie liczbą wykonanych iteracji pętli oraz odl(k) = j - i. Przed wykonaniem pętli mamy k=0 i odl(k) = n-1. odl(k+1) = odl(k)/2, jeśli odl(k) jest liczbą parzystą (odl(k)-1)/2  odl(k+1)  (odl(k)+1)/2 , jeśli odl(k) jest liczbą nieparzystą Aby ustalić jaka jest najwieksza możliwa liczba k, wystarczy spytać ile razy daną liczbę całkowitą możemy podzielić na 2 tak by iloraz był jeszcze liczbą naturalną. Odl(k) jest liczbą całkowitą z przedziału [1,n-1 ] i ze wzrostem k maleje! Istnieje zatem takie k, że odl(k)=1. A więc algorytm zatrzymuje się. A jaka jest największa wartość k? k = lg n 2019-11-02 G. Mirkowska, ASD_02 Wyszukiwanie