Wstęp do programowania

Podobne dokumenty
Wstęp do programowania

Wstęp do programowania

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 )

Algorytmy sortujące i wyszukujące

Laboratorium nr 7 Sortowanie

INFORMATYKA SORTOWANIE DANYCH.

Programowanie w VB Proste algorytmy sortowania

Wstęp do programowania

Analiza algorytmów zadania podstawowe

Podstawowe algorytmy i ich implementacje w C. Wykład 9

Wstęp do programowania

Strategia "dziel i zwyciężaj"

Sortowanie danych. Jolanta Bachan. Podstawy programowania

znalezienia elementu w zbiorze, gdy w nim jest; dołączenia nowego elementu w odpowiednie miejsce, aby zbiór pozostał nadal uporządkowany.

Wstęp do programowania

Programowanie i projektowanie obiektowe

Algorytmy. 1. Sortowanie 2. Statki i okręty. programowanie cz.7. poniedziałek, 2 marca 2009

Sortowanie. LABORKA Piotr Ciskowski

1. Znajdowanie miejsca zerowego funkcji metodą bisekcji.

Struktury Danych i Złożoność Obliczeniowa

Problemy porządkowe zadania

Informatyka A. Algorytmy

Algorytmy i Struktury Danych.

Zajęcia nr 5 Algorytmy i wskaźniki. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Podstawy Programowania 1 Sortowanie tablic jednowymiarowych. Plan. Sortowanie. Sortowanie Rodzaje sortowania. Notatki. Notatki. Notatki.

Sortowanie Shella Shell Sort

Zaawansowane algorytmy i struktury danych

Algorytmy sortujące. sortowanie kubełkowe, sortowanie grzebieniowe

. Podstawy Programowania 1. Sortowanie tablic jednowymiarowych. Arkadiusz Chrobot. 16 listopada 2016

funkcje rekurencyjne Wykład 12. Podstawy programowania (język C) Funkcje rekurencyjne (1) Funkcje rekurencyjne (2)

Sortowanie bąbelkowe

Egzamin, AISDI, I termin, 18 czerwca 2015 r.

Sortowanie przez wstawianie Insertion Sort

Rekurencje. Jeśli algorytm zawiera wywołanie samego siebie, jego czas działania moŝe być określony rekurencją. Przykład: sortowanie przez scalanie:

Podstawy Informatyki. Sprawność algorytmów

Algorytmy i Struktury Danych, 2. ćwiczenia

Algorytmy i struktury danych

Sortowanie przez scalanie

Sortowanie. Bartman Jacek Algorytmy i struktury

[12] Metody projektowania algorytmów (dziel i rządź, programowanie dynamiczne i algorytmy zachłanne).

Wyszukiwanie binarne

PODSTAWY INFORMATYKI wykład 5.

WYKŁAD 9. Algorytmy sortowania elementów zbioru (tablic) Programy: c4_1.c... c4_3.c. Tomasz Zieliński

Algorytm selekcji Hoare a. Łukasz Miemus

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.

Programowanie Proceduralne

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium Nr 4

Algorytmy sortujące 1

Sortowanie zewnętrzne

Jeszcze o algorytmach

Temat 7. Najlżejsze i najcięższe algorytmy sortowania

Sortowanie - wybrane algorytmy

Wykład 5. Sortowanie w czasie liniowologarytmicznym

Sortowanie bąbelkowe - wersja nr 1 Bubble Sort

Wykład 2. Poprawność algorytmów

Złożoność algorytmów. Wstęp do Informatyki

Algorytmy i. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski

CO TO JEST ALGORYTM?

Algorytmy i struktury danych Matematyka III sem.

EGZAMIN - Wersja A. ALGORYTMY I STRUKTURY DANYCH Lisek89 opracowanie kartki od Pani dr E. Koszelew

Algorytmy sortujące. Sortowanie bąbelkowe

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 9. Karol Tarnowski A-1 p.

Algorytmy i złożoność obliczeniowa. Wojciech Horzelski

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

Algorytmy i struktury danych

Wstęp do programowania

Analiza algorytmów zadania podstawowe

Programowanie proceduralne INP001210WL rok akademicki 2017/18 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Przykładowe sprawozdanie. Jan Pustelnik

Podstawy algorytmiki i programowania - wykład 6 Sortowanie- algorytmy

