Algorytmika w bioinformatyce Kurs dla kierunku BIOINFORMATYKA 2016/2017 Prowadzący: Prof. Danuta Makowiec danuta.makowiec@gmail.com IFTiA, pok. 353, tel.: 58 523 2466 Motywacja 2 Cztery etapy rekonstrukcji genomu: cięcie DNA na fragmenty Fragmenty DNA są uzyskiwane poprzez enzymy restrykcyjne tworzenie milionów kopii każdego fragmentu Klonowanie Reakcja łańcuchowa polimerazy odczytanie każdej pary w każdym fragmencie Techniki sekwencjonowania Macierze DNA zestawienie wszystkich fragmentów we właściwym porządku Algorytmy bioinformatyki usiłują zrekonstruować oryginalne sekwencje. 1
Rozkład jazdy 3 XXX 153 Wykłady Czwartek, godz.: 11.15 do 13.00 Na stronie będą sukcesywnie pojawiać się materiały z wykładów http://www.fizdm.strony.ug.edu.pl/me/materialy.html Warunek uzyskania zaliczenia wykładu: pozytywne napisanie kolokwium zaliczającego. termin kolokwium: 25 stycznia 2016, godz. 11:15. Podręczniki 4 http://www.bioalgorithms.info http://www.cs.unc.edu/~prins/classes/555/ Schemat omawianych treści: problem biologiczny algorytmiczna technika rozwiązania : ćwiczenia audytoryjne praktyczne kodowanie rozwiązania : laboratoria programistyczne analiza złożoności 2
WYKŁAD A: PODSTAWOWE TECHNIKI ALGORYTMICZNE Algorytmika dla bioinformatyki Prowadzący: Prof. Danuta Makowiec danuta.makowiec@gmail.com IFTiA, pok. 353, tel.: 58 523 2466 Algorytmika 6 Algorytm to zestaw dobrze zdefiniowanych instrukcji, które należy wykonać, aby rozwiązać określony problem. To, co decyduje o jakości algorytmu to jego poprawność i wydajność (złożoność) Mamy wypracowane różne strategie projektowania algorytmów takie jak na przykład: wyczerpująca, zachłanna, dynamiczna czy rekurencyjna Mamy wypracowany sposób oceny złożoności algorytmów: analiza asymptotyczna 3
Problem kasjera 7 wydać resztę optymalnie czyli wykorzystując możliwie najmniejszą liczbę monet przy zadanym zestawie monet. Wydawaj możliwie największą monetę z aktualnej reszty strategia zachłanna versus strategia wyczerpująca Strategia zachłanna: wydawaj resztę aktualnie największym nominałem Strategia wyczerpująca: kolejno rozważ wszystkie możliwe kombinacje monet Algorytm zawsze poprawny, ale też i zawsze niewydajny Ile tych możliwie najwiekszych monet można wypłacić Algorytm BetterChange jest niepoprawny. Źle oblicza resztę dla np.: M=40, c=(25, 20, 10, 5, 1) Algorytm mięśniaka 8 4
9 Strategia rekurencji Strategia rekurencji: rozwiąż dany problem zakładając, że znasz rozwiązanie jego prostszej wersji Wieże Hanoi (1883) Oblicz, ile ruchów co najmniej musisz wykonać, aby przenieść wszystkie klocki z patyka 1 na patyk 3, przy czym wolno Ci: Lucas i legenda wieży Brahmy w Hanoi Wieże Hanoi (1883) rozwiązanie rekurencyjne Oblicz ile ruchów co najmniej musisz wykonać, aby przenieść wszystkie klocki z patyka 1 na patyk 3, przy czym wolno Ci: Przypadek wieży zbudowanej z dwóch klocków 2013-11-04 Danuta Makowiec: Algorytmika, wykład iv [10] 5
Wieże Hanoi (1883) rozwiązanie rekurencyjne Oblicz ile ruchów co najmniej musisz wykonać, aby przenieść wszystkie klocki z patyka 1 na patyk 3, przy czym wolno Ci: Przypadek wieży zbudowanej z dwóch klocków 2013-11-04 Danuta Makowiec: Algorytmika, wykład iv [11] Wieże Hanoi (1883) rozwiązanie rekurencyjne Oblicz ile ruchów co najmniej musisz wykonać, aby przenieść wszystkie klocki z patyka 1 na patyk 3, przy czym wolno Ci: Przypadek wieży zbudowanej z trzech klocków 2013-11-04 Danuta Makowiec: Algorytmika, wykład iv [12] 6
Wieże Hanoi (1883) rozwiązanie rekurencyjne Oblicz ile ruchów co najmniej musisz wykonać, aby przenieść wszystkie klocki z patyka 1 na patyk 3, przy czym wolno Ci: Przypadek wieży zbudowanej z trzech klocków Przenieśliśmy wieżę dwu-klockową z patyka 1 na patyk 2 korzystając z patyka 3. Przenieśliśmy największy klocek na jego miejsce patyk 3. 2013-11-04 Danuta Makowiec: Algorytmika, wykład iv [13] Wieże Hanoi (1883) rozwiązanie rekurencyjne Oblicz ile ruchów co najmniej musisz wykonać, aby przenieść wszystkie klocki z patyka 1 na patyk 3, przy czym wolno Ci: Przypadek wieży zbudowanej z trzech klocków 2013-11-04 Danuta Makowiec: Algorytmika, wykład iv [14] 7
Wieże Hanoi (1883) rozwiązanie rekurencyjne Oblicz ile ruchów co najmniej musisz wykonać, aby przenieść wszystkie klocki z patyka 1 na patyk 3, przy czym wolno Ci: Przenieśliśmy wieżę dwu-klockową z patyka 2 na patyk 3 korzystając patyka 1 Przypadek wieży zbudowanej z trzech klocków A co jeśli wieża zbudowana jest jest z 4 i więcej klocków? 2013-11-04 Danuta Makowiec: Algorytmika, wykład iv [15] Strategia rekurencji D. Makowiec: A - złożoność obliczeniowa 16 Strategia rekurencji: rozwiąż dany problem zakładając, że znasz rozwiązanie jego prostszej wersji Wieże Hanoi (1883) Oblicz, ile ruchów co najmniej musisz wykonać, aby przenieść wszystkie klocki z patyka 1 na patyk 3, przy czym wolno Ci: A co jeśli wieża zbudowana jest jest z 4 i więcej klocków? 8
17 Strategia rekurencji Strategia rekurencji: rozwiąż dany problem zakładając, że znasz rozwiązanie jego prostszej wersji Wieże Hanoi (1883) Oblicz, ile ruchów co najmniej musisz wykonać, aby przenieść wszystkie klocki z patyka 1 na patyk 3, przy czym wolno Ci: Lucas i legenda wieży Brahmy w Hanoi Wieże Hanoi (1883) przykład algorytmu rekukencyjnego Ile ruchów trzeba wykonać? 2013-11-04 Algorytmika, wykład iv Czy to dużo? 1 dysk 1 ruch 2 dyski 3 ruchy 3 dyski 7 ruchów 4 dyski 15 ruchów 5 dysków 31 ruchów.. 20 dysków 1 048 575 ruchów 32 dyski 4 294 967 295 ruchów 64 dyski 18 446 744 073 709 551 615 9
META KOD ALGORYTMÓW 10/11/2016 19 Rzędy wielkości Nauczka: Sensowne porównania liczb to tylko takie, które są tego samego rzędu Algorytmika, wykład iv Problem sortowania Definicja: Wejście: Wyjście: dany jest ciąg n elementów A= (A 1, A 2,., A n ) = A[1..n] permutacja ciągu wejściowego A =A [1..n] taka, że A [1] A [2] A [n] 20 Rozważamy n-1 elementów INSERTION_SORT (A[1..n]) for j = 2 to n key = A[j] i = j 1 while i > 0 and A[i] > key A[i+1] = A[i] i = i 1 A[i+1] = key //pobierz kolejny element A[j] //wstaw a[j] do posortowanego ciągu A[1..j-1] i-ty pobrany element porównujemy co najwyżej (i-1) razy Przybliżona ilość maksymalnej liczby elementarnych operacji 1+ 2+ 3+ (n-1)= n*(n-1)/2 10
21 Analiza wydajności algorytmu Analiza wydajności algorytmu to ocena czasu przetwarzania I tak, czas przebiegu Insertion_Sort zależy od: wielkości danych wejściowych: czy mamy 6 czy 6 milionów liczb do wysortowania? jakości danych wejściowych: czy są już częściowo posortowane i jak? ile umownych jednostek czasowych potrzeba na przetworzenie n-elementowego zbioru: analiza najgorszego przypadku: T(n)=max { czas sortowania danych o rozmiarze n} analiza średniego przypadku: T(n)= E { wszystkie możliwe dane o rozmiarze n} analiza najlepszego przypadku: możliwość oszukania się i innych 22 Analiza asymptotyczna Pomysł na ilościową ocenę wydajności algorytmu: Sedno algorytmiki ANALIZA ASYMPTOTYCZNA 1. zignoruj stałe wielkości zależne od maszyny 2. obserwuj jedynie WZROST przebiegu T(n), gdy n Definicja notacji asymptotycznej O( ) : Dla danej funkcji g(n) przez O(g(n)) oznaczamy następujący zbiór funkcji: O(g(n))={ f(n): istnieją stałe c oraz n 0 takie, że 0 f(n) c g(n) dla wszystkich n n 0 } co piszemy f(n)=o(g(n)) Wniosek: Notacja O( ) służy szacowaniu funkcji z góry. 11
23 Oszacowania asymptotyczne Notacja asymptotyczna Jak wartości dowolnej funkcji f(n) mają się do wartości znanej funkcji g(n)? notacja theta notacja duże O notacja omega Funkcje ważne dla oszacowań asymptotycznych D. Makowiec: A: podstawowe techniki 24 O(n lg n) Złożoność wielomianowa 1,lg 4 3 2 3 4 n n,..., n, n, n, n, nlg n, n, n, n,...,2, n!, n n O(1) O(lg n) O(n) O(n 2 ) O(2 n ) O(n!) Złożoność logarytmiczna Złożoność liniowa Złożoność kwadratowa Złożoność wykładnicza Hierarchia ważnych ciągów uporządkowanych w ten sposób, że każdy z nich jest O() od wszystkich ciągów na prawo od niego 12
Różnice pomiędzy funkcjami rosnącymi 25 Jak długo będziemy czekać na wynik przetwarzania? Big-O: O(n 2 ) = oznacza że dana funkcja rośnie nie szybciej niż n 2 Problemy obliczalne i NP-zupełne 26 Problem jest obliczalny (tractable) jeśli jest rozwiązywalny przez algorytm o złożoności wielomianowej czyli jest O(n k ) dla pewnego k Problem jest nieobliczalny (intractable) jeśli nie może być obliczony przez jakikolwiek algorytm o złożoności wielomianowej (ograniczenie dolne jest wykładnicze: (2 n ) ) Problem NP-zupełny: nie istnieje dowód, że problem jest nieobliczalny 13
27 Wyznaczanie O() Jak znaleźć funkcję f(n): iloś ć elementarnych operacji w algorytmie, dla której następnie znajdujemy O()? Przyklady: jak ocenić złożoność rozważanych wcześniej algorytmów? Zliczanie: f(d)< 1+2*d = O(d) Algorytm rekurencyjny Metoda Drzewo rekurencji: O(2 n ) przypominajka Zliczanie: F(d) <1+ M/c 1 *M/c 2 *.*M/c d = O(M d ) ANALIZA ASYMPTOTYCZNA 1. zignoruj stałe wielkości zależne od maszyny 2. obserwuj jedynie WZROST przebiegu T(n), gdy n Drzewo rekurencji metoda szacowania złożoności algorytmów rekurencyjnych 28 Czas obliczeń: HT(n, ) T(n) HT(n-1, ) HT(n-1, ) =2*T(n-1) +c HT(n-1, ) HT(n-1, ) HT(n-1, ) HT(n-1, ) =4*T(n-2) +c =2 i *T(n-i) +c HT(1, ) HT(1, ) HT(1, ) HT(1, ) HT(1, ) HT(1, ) =2 n-1 *T(1) +c =O(2 n ) 14
Problem Fibonacciego ( z roku 1202) 29 Algorytm rekurencyjny O(2 n ) Algorytm dynamiczny: O(n) Bezpośrednie obliczenie [29] F n 1 5 1 5 2 n n 1 5 2 O(1) Gdzie jest telefon? 30 15
Podstawowe techniki projektowania algorytmów 31 Algorytm wyczerpujący (exhaustive lub brute-force) systematyczne sprawdzenie wszystkich możliwości Algorytm podziału i ograniczeń (branch-and-bound ) wyeliminowanie szeregu opcji algorytmu wyczerpującego Algorytm zachłanny (greedy) iteracyjne tworzenie rozwiązania w oparciu o aktualnie atrakcyjne alternatywy Algorytm dynamiczny (dynamic programming) organizowanie rozwiązań mniejszych problemów w celu uzyskania rozwiązania problemu większego. Algorytm dziel-i-zwyciężaj ( divide-conquer-combine) algorytm rekurencyjnego rozwiązywania problemu Algorytm maszynowego uczenia się (machine learning) korzysta z wiedzy zgromadzonej w poprzednich tego typu zdarzeniach Algorytm losowy (randomized, Monte Carlo ) realizacja algorytmu związana jest z eksperymentem losowym wyczerpujący zachłanny Monte Carlo Programowanie dynamiczne Gra ROCKS: w każdym ruchu każdy gracz musi zdjąć albo 1 klocek z dowolnie wybranego stosu albo po 1 klocku z każdego stosu Alicja Bob 32 Wygrywa ten, kto zdejmuje ostatni klocek. Zaczyna Alicja. Czy istnieje tu strategia zwyciężania? Czy Alicja, jako startująca, ma jakieś korzyści? Więcej informacji : rozdział 1 i 2 z podręcznika 16
Programowanie dynamiczne 33 Gra ROCKS: w każdym ruchu każdy gracz musi zdjąć albo 1 klocek z dowolnie wybranego stosu albo po 1 klocku z każdego stosu Wygrywa ten, kto zdejmuje ostatni klocek. Zaczyna Alicja. A: B: Alicja A Bob B Strategia zwycięstwa: ^ - ściągnij klocek z A < - ściągnij klocek z B \ - ściągnij oba klocki * - poddaj się Programowanie dynamiczne 34 A: Rozwiązanie powstaje z rozwiązania problemów mniejszych, przy czym w odróżnieniu od strategii rekurencyjnej, rozwiązanie problemów mniejszych składają się iteracyjnie na rozwiązanie problemu większego. B: 17