Algorytmy i struktury danych Sortowanie IS/IO, WIMiIP

Złożoność obliczeniowa zadania, zestaw 2

Algorytmy i struktury danych. Co dziś? Tytułem przypomnienia metoda dziel i zwyciężaj. Wykład VIII Elementarne techniki algorytmiczne

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Matematyczne Podstawy Informatyki

Teoretyczne podstawy informatyki

Wybrane algorytmy tablicowe

Wstęp do programowania

Zaawansowane algorytmy i struktury danych

Teoretyczne podstawy informatyki

Informatyka wprowadzenie do algorytmów (II) dr hab. inż. Mikołaj Morzy

Kolejka priorytetowa. Często rozważa się kolejki priorytetowe, w których poszukuje się elementu minimalnego zamiast maksymalnego.

ALGORYTMY GENETYCZNE ćwiczenia

Wykład 3. Metoda dziel i zwyciężaj

Algorytmy sortowania w języku C. Autor: mgr inż. Sławomir Samolej. Zagadnienie 1. (Sortowanie)

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2014/2015. Drzewa BST c.d., równoważenie drzew, kopce.

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe

Wstęp do programowania. Dziel i rządź. Piotr Chrząstowski-Wachtel

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 4. Karol Tarnowski A-1 p.

Algorytmy przeszukiwania

Algorytmy i struktury danych. Wykład 4 Tablice nieporządkowane i uporządkowane

Zadania do wykonania. Rozwiązując poniższe zadania użyj pętlę for.

Metodyki i Techniki Programowania 2

Rekurencja. Przykład. Rozważmy ciąg

Wstęp do programowania

Uwaga: Funkcja zamień(a[j],a[j+s]) zamienia miejscami wartości A[j] oraz A[j+s].

Algorytmy i Struktury Danych

Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami

Wykład 1_2 Algorytmy sortowania tablic Sortowanie bąbelkowe

lekcja 8a Gry komputerowe MasterMind

Transkrypt:

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 kategorii. 2 Osoba 2 zadaje pytania, na które odpowiedź jest tak albo nie. 3 Po dwudziestym pytaniu należy podać hasło. 4 Nie wolno łgać. P. Daniluk (Wydział Fizyki) WP w. III Jesień 2013 2 / 23

Wyszukiwanie Problem Dana jest posortowana tablica (lista) T liczb całkowitych długości N oraz liczba a. Określić, czy i na której pozycji a występuje w tablicy. P. Daniluk (Wydział Fizyki) WP w. III Jesień 2013 3 / 23

Wyszukiwanie Problem Dana jest posortowana tablica (lista) T liczb całkowitych długości N oraz liczba a. Określić, czy i na której pozycji a występuje w tablicy. Rozwiązanie naiwne Przeglądamy elementy tablicy po kolei. P. Daniluk (Wydział Fizyki) WP w. III Jesień 2013 3 / 23

Wyszukiwanie Problem Dana jest posortowana tablica (lista) T liczb całkowitych długości N oraz liczba a. Określić, czy i na której pozycji a występuje w tablicy. Rozwiązanie naiwne Przeglądamy elementy tablicy po kolei. Dobry pomysł 1 Sprawdzamy czy T [ N 2 ] a. 2 Jeśli nie T T [0.. N 2 ] 3 Jeśli tak T T [ N 2..N] 4 Teraz wystarczy znaleźć a w T. 5 Kończymy, gdy T liczy jeden element. P. Daniluk (Wydział Fizyki) WP w. III Jesień 2013 3 / 23

Wyszukiwanie c.d. Wydajność wyszukiwania naiwnego W najgorszym przypadku poszukiwany element jest na końcu tablicy. Zanim do niego dojdziemy wykonamy N porównań. Wydajność wyszukiwania binarnego Po każdym kroku T staje się dwa razy krótsza. Zatem wykonamy log 2 N + 1 porównań. To duża różnica N log 2 N + 1 1 1 10 5 100 8 1000 11 1000000 21 1000000000 31 P. Daniluk (Wydział Fizyki) WP w. III Jesień 2013 4 / 23

Wyszukiwanie c.d. Diabeł tkwi w szczegółach Należy zagwarantować, że tablica zmniejsza się w każdym kroku, co może być kłopotliwe dla małych N. Można sprawdzać, czy T [ N 2 ] = a i w tym momencie od razu przerywać, albo poczekać, aż T będzie miało 0 lub 1 element i wtedy sprawdzić. Możliwa jest implementacja iteracyjna lub rekurencyjna. P. Daniluk (Wydział Fizyki) WP w. III Jesień 2013 5 / 23

Sortowanie Problem Dana jest tablica T długości N zawierająca liczby całkowite. Uporządkować liczby w kolejności od najmniejszej do największej. Jest wiele algorytmów sortowania, które różnią się wydajnością, stopniem skomplikowania i innymi subtelnymi cechami. P. Daniluk (Wydział Fizyki) WP w. III Jesień 2013 6 / 23

Sortowanie przez scalanie (ang. merge sort) Problem Dane są dwie posortowane tablice T 1 i T 2 o długości N. Zbudować posortowaną tablicę T zawierającą elementy z obu tablic (T 1 i T 2 ). Pomysł Można porównywać pierwsze elementy T 1 i T 2. Mniejszy z nich odcinać i wpisywać do T. P. Daniluk (Wydział Fizyki) WP w. III Jesień 2013 7 / 23

Sortowanie przez scalanie (ang. merge sort) c.d. Schemat rozwiązania przechodzenie po dwóch tablicach i =0 j =0 while i <N and j <N: i f T1 [ i ]<T2 [ j ] :... i=i +1 e l s e :... j=j +1 P. Daniluk (Wydział Fizyki) WP w. III Jesień 2013 8 / 23

Sortowanie przez scalanie (ang. merge sort) c.d. Ten algorytm można stosować wielokrotnie dzieląc sortowaną tablicę na tablice długości 1 i scalając je parami. Uwaga W taki sposób można sortować dane, które nie mieszczą się w pamięci. P. Daniluk (Wydział Fizyki) WP w. III Jesień 2013 9 / 23

Sortowanie bąbelkowe (bubble sort) Pomysł Polega na porównywaniu dwóch kolejnych elementów i zamianie ich kolejności, jeżeli zaburza ona porządek, w jakim się sortuje tablicę. Sortowanie kończy się, gdy podczas kolejnego przejścia nie dokonano żadnej zmiany. Przydatne schematy iterowanie dopóki zachodzą zmiany changed=true while changed : changed=f a l s e... P. Daniluk (Wydział Fizyki) WP w. III Jesień 2013 10 / 23

Sortowanie bąbelkowe (bubble sort) Przydatne schematy zamiana wartości tmp=t[ i ] T[ i ]=T[ j ] T[ j ]=tmp albo T[ i ],T[ j ] = T[ j ],T[ i ] P. Daniluk (Wydział Fizyki) WP w. III Jesień 2013 11 / 23

Sortowanie przez wstawianie (insertion sort) Pomysł 1 Utwórz zbiór T. 2 Weź dowolny element z T. 3 Wyciągnięty element porównuj z kolejnymi elementami z T póki nie napotkasz elementu większego. 4 Wyciągnięty element wstaw w miejsce, gdzie skończyłeś porównywać. 5 Jeśli zostały elementy w T wróć do punktu 2. Przydatny schemat działanie w miejscu Jeżeli w pkt. 2 zawsze będziemy brali pierwszy element T, to możemy budować T w miejscu, które było zajmowane przez rozważony początek tablicy T. P. Daniluk (Wydział Fizyki) WP w. III Jesień 2013 12 / 23

Sortowanie przez wstawianie (insertion sort) c.d. Przydatny schemat znajdowanie pierwszego elementu niemniejszego niż a w posortowanej tablicy T i =0 while i < N and T[ i ] < a : i = i + 1 # i <N => T[ i ]>=a P. Daniluk (Wydział Fizyki) WP w. III Jesień 2013 13 / 23

Sortowanie przez wstawianie (insertion sort) c.d. Przydatny schemat wstawianie wartości a do tablicy długości N w miejsce i-te j=n+1 while j >i : T[ j ]=T[ j 1] j=j 1 # W tym momencie i==j T[ j ]=a P. Daniluk (Wydział Fizyki) WP w. III Jesień 2013 14 / 23

Flaga polska Problem Lista T wypełniona zerami i jedynkami reprezentuje ciąg n urn w których znajdują się żetony białe (0) i czerwone (1). Podać algorytm, który zamieniając żetony miejscami doprowadzi do sytuacji, w której wszystkie żetony białe znajdują się na lewo od czerwonych. Pomysł Należy przesuwać się indeksem c od początku tablicy, zaś indeksem b od końca. Intencją jest utrzymywanie następującego niezmmiennika: wszystkie elementy tablicy o indeksach mniejszych od c są czerwone, zaś większych od b są białe. Indeksy c i b będą się do siebie zbliżać i ostatecznie, gdy c będzie równe b, tablica będzie uporządkowana. P. Daniluk (Wydział Fizyki) WP w. III Jesień 2013 15 / 23

Wyszukiwanie mediany Problem Dana jest tablica T długości N (nieuporządkowana). Znaleźć k-ty w porządku rosnącym element (dla mediany k = n 2 ). Pomysł Można wziąć dowolny element a i podzielić tablicę na elementy mniejsze równe od a i większe od a (flaga polska). k-ty element jest w jednej z uzyskanych części (w zależności od k i ich liczności). P. Daniluk (Wydział Fizyki) WP w. III Jesień 2013 16 / 23

Wyszukiwanie mediany c.d. Schemat rozwiązania b=0 e=n 1 while b < e : p=p i v o t (T, b, e ) i f p>k : e=p 1 e l s e : b=p return T[ b ] P. Daniluk (Wydział Fizyki) WP w. III Jesień 2013 17 / 23

Wyszukiwanie mediany c.d. Uwaga To rozwiązanie przy pechowym losowaniu elementów może być powolne. Istnieje rozwiązanie lepsze algorytm Bluma-Floyda-Pratta-Rivesta-Tarjana P. Daniluk (Wydział Fizyki) WP w. III Jesień 2013 18 / 23

Segment o maksymalnej sumie Problem Dana jest tablica T liczb całkowitych długości N. Obliczyć maksymalną sumę segmentu (wycinka) tej tablicy. Przyjmujemy, że segment pusty ma sumę 0. Przydatny schemat obliczanie sumy przy pomocy akumulatora akumulator=0 f o r i in l : akumulator = akumulator + i Dodawanie można zastąpić dowolną inną operacją. P. Daniluk (Wydział Fizyki) WP w. III Jesień 2013 19 / 23

Segment o maksymalnej sumie c.d. Przydatny schemat wykorzystywanie wyników pośrednich Podczas liczenia sumy wszystkich elementów tablicy, akumulator przyjmuje wartości sum kolejnych prefiksów. Przydatna sztuczka w tym problemie sumy prefiksowe e 1 max 0 s e N i=s T i = k 1 P(k) = i=0 T i e 1 T i = P(e) P(s) i=s max P(e) P(s) = max P(e) min P(s) 0 s e N 0 e N 0 s e P. Daniluk (Wydział Fizyki) WP w. III Jesień 2013 20 / 23

Zadania 1 Generowanie ciągu N losowych liczb całkowitych. 2 Generowanie monotonicznie rosnącego ciągu liczb N całkowitych. 3 Wyszukiwanie binarne. 4 Scalanie dwóch uporządkowanych list. 5 Sortowanie bąbelkowe. 6 Sortowanie przez wstawianie. 7 Flaga polska. 8 Segment o maksymalnej sumie. P. Daniluk (Wydział Fizyki) WP w. III Jesień 2013 21 / 23

Zadania 1 Generowanie ciągu N losowych liczb całkowitych. 2 Generowanie monotonicznie rosnącego ciągu liczb N całkowitych. 3 Wyszukiwanie binarne. 4 Scalanie dwóch uporządkowanych list. 5 Sortowanie bąbelkowe. 6 Sortowanie przez wstawianie. 7 Flaga polska. 8 Segment o maksymalnej sumie. Generator liczb pseudolosowych >>> import random >>> random.randint(0,1) 0 >>> random.randint(0,1) 1 >>> random.randint(0,1) 0 P. Daniluk (Wydział Fizyki) WP w. III Jesień 2013 21 / 23

Strona wykładu http://bioexploratorium.pl/wiki/wstęp_do_programowania 2013z P. Daniluk (Wydział Fizyki) WP w. III Jesień 2013 22 / 23

Omówienie algorytmów sortujących z animacjami http://www.sorting-algorithms.com P. Daniluk (Wydział Fizyki) WP w. III Jesień 2013 23 / 23