ALGORYTMY W PRZYKŁADACH

Wielkość: px
Rozpocząć pokaz od strony:

Download "ALGORYTMY W PRZYKŁADACH"

Transkrypt

1 ALGORYTMY W PRZYKŁADACH Tekst został opracowany na podstawie zasobów internetowych (m.in. teksty mgr Jerzego Wałaszka), podręcznika Informatyka dla LO WSIP, Algorytmy + Struktury danych = Programy N. Wirtha, Algorytmy M.M.Sysło Opracowanie : Dariusz Nyk Strona 1 z 185

2 SPIS TREŚCI Wstęp...4 Schemat blokowy...5 Instrukcja iteracji...8 ZłoŜoność obliczeniowa algorytmu Wyznaczanie NWD i NWW algorytm Euklidesa Największy i najmniejszy element zbioru Poszukiwanie lidera w zbiorze Przeszukiwanie sekwencyjne Wyszukiwanie z wartownikiem Wyszukiwanie najczęstszego elementu zbioru Drugi największy element zbioru K-ty największy element zbioru K-ty największy element zbioru wyszukiwanie szybkie Sito Erastotenesa Sortowanie zbioru Sortowanie zwariowane (Bogo Sort) Sortowanie naiwne (głupie) Sortowanie bąbelkowe Sortowanie przez wybór Sortowanie przez wstawianie Sortowanie metodą Shella Rekurencja Sortowanie przez scalanie Sortowanie stogowe (przez kopcowanie, heap sort) Drzewo binarne Tworzenie kopca Rozbiór kopca Sortowanie szybkie Sortowanie dystrybucyjne Sortowanie rozrzutowe Sortowanie kubełkowe Sortowanie przez zliczanie Podsumowanie Binarne kodowanie liczb System dziesiętny Schemat Hornera Schemat Hornera jako sposób obliczania wartości liczby Przeliczanie liczb systemu dziesiętnego na dowolny system Liczby zmiennoprzecinkowe System binarny BIT podstawowa jednostka informacji Kod binarny Zastosowanie kodów binarnych Kodowanie grafiki Kodowanie znaków Bajt MnoŜniki binarne Naturalny system dwójkowy Wartość liczby w naturalnym systemie dwójkowym Strona 2 z 185

3 11.2. Zakres liczby binarnej Schemat Hornera dla liczb binarnych Przeliczanie liczb dziesiętnych na binarne Dwójkowy system stałoprzecinkowy Wartość dwójkowej liczby stałoprzecinkowej Zakres binarnych liczb stałoprzecinkowych Operacje arytmetyczne na systemie dwójkowym Dodawanie Odejmowanie MnoŜenie Dzielenie Szybkie potęgowanie liczb Kodowanie liczb binarnych ze znakiem Zapis znak-moduł Wartość dziesiętna liczby w zapisie ZM Zapis uzupełnień do 1 U1 (1C - One's Complement) Przeliczanie liczb dziesiętnych na zapis U Stałoprzecinkowy zapis U Dodawanie w U Odejmowanie w U Zapis uzupełnień do 2 U2 (2C - Two's Complement ) Liczba przeciwna do liczby w U Przeliczanie liczb dziesiętnych na zapis U Stałoprzecinkowy zapis U Dodawanie i odejmowanie w U MnoŜenie w U Dzielenie w U Pozostałe kody binarne Kod BCD Kod Gray a Wyznaczanie i-tego wyrazu n-bitowego kodu Gray'a Rekurencyjny algorytm tworzenia wyrazów kodu Gray a Szyfrowanie danych Steganografia Kryptografia Szyfrowanie przez przestawianie Szyfrowanie przez podstawianie Kryptografia z kluczem jawnym Szyfr RSA Potwierdzenie autentyczności i podpis elektroniczny Strona 3 z 185

4 ALGORYTMY W PRZYKŁADACH Wstęp. Algorytm skończony ciąg czynności, przekształcający zbiór danych wejściowych na zbiór danych wyjściowych (wyników). Etapy konstruowania algorytm : 1) sformułowanie zadania ustalamy jaki problem ma rozwiązywać algorytm 2) określenie danych wejściowych ich typu ( w typie określamy, czy dane są liczbami rzeczywistymi, całkowitymi, czy znakami, czy teŝ innego typu) 3) określenie wyniku oraz sposobu jego prezentacji 4) ustalenie metody wykonania zadania (moŝe być kilka metod na rozwiązanie wybieramy tą, która według nas jest najlepsza) 5) zapisanie algorytmu za pomocą wybranej metody (z punktu 4 ) 6) Analiza poprawności rozwiązania 7) Testowanie rozwiązania dla róŝnych danych (algorytm musi być uniwersalny, aby słuŝyć do rozwiązywania zadań dla róŝnych danych wejściowych) 8) Ocena skuteczności algorytmu ( praktyczna ocena algorytmu : np. szybkości, skomplikowania) Sposoby zapisu algorytmu. Do najczęściej uŝywanych sposobów zapisu algorytmu naleŝą : 1) lista kroków 2) pseudojęzyk (pseudokod) 3) graficzna prezentacja za pomocą schematu blokowego 4) zapis w danym języku programowania Zadanie : znaleźć średnią arytmetyczną dwóch liczb rzeczywistych Ad. 1 Lista kroków charakteryzuje się tym, Ŝe kaŝdy wiersz opisujący pojedynczy krok realizowanej czynności jest numerowany. 1) pobierz pierwszą liczbę 2) pobierz drugą liczbę 3) dodaj liczby do siebie 4) wynik dodawania podziel przez 2 5) wyświetl otrzymaną wartość 6) zakończ Ad. 2. Pseudojęzyk jest metodą pośrednią między zapisem za pomocą listy kroków a zapisem w języku programowania. - początek - wprowadzenie x i y rzeczywistych - wykonanie działania (x+y)/2 - pisz wynik - koniec Strona 4 z 185

5 Ad. 4. Ten problem zapisany w postaci programu w języku Turbo Pascal Program Srednia; Var x, y : Real; Begin Readln (x); Readln (y); Writeln ( Średnia arytmetyczna wprowadzonych liczb wynosi : (x+y)/2 :7:2); End. Przedstawiony tu algorytm liczenia średniej jest wykonywany zawsze w tej samej kolejności, niezaleŝnie od wartości danych wejściowych. Algorytm liniowy (sekwencyjny) algorytm, w którym kolejność wykonywanych czynności jest taka sama i niezaleŝna od wartości danych wejściowych. Ad. 3. Zapis za pomocą schematu blokowego. Schemat blokowy. Schemat blokowy przedstawia algorytm w postaci symboli graficznych, podając szczegółowo wszystkie operacje arytmetyczne, logiczne, przesyłania, pomocnicze wraz z kolejnością ich wykonywania. Składa się on z wielu elementów, wśród których podstawowym jest blok. Wygląd bloku Opis Bloki graniczne początek i koniec algorytmu. Mają kształt owalu. Z bloku Start wychodzi tylko jedno połączenie; kaŝdy schemat blokowy musi mieć dokładnie jeden blok START. KaŜdy schemat blokowy musi mieć co najmniej jeden blok STOP. Łącznik pomiędzy blokami określa kierunek przepływu danych lub kolejność wykonywanych działań (ścieŝka sterująca) Blok kolekcyjny łączy kilka róŝnych dróg algorytmu Blok operacyjny zawiera operację lub grupę operacji, w których wyniku ulega zmianie wartość zmiennej (tu : nadanie zmiennej x wartości 10). Bloki operacyjne mają kształt prostokąta, wchodzi do niego jedno połączenie i wychodzi teŝ jedno. Strona 5 z 185

6 Blok wejścia / wyjścia blok odpowiedzialny za wykonanie operacji wprowadzania i wyprowadzania danych, wyników, komunikatów. Ma kształt równoległoboku, wchodzi i wychodzi z niego jedno połączenie. Blok decyzyjny określa wybór jednej z dwóch moŝliwych dróg działania. Ma kształt rombu lub sześciokąta. Wchodzi do niego jedno połączenie, a wychodzą dwa : gdy warunek wpisany wewnątrz jest spełniony oraz gdy warunek wpisany wewnątrz nie jest spełniony. Wybór kształtu bloku zaleŝy od nas. Istnieją oczywiście jeszcze inne bloki, stosowane przy duŝych projektach, ale my z nich nie będziemy korzystać. Zapiszmy teraz nasz algorytm liczenia średniej w postaci schematu blokowego : Mamy juŝ algorytm, ale brakuje nam jeszcze jednego czynnika sprawiającego by zadanie rozwiązywane za pomocą algorytmu było przedstawione w pełni precyzyjnie specyfikacji problemu algorytmicznego. Specyfikacją problemu algorytmicznego nazywamy dokładny opis problemu algorytmicznego, który ma zostać rozwiązany oraz podanie informacji o danych wejściowych i wyjściowych. Czyli przed naszym algorytmem powinien znaleźć się dodatkowy zapis : Problem algorytmiczny : obliczenie średniej arytmetycznej dwóch licz rzeczywistych Dane wejściowe : x, y R Dane wyjściowe : sr R średnia liczb x i y Strona 6 z 185

7 Dane w algorytmie są najczęściej przedstawiane za pomocą liter lub nazw. Zmienną nazywamy obiekt występujący w algorytmie, określony przez nazwę i słuŝący do zapamiętywania określonych danych. Zmienna musi mieć określony typ (rzeczywisty, łańcuchowy itp.) Jeśli stałe i zmienne połączymy operatorami to otrzymamy wyraŝenie. Stałe i zmienne występujące w wyraŝeniu nazywamy operandami. Operatory arytmetyczne Operatory relacji Symbol Znaczenie Symbol Znaczenie + dodawanie = równy - odejmowanie > większy * mnoŝenie >= większy lub równy / dzielenie < mniejszy div dzielenie całkowite (3div2 = 1) <= mniejszy lub równy mod reszta z dzielenia liczb całkowitych <> róŝny Operator przypisania := Po lewej stronie operatora przypisania moŝe stać tylko zmienna! Operatory logiczne and - koniunkcja (iloczyn zdań) /\ or - alternatywa (suma zdań) \/ not - negacja (zaprzeczenie zdania) ~ Rachunek zdań x y x and y (x/\y) x or y (x\/y x not x (~x) True True True True True False True False False True False True False True False True False False False False Do tej pory zajmowaliśmy się algorytmami liniowymi (sekwencyjnymi) algorytm, w którym kolejność wykonywanych czynności jest taka sama i niezaleŝna od wartości danych wejściowych. Wprowadźmy sobie dodatkowo instrukcję wyboru (warunkową) oraz pojęcie algorytmu rozgałęzionego. Instrukcją wyboru (warunkową) to instrukcja, której wykonanie jest uzaleŝnione od tego czy dany warunek został spełniony czy teŝ nie. Algorytm rozgałęziony to algorytm, w którym występują instrukcje warunkowe. Specyfikacja problemu algorytmicznego Problem algorytmiczny : określenie znaku wprowadzonej liczby Dane wejściowe : x R Dane wyjściowe : wynik w postaci napisu liczba x jest liczbą dodatnią jeśli x>0, liczba x jest zerem jeśli x=0 lub liczba x jest ujemna jeśli x<0. Strona 7 z 185

8 Warunek musi być tak określony, aby jego ocena prawdziwości była jednoznaczna. Instrukcja iteracji Zadanie : wypisać wszystkie liczby dwucyfrowe. Wypisz 10 Wypisz Wypisz 99 Algorytm ten składa się z 90 kroków i jest nieefektywny. Zastosujmy tu instrukcję iteracji (pętla) instrukcja powtarzania danego ciągu operacji. Liczba powtórzeń moŝe być ustalona przed wykonaniem instrukcji lub moŝe zaleŝeć od spełnienia pewnego warunku, który jest sprawdzany w kaŝdej iteracji. Strona 8 z 185

9 PoniŜej przedstawiamy trzy podstawowe przypadki iteracji stosowanych w algorytmach. Najpierw sprawdzany jest warunek, potem wykonywana jest instrukcja. ( dopóki spełniony jest warunek wykonuj instrukcję - w Pascalu : While warunek do instrukcja ) Najpierw wykonywana jest instrukcja, a potem sprawdzany jest warunek ( wykonuj instrukcję dopóki spełniony jest warunek w Pascalu : repeat instrukcja until wyraŝenie ). Instrukcja wykonywana jest z góry ustaloną (max) ilość razy ( w Pascalu : For zmienna := wyraŝenie_1 to max do (downto) instrukcja ) W pętli tej wartość licznika i zwiększana jest o 1 po kaŝdej wykonywanej instrukcji czyli jest inkrementowana Strona 9 z 185

10 ZłoŜoność obliczeniowa algorytmu. Podać algorytm, który pobiera na wejściu liczbę całkowitą dodatnią mniejszą od 100 i wyprowadza informację, czy jest to liczba parzysta czy nie. Problem algorytmiczny Dane wejściowe Dane wyjściowe Zmienne pomocnicze : badanie parzystości liczby podanej na wejściu : x N, x < badana liczba : napis x jest liczbą parzystą gdy podana liczba jest parzysta lub napis x jest liczbą nieparzystą gdy podana liczba jest nieparzysta : i N - zmienna licznikowa Algorytm 1 Opis : pobieramy liczbą i sprawdzamy warunek czy jest to liczba dodatnia i jednocześnie mniejsza od 100. Jeśli tak to porównujemy ją z kaŝdą liczbą parzystą i począwszy od 2. Jeśli wejściowa liczba x jest liczbą nieparzystą to mamy w tym algorytmie maksymalnie 49 porównań tej liczby z liczbą i. Strona 10 z 185

11 Algorytm 2 Podany algorytm 2 jest prawie identyczny z algorytmem 1 jedyna róŝnica to porównywanie i nie z liczbą 100 ale z podaną liczbą x. W tym przypadku dla x nieparzystego > 1 liczba porównań będzie wynosiła (x-1)/2 lub dla x=1 jedno porównanie. Czyli algorytm 2 jest algorytmem lepszym. Oczywiście w przypadku podania liczby parzystej liczba porównań w obu algorytmach będzie jednakowa. W celu oceny algorytmu wprowadzono pojęcie złoŝoności obliczeniowej algorytmu ( potocznie algorytm, który rozwiązując to samo zadanie wykona mniej operacji). Na złoŝoność obliczeniową algorytmu składa się : - złoŝoność pamięciowa zaleŝy ona od wielkości pamięci komputera potrzebnej do realizacji algorytmu w postaci programu komputerowego. ZłoŜoność pamięciowa jest najczęściej proporcjonalna do ilości zmiennych uŝytych w algorytmie. - złoŝoność czasowa pozwala oszacować czas potrzebny na wykonanie algorytmu. Strona 11 z 185

12 Realizacja algorytmów w arkuszu kalkulacyjnym Problem algorytmiczny : Obliczenie pola powierzchni trójkąta na podstawie długości trzech odcinków ( zastosowanie wzoru Herona ) 1 S = p(p a) (p b) (p c) gdzie p = (a + b + c). 2 Uwaga : trójkąt powstanie tylko wtedy, gdy długość boku największego jest mniejsza od sumy dwóch następnych boków Dane wyjściowe : S R + pole trójkąta o bokach a,b i c lub napis Z podanych odcinków nie moŝna zbudować trójkąta. Zmienne pomocnicze : p R + START Read (a); Read (b); Read (c); (a+b > c) and (a+c > b) and (c+b > a) 1 p : = (a + b + c); 2 Write ( Z podanych odcinków nie moŝna zbudować trójkąta ); S : = p(p a) (p b) (p c); Write (S); KOC Jest to tak zwany algorytm niestabilny. W algorytmie takim błędy z zaokrągleń wyników pośrednich ( w tym wypadku p ) mogą wpływać na niedokładność wyników końcowych. Strona 12 z 185

13 1. Wyznaczanie NWD i NWW algorytm Euklidesa a) Największy Wspólny Dzielnik Pobieramy dwie liczby naturalne, od większej z nich odejmujemy mniejszą, a następnie większą liczbę zastępujemy róŝnicą. Postępujemy tak do momentu, gdy dwie liczby będą równe. Otrzymana liczba będzie NWD. Przykład : a =12, b = 20, poniewaŝ b > a to b = 20 12=8, teraz a > b czyli a=12 8 =4, dalej b>a czyli b= 8 4 = 4 i a = 4 stąd NWD = 4 Problem algorytmiczny Dane wejściowe Dane wyjściowe : największy wspólny dzielnik dwóch liczb : a,b N : NWD (a,b) START Read (a); Read (b); a = b Write (a); a > b b := b a; STOP a := a b; Zastosowano tu właściwości : NWD (a,b) = NWD(a-b,b) jeśli a > b NWD (a,b) = NWD(a,b-a) jeśli b > a Zmodyfikowany algorytm Euklidesa Równie często stosuje się modyfikację algorytmu NWD (a,b) = NWD(a mod b, b (a mod b)) Będziemy iteracyjnie zmieniać wartości a i b aŝ do momentu, gdy a osiągnie wartość 0. Przykład : a =12, b = 20, a = 12 mod 20 = 12, b = = 8 następnie a = 12 mod 8 = 4, b = 8 4 = 4, i następny krok a = 4 mod 4 = 0 czyli b = NWD = 4 Strona 13 z 185

14 START Read (a); Read (b); a > 0 a := a mod b; b := b a; Write (b); STOP b) Najmniejsza Wspólna Wielokrotność (dwóch liczb naturalnych) (najmniejsza z liczb, która jest podzielna przez obie te liczby) Algorytm ten opiera się na algorytmie NWD oraz na wzorze : NWW (a,b) = (a*b) div NWD (a,b) Ćwiczenie : Posiadamy dwa czerpaki o pojemnościach 4 i 6 litrów, pusty pojemnik o duŝej pojemności oraz nieograniczoną ilość wody (np. z kranu). Podaj sposób napełnienia pojemnika 15 litrami wody, przy czym woda moŝe być wlewana lub wylewana z pojemnika tylko pełnymi czerpakami. Rozwiązanie (ogólne) : m pojemność pierwszego czerpaka (tu 4 litry ) n pojemność drugiego czerpaka ( tu 6 litrów ) k pojemność do napełnienia ( tu 15 litrów ) x liczba ruchów czerpaka 1 y liczba ruchów czerpaka 2 Jeśli wlewamy wodę czerpakiem 1 to traktujemy to z plusem, jeśli wylewamy z naczynia to z minusem. Jeśli wlewaliśmy wodę 5 razy, a wylewaliśmy wodę 3 razy to liczba ruchów czerpaka wynosi 5-3 = 2. Jeśli natomiast wlewaliśmy 2 razy, a wylewaliśmy 5 razy to liczba ruchów czerpaka jest równa 2-5 = -3. Tak więc aby problem był rozwiązany musi zostać spełnione równanie : mx + ny = k Strona 14 z 185

15 Pozostaje więc problem znalezienia dla ustalonych m i n (pojemności czerpaków) znalezienia odpowiednich wartości x i y (CAŁKOWITYCH). Zwróćmy uwagę, Ŝe dla naszego ćwiczenia, równanie ma postać 4x+6y=15. JuŜ na pierwszy rzut oka widać, Ŝe równanie to nie ma rozwiązania w zbiorze liczb całkowitych ( Lewa strona r-nia jest parzysta, prawa nieparzysta). A równanie 4x+8y = 10? Równanie to takŝe nie ma rozwiązania lewa strona jest podzielna przez 4, a prawa nie (pamiętajmy liczby całkowite). Stąd wniosek : równanie to ma rozwiązanie, gdy k=nwd (n,m). { ogólniej gdy z*k = NWD(n,m) } No to zastosujmy algorytm Euklidesa NWD. Zmodyfikujmy zadanie : m = 12 n = 21 k = 3 12x + 21y = 9 Szukamy : Wykorzystamy tu zaleŝność : a = q*b + r czyli 1) 21 = 1 * ) 12 = 1 * ) 9 = 3 * stąd NWD (12,21) = 3 gdzie r - reszta 0=< r < b Z równania 2) wyznaczamy 3 (NWD) 12-1*9 = 3 Z równania 1) wyznaczamy 9 i wstawiamy do równania 2) 21-1*12=9 12-1*9 =3 12 1* (21-1*12) = 3 Czyli 2*12 1*21 = 3 Wlewamy 2 * 12 i wylewamy 21 ZADA 1 Za pomocą samodzielnie napisanego programu wygenerować plik tekstowy o nazwie liczby.txt zawierający 5001 liczb losowych z zakresu <0, >. Strona 15 z 185

16 2. Największy i najmniejszy element zbioru. ZADA 2 Znaleźć w pliku liczby.txt największą i najmniejszą liczbę. Wykorzystamy tu, poznany wcześniej, zmodyfikowany schemat blokowy na znajdowanie najmniejszej (poniŝej) i największej liczby. START Read (k); Read (a); Read (a); min := a; k = 1 Write (min); STOP W analogiczny sposób moŝemy znaleźć największy element w ciągu wprowadzanych kolejno liczb. Sprawdzamy tylko, czy kolejno wprowadzona liczba jest większa od aktualnie wprowadzonego maksimum. k := k 1; a < min Zwróćmy uwagę, Ŝe zastosowanie tych dwóch algorytmów nie jest jednoczesne, tzn. nie wyznaczamy największej i najmniejszej wielkości jednocześnie przebiegamy dwukrotnie nasz zbiór. Ale moŝemy te dwa algorytmy połączyć i spowodować, Ŝe otrzymamy wartość maks i min jednocześnie. Zwróćmy uwagę, Ŝe w kaŝdym z algorytmów wykonywane jest sprawdzenie czy x > y przy czym w algorytmie na maks x jest kandydatem, a w algorytmie na min y jest kandydatem. Algorytm w postaci listy kroków : Dane Wyniki : zbiór n liczb : max i min, odpowiednio największy i najmniejszy element w zbiorze danych Strona 16 z 185

17 Krok 1 : Podzielenie i połączenie elementów zbioru w pary. Jeśli n jest liczbą nieparzystą, to jeden z elementów pozostanie wolny oznaczymy go liczbą z. Krok 2 : Porównanie elementów w parze i dołączenie liczb do odpowiednich zbiorów. ( mamy parę liczb x i y. Przypuśćmy, Ŝe x > y, wobec tego x dołączamy do zbioru dla kandydatów na maks zbiór M, a y do zbioru dla kandydatów na min zbiór N ) Krok 3 : Znajdujemy max w zbiorze M za pomocą algorytmu na maksimum Krok 4 : Znajdujemy min w zbiorze N za pomocą algorytmu na minimum Krok 5 : Jeśli n jest liczbą nieparzystą to jeśli z < min to min = z, jeśli z > max to max = z. Uwaga : Tak naprawdę wszystkie kroki realizujemy na jednym zbiorze danych przestawiając tylko elementy w parach tak aby element pierwszy w parze był większy od elementu drugiego w parze. Przykład : Mamy zbiór liczb : 1,4,3,2,4,9,5,7 Krok 1 : podzielenie zbioru i połączenie elementów w pary : {1,4}, {3,2}, {4,9}, {5,7} Krok 2 : porównanie elementów w parach : { 1 > 4 } { 3 > 2} { 4 > 9 } { 5 > 7 } Jeśli prawda to pierwszy element z pary przenosimy do zbioru M, a drugi do N, jeśli fałsz to drugi element z pary przenosimy do M, a pierwszy do N. Czyli nasz zbiór wygląda teraz tak : 4,1,3,2,9,4,7,5 zwróć uwagę, Ŝe elementy o indeksie nieparzystym to zbiór M (maks), a o indeksie parzystym to zbiór N (min). Oczywiście moŝna zamienić zbiory M i N ze sobą nieparzyste to N, parzyste to M. Krok 3 : znajdujemy w zbiorze M wartość max Krok 4 : znajdujemy w zbiorze N wartość min Krok 5 : opuszczamy - n liczbą parzystą. Przedstawiony wyŝej algorytm typu dziel i zwycięŝaj jest najoptymalniejszym algorytmem wyszukiwania wartości maksymalnej i minimalnej w zbiorze. 3. Poszukiwanie lidera w zbiorze. ZADA 3 Znaleźć w pliku liczby.txt lidera zbioru. Liderem nazywamy element, który występuje w zbiorze więcej niŝ połowę razy, czyli więcej niŝ n/2 razy, gdzie n jest liczbą elementów zbioru. Problem znajdowania lidera w zbiorze ma na przykład zastosowanie w liczeniu głosów w wyborach, gdzie kandydat musi uzyskać więcej niŝ połowę głosów. Algorytm w postaci listy kroków : Algorytm ten składa się z dwóch etapów. W pierwszym szukamy kandydata na lidera, w drugim sprawdzamy, czy znaleziony kandydat jest rzeczywiście liderem. Dane : zbiór {x 1, x 2,... x n } złoŝony z n elementów Wynik : lider L w zbiorze lub informacja, Ŝe zbiór nie zawiera lidera Dane pomocnicze : c krotność kandydata na lidera Strona 17 z 185

18 Krok 1 : przyjmujemy pierwszy element zbioru za lidera oraz częstotliwość c = 1 { etap 1 } Krok 2 : dla kolejnych wartości i = 2,3,..., n wykonaj kroki 3-5, a następnie przejdź do kroku 6 Krok 3 : jeśli c = 0 to wykonaj krok 4, a w przeciwnym wypadku krok 5 Krok 4 : {obieramy nowego kandydata na lidera } Przyjmujemy x i za lidera L, c=1 Krok 5 : {porównujemy kolejny element zbiór z kandydatem na lidera } Jeśli xi = L to c=c+1, w przeciwnym przypadku c = c 1 {etap 2 } Krok 6 : jeśli c = 0 to przejdź do kroku 7, a w przeciwnym przypadku do kroku 8 Krok 7 : Zbiór nie ma lidera koniec algorytmu Krok 8 : wyznacz ile razy kandydat na lidera występuje w zbiorze. Jeśli liczba ta jest większa od n/2, to L jest rzeczywiście liderem, jeśli nie to zbiór nie ma lidera. Strona 18 z 185

19 Schemat blokowy START Wczytanie zbioru L:= x[1]; c:= 1; i:= 2; i > n c = 0; c > 0 L = x[i] L := x[i]; c := 1; c := 0; i := 0; i > n c:= c 1; c:= c + 1; x[i]= L; i := i + 1; c:=c+1; i:= i + 1; c > n/2 Brak lidera Jest lider - L STOP ZADA 5 Wyszukać w zbiorze lista.txt zadaną liczbę np. 232 oraz podać jej pozycję. Strona 19 z 185

20 4. Przeszukiwanie sekwencyjne. Zadanie przeszukiwania sekwencyjnego polega na przeglądaniu kolejnych elementów zbioru. Znaleziony element zostaje zwrócony (zwykle interesuje nas nie sam element, ale jego pozycja w zbiorze) lub algorytm zwraca informację, iŝ poszukiwanego elementu w zbiorze nie ma. PoniewaŜ wymagane jest sprawdzenie kolejnych elementów zbioru, to w przypadku pesymistycznym (brak poszukiwanego elementu, lub jest on na samym końcu zbioru) algorytm musi wykonać n porównań, gdzie n jest liczbą elementów w zbiorze. Pesymistyczna złoŝoność czasowa jest następująca: Specyfikacja algorytmu : W(n) = n Dane wejściowe : n - liczba elementów w sortowanym zbiorze, n N d[ ] - zbiór n-elementowy, który będzie przeszukiwany. Elementy zbioru mają indeksy od 1 do n. x - wartość poszukiwana Dane wyjściowe : p - pozycja elementu x w zbiorze d[ ]. Jeśli p = 0, to element x w zbiorze nie występuje. p:= p + 1; START Read (x); p:= 1; p <= n x <> d[p] STOP p > n p:= 0; jest większa od n. 2) znaleziono element x w zbiorze na pozycji p. Lista kroków Krok 1 : p:= 1; Krok 2 : Dopóki (p n) and (x <> d[p]) wykonuj p := p + 1 Krok 3 : Jeśli p > n, to p :=0 Krok 4 : Zakończ algorytm Schemat blokowy. Przeszukiwanie zbioru rozpoczynamy od pierwszego elementu. Zmienna p przechowuje pozycję sprawdzanego elementu i na początku przyjmuje wartość 1. W pętli warunkowej najpierw sprawdzamy, czy pozycja p wskazuje element wewnątrz zbioru. Jeśli nie, pętla jest przerywana. Drugi test w pętli sprawdza, czy element zbioru leŝący na pozycji p jest róŝny od poszukiwanego elementu x. Jeśli tak, to pozycja p jest zwiększana o 1 wskazując kolejny element zbioru i pętla kontynuuje się. Jeśli nie, to element został znaleziony i pętla zostaje przerwana. Wyjście z pętli przeszukującej zbiór następuje w dwóch przypadkach: 1) przeglądnięty został cały zbiór, elementu x nie znaleziono i pozycja p Strona 20 z 185

21 Zatem w przypadku gdy p > n, elementu x nie znaleziono i zerujemy pozycję p, aby zgłosić ten fakt. Inaczej p zawiera pozycję w zbiorze, na której znajduje się poszukiwany przez nas element x. Ostatni test właściwie nie jest konieczny - program wykorzystujący ten algorytm moŝe przecieŝ sprawdzić, czy p jest większe od n. JednakŜe wyzerowanie p jest bardziej czytelne i intuicyjne - w zbiorze nie ma elementu na pozycji zero. Zwracanie zera w przypadku niepowodzenia jest często stosowaną praktyką w programowaniu (jeśli zero jest moŝliwą wartością, to często zwraca się minus jeden dla zaznaczenia poraŝki).. 5. Wyszukiwanie z wartownikiem. W algorytmie wyszukiwania sekwencyjnego START znajduje się pętla wyszukująca. W pętli sprawdzane są dwa warunki. Pierwszy z nich (zaznaczony czerwoną linią na rysunku Read (x); obok) jest potrzebny tylko wtedy, gdy zbiór d[ ] nie zawiera poszukiwanego elementu o wartości x. W takim przypadku wymieniony p:= 1; warunek gwarantuje zakończenie pętli przeszukującej po przeglądnięciu wszystkich elementów zbioru. Indeks p przyjmuje wartość n + 1. Warunek jest sprawdzany dla kaŝdego p <= n elementu zbioru. Jeśli moglibyśmy zagwarantować, iŝ poszukiwany element zawsze zostanie znaleziony, to wtedy warunek ten stałby się zbędny. p:= p + 1; x <> d[p] MoŜemy doprowadzić do takiej sytuacji dodając na końcu zbioru poszukiwany element. Wtedy pętla przeszukująca zakończy się albo na elemencie x leŝącym p > n wewnątrz zbioru, albo na elemencie x, który został dodany do zbioru. W pierwszym przypadku zmienna p będzie wskazywała pozycję znalezionego elementu i pozycja ta STOP p:= 0; będzie mniejsza lub równa n, a w drugim przypadku (gdy element x w zbiorze nie występuje) zmienna p wskaŝe pozycję dodanego przez nas elementu, czyli n + 1. PoniewaŜ pętla ta zawsze zakończy się, to moŝemy pominąć pierwszy warunek pozostawiając jedynie test na róŝność od x. Uproszczenie to da w wyniku wzrost prędkości wyszukiwania. Dodany przez nas element na końcu zbioru nosi nazwę wartownika (ang. guard lub sentinel), a stąd pochodzi nazwa algorytmu - przeszukiwanie z wartownikiem. Klasa złoŝoności obliczeniowej wynosi Θ(n). Strona 21 z 185

22 Specyfikacja problemu Dane wejściowe : n - liczba elementów w zbiorze wejściowym d[ ] - zbiór wejściowy, w którym dokonujemy poszukiwań. Indeksy elementów rozpoczynają się od 1. Zbiór musi posiadać miejsce na dodatkowy element, który zostanie dopisany na końcu. x - wartość poszukiwana Dane wyjściowe : p - pozycja elementu x w zbiorze d[ ]. Jeśli p = 0, to element x w zbiorze nie występuje Lista kroków Krok 1 : d[n + 1] := x; Krok 2 : p := 1; Krok 3 : Dopóki x < > d[p]: wykonuj p := p + 1 Krok 4 : Jeśli p > n, to p := 0 Krok 5 : Zakończ algorytm Schemat blokowy p:= p + 1; START Read (x); d[n+1] := x; p:= 1; x <> d[p] p > n Na samym początku algorytmu dopisujemy do zbioru wartownika. Przeszukiwanie rozpoczynamy od pierwszego elementu, dlatego p przyjmuje wartość 1. Pętla przeszukująca porównuje kolejne elementy zbioru z wartością poszukiwaną. Jeśli są róŝne, to przesuwa się do następnej pozycji. Wartownik gwarantuje nam, iŝ przeszukiwanie zawsze się zakończy. Gdy pętla przeszukująca zostanie zakończona, zmienna p przechowuje pozycję elementu zbioru równego x. Jeśli p wskazuje wartownika, to zbiór nie zawiera poszukiwanego elementu - w takim przypadku zerujemy pozycję p, aby zgłosić poraŝkę. Kończymy algorytm. STOP p:= 0; Strona 22 z 185

23 Przykładowy program : Program Szukaj_Z_Wartownikiem; Uses Crt; Const liczba_elementow = 5001; Var pliczek : Text; tablica_liczb : Array [1..liczba_elementow+1] of Integer; liczba_txt : String; p,liczba,code,x : Integer; Begin ClrScr; Assign (pliczek,'liczby.txt'); {$I-} { dyrektywa lokalna powodujaca, ze przy bledzie IO program sie nie "wysypie" } Reset (pliczek); {$I+} If IOResult = 0 Then Begin Writeln (' Wczytywanie danych do tablicy '); For p:= 1 to liczba_elementow do Begin Readln (pliczek,liczba_txt); Val (liczba_txt,liczba,code); If code = 0 Then tablica_liczb [p] := liczba; End; Close (pliczek); End Else Writeln ('Blad otwarcia pliku liczby.txt'); Writeln; Write (' Podaj poszukiwana liczbe : '); Readln (x); tablica_liczb [liczba_elementow+1] := x; p:= 1; While x <> tablica_liczb [p] Do p:= p +1; If p > liczba_elementow Then Writeln (' Nie znaleziono liczby ',x,' w pliku') Else Writeln (' Poszukiwana liczba ',x,' zostala znaleziona na pozycji ',p); Repeat Until KeyPressed; End. Strona 23 z 185

24 ZADA 6 Znaleźć w pliku liczby.txt liczbę, która powtarza się najczęściej. 6. Wyszukiwanie najczęstszego elementu zbioru. Sposób 1. Pierwszym, narzucającym się rozwiązaniem jest podejście bezpośrednie. Wybieramy ze zbioru kolejne elementy i zliczamy ich wystąpienia. Wynikiem jest element, który występował najczęściej. Policzmy czasową złoŝoność obliczeniową takiego algorytmu: wybór n elementów wymaga n operacji. Po kaŝdym wyborze musimy wykonać n porównań wybranego elementu z elementami zbioru w celu zliczenia ilości jego wystąpień. Daje to wynik: T(n) = n 2. Zatem algorytm w tej postaci posiada klasę złoŝoności O(n 2 ). W dalszej części zastanowimy się nad sposobami poprawy tego wyniku. (Zadanie o podobnej treści pojawiło się na maturze z informatyki w 2006 roku). Specyfikacja problemu Dane wejściowe : n - liczba elementów w zbiorze wejściowym d[ ] - zbiór wejściowy, w którym dokonujemy poszukiwań. Indeksy elementów rozpoczynają się od 1. Zbiór musi posiadać miejsce na dodatkowy element, który zostanie dopisany na końcu. Dane wyjściowe : w_n p_n L_n - wartość elementu powtarzającego się najczęściej - pierwsza pozycja elementu najczęstszego - liczba wystąpień najczęstszego elementu Zmienne pomocnicze : i,j - zmienne licznikowe pętli licznik - licznik wystąpień elementu Lista kroków Krok 1 : w_n := d[1]; p_n :=1; L_n := 1 Krok 2 : Dla i = 1,2,...,n: wykonuj kroki Krok 3 : licznik := 0; Krok 4 : Dla j = 1,2,...,n : jeśli d[i] = d[j], to licznik := licznik + 1; Krok 5 : Jeśli licznik > L_n, to w_n := d[i]; p_n := i; L_n := licznik Krok 6 : Zakończ algorytm Strona 24 z 185

25 Schemat blokowy 1 2 START w_n := d[1]; p_n := 1; L_n := 1; i := 1; licznik := 0; j := 0; d[i] = d[j] i <= n j <= n licznik := licznik + 1; j := j + 1; STOP licznik >L_n w_n := d[i]; p_n := i; L_n := licznik; i := i + 1; Algorytm wyszukiwania najczęściej pojawiającego się elementu w zbiorze rozpoczynamy od inicjalizacji zmiennych, których zawartość będzie wynikiem pracy algorytmu. Do w_n trafia pierwszy element zbioru - tymczasowo będzie to najczęstszy element. W p_n umieszczamy pozycję tego elementu, czyli 1. Do L_n zapisujemy liczbę wystąpień, teŝ 1. Rozpoczynamy pętlę nr 1, która wybiera ze zbioru kolejne elementy. W zmiennej licznik będziemy zliczać ilość wystąpień elementu d[i]. Dokonuje tego wewnętrzna pętla nr 2, która przegląda kolejne elementy zbioru i jeśli są równe elementowi d[i], zwiększa o 1 stan licznika. Po zakończeniu tej pętli w zmiennej licznik mamy liczbę wystąpień w zbiorze elementu d[i]. Jeśli licznik zawiera wartość większą od ilości powtórzeń tymczasowego elementu L_n, to za nowy tymczasowy element przyjmujemy d[i]. Do w_n trafia wartość elementu, do p_n zapisujemy numer jego pozycji, czyli i, a do L_n zapisujemy wyznaczoną w zmiennej licznik liczbę powtórzeń. Na końcu pętli nr 1 zwiększamy i o 1, czyli przechodzimy do kolejnego elementu w zbiorze i operację zliczania powtarzamy. Po zakończeniu pętli nr 1 w zmiennej w_n mamy wartość najczęściej powtarzającego się elementu, w p_n jest pozycja jego pierwszego pojawienia się w zbiorze, a w L_n mamy wyznaczoną ilość wystąpień. Algorytm jest bardzo prosty w działaniu, lecz mało efektywny - niektóre elementy są zliczane wielokrotnie, a niektóre zupełnie niepotrzebnie. Usuwając te wady usprawnimy algorytm, co jest celem następnego rozdziału. W programowaniu często obowiązuje zasada: Efektywność algorytmu jest odwrotnie proporcjonalna do jego złoŝoności. Wynika stąd, iŝ proste algorytmy mogą być mało efektywne, podczas gdy algorytmy złoŝone działają bardzo szybko pomijając operacje zbędne. Strona 25 z 185

26 Sposób 2. Główna pętla nr 1 w poprzednio opisanym algorytmie wybiera ze zbioru kolejne elementy. Następnie wewnętrzna pętla nr 2 zlicza ich wystąpienia poczynając od początku zbioru. Jeśli dokładnie rozwaŝymy sytuację, to dojdziemy do wniosku, iŝ nie jest to konieczne. OtóŜ jeśli wybierzemy element na pozycji i-tej, a występował on juŝ wcześniej w zbiorze, to algorytm zliczył jego wystąpienia. Nie ma sensu powtarzanie jeszcze raz tej operacji. Z drugiej strony jeśli element na pozycji i-tej jest nowym elementem, to wcześniej nie występował. W obu przypadkach wystarczy, jeśli zliczymy wystąpienia elementu poczynając nie od pozycji nr 1, lecz od (i + 1) z licznikiem równym 1: 1. dla elementu, który juŝ wcześniej występował, otrzymamy mniejszą ilość wystąpień, lecz nie ma to Ŝadnego znaczenia, poniewaŝ ten element został juŝ przez algorytm przetworzony 2. dla nowego elementu otrzymamy poprawną ilość wystąpień Ta drobna modyfikacja zredukuje ilość niezbędnych operacji porównań. Następną optymalizacją jest ograniczenie zakresu pętli nr 1. Po pierwsze nie musimy sprawdzać ostatniego elementu, poniewaŝ nawet jeśli jest on elementem nowym, to występuje w zbiorze co najwyŝej raz. Zatem moŝemy śmiało ograniczyć zakres pierwszej pętli do elementów od 1 do n - 1. Jeśli pójdziemy śmiało za ciosem, to okaŝe się, iŝ ilość wykonań pętli nr 1 moŝna dalej ograniczyć. ZałóŜmy, iŝ w trakcie pracy algorytm wyznaczył pewien element zbioru, który powtarza się w nim L_n razy. W takim przypadku wystarczy zakończyć przeglądanie zbioru na pozycji n L_n, poniewaŝ jeśli na końcowych L_n pozycjach występuje nowy element, to i tak nie będzie on częstszy od wyznaczonego wcześniej. Podsumujmy nasze modyfikacje: Pętla wewnętrzna nr 2 przebiega pozycje od (i + 1) do n-tej Pętla zewnętrzna nr 1 przebiega elementy na pozycjach od 1 do n L_n, gdzie L_n jest aktualną ilością wystąpień elementu najczęstszego Drugie usprawnienie jeszcze bardziej zmniejsza ilość niezbędnych porównań. Specyfikacja problemu Dane wejściowe : n - liczba elementów w zbiorze wejściowym d[ ] - zbiór wejściowy, w którym dokonujemy poszukiwań. Indeksy elementów rozpoczynają się od 1. Zbiór musi posiadać miejsce na dodatkowy element, który zostanie dopisany na końcu. Dane wyjściowe : w_n p_n L_n - wartość elementu powtarzającego się najczęściej - pierwsza pozycja elementu najczęstszego - liczba wystąpień najczęstszego elementu Zmienne pomocnicze : i,j - zmienne licznikowe pętli licznik - licznik wystąpień elementu Strona 26 z 185

27 Lista kroków Krok 1 : w_n := d[1]; p_n :=1; L_n := 1 Krok 2 : Dla i = 1,2,...,n L_n : wykonuj kroki Krok 3 : licznik := 1; Krok 4 : Dla j = i+1, i+2,...,n : jeśli d[i] = d[j], to licznik := licznik + 1; Krok 5 : Jeśli licznik > L_n, to w_n := d[i]; p_n := i; L_n := licznik Krok 6 : Zakończ algorytm Schemat blokowy Przedstawiony obok START algorytm wyszukiwania najczęstszego elementu zbioru jest jedynie drobną modyfikacją w_n := d[1]; p_n := 1; algorytmu z poprzedniej L_n := 1; wersji - zmiany i := 1; zaznaczono na STOP schemacie blokowym 1 i <= n-l_n innym kolorem tła symboli. Usprawnienia polegają na ograniczeniu liczby wykonań obu pętli. licznik := 1; Pętla nr 1 wyznacza j := i + 1; licznik >L_n elementy zbioru, których liczność jest wyliczana. 2 Jej wykonanie j <= n ograniczamy do w_n := d[i]; elementów na pozycjach p_n := i; od 1 do n - ln. Ostatnie L_n := licznik; ln elementów zbioru d[i] = d[j] moŝemy pominąć, poniewaŝ nie wpływają one na wyznaczenie i := i + 1; licznik := licznik + 1; elementu najczęstszego. Pętla nr 2 wylicza wystąpienia wybranych j := j + 1; przez pętlę nr 1 elementów. Zliczanie rozpoczynamy od pozycji i + 1 do n. Istotne są jedynie nowe elementy, a elementy leŝące na pozycjach mniejszych od i-tej zostały juŝ przez algorytm zliczone. Pozostała część algorytmu jest niezmieniona. Strona 27 z 185

28 Sposób 3 Jeśli elementy zbioru są liczbami całkowitymi (lub dadzą się sprowadzić do liczb całkowitych), to problem wyszukania najczęstszego elementu moŝna rozwiązać w czasie liniowym wykorzystując dodatkowe struktury w pamięci. Zasada jest następująca: dla kaŝdej liczby ze zbioru przygotowujemy licznik częstości. Liczniki zerujemy. Przeglądamy zbiór zliczając w licznikach kolejno napotkane elementy. Następnie sprawdzamy, który z liczników zawiera największą wartość. Element skojarzony z tym licznikiem jest najczęstszym elementem zbioru. Podany algorytm jest szczególnie korzystny, gdy mamy wyznaczyć najczęstszy element wśród duŝej liczby elementów (np. miliony lub dziesiątki milionów głosów) o niewielkim zakresie wartości (np. numery kandydatów w wyborach do sejmu lub senatu). Specyfikacja problemu Dane wejściowe : n - liczba elementów w zbiorze wejściowym d[ ] - zbiór wejściowy, w którym dokonujemy poszukiwań. Indeksy elementów rozpoczynają się od 1. Zbiór musi posiadać miejsce na dodatkowy element, który zostanie dopisany na końcu. Dane wyjściowe : w_n L_n w_t - wartość elementu powtarzającego się najczęściej - liczba wystąpień najczęstszego elementu - true, jeśli istnieje element najczęstszy; false w przypadku braku takiego elementu Zmienne pomocnicze : i - zmienna licznikowa pętli L[ ] - tablica liczników wystąpień elementów Licz_n - zlicza ilość L_n w zbiorze liczników L[ ]. Lista kroków Krok 1 : Wyznacz wartość minimalną w_min oraz wartość maksymalną w_max elementów w zbiorze d[ ]. Krok 2 : Przygotuj tablicę liczników L[ ] o indeksach od w_min do w_max Krok 3 : Wyzeruj wszystkie liczniki w tablicy L[ ]. Krok 4 : Dla i = 1,2,...,n : L[d[i]] := L[d[i]] + 1 Krok 5 : L_n := L[w_min]; w_n := w_min; Krok 6 : Dla i: = w_min, w_min + 1,...,w_max : jeśli L[i] > L_n, to L_n := d[i]; w_n := i; Krok 7 : Jeśli L_n = 1, to w_t := False i idź do kroku 12 Krok 8 : Licz_n := 0; Krok 9 : Dla i = w_min, w_min + 1,...,w_max: jeśli L_n = L[i], to Licz_n := Licz_n + 1 Krok 10 : Jeśli Licz_n > 1, to w_t := False i idź do kroku 12 Krok 11 : w_t := True Krok 12 : Zakończ algorytm Strona 28 z 185

29 Schemat blokowy START Wyznacz w_min oraz w_max elemetów w d [ ] Licz_n := L[w_min]; w_n := w_min; L_n = 1 Przygotuj tablicę liczników L[ ] o indeksach od w_min do w_max 2 i := w_min; Licz_n := 0; i <= w_max i := w_min; Wyzeruj liczniki L [ ] i := 1; L[i] > L_n 3 i <= w_max Licz_n >1 1 i <= n L_n := L[i]; w_n := i; L_n =L[i] ; w_t := True L[d[i]] := L[d[i]] +1; i := i + 1; Licz_n := Licz_n + 1; w_t := False i := i + 1; i := i + 1; STOP Strona 29 z 185

30 W pierwszej kolejności wyznaczamy wartość minimalną wmin oraz wartość maksymalną wmax elementów zbioru d[ ]. Jeśli nie potrafimy oszacować tych wartości, to moŝemy zastosować opisany poprzednio algorytm jednoczesnego znajdowania wartości minimalnej i maksymalnej, który posiada liniową klasę złoŝoności obliczeniowej. Wartości te są nam potrzebne do przygotowania tablicy L[ ] zawierającej liczniki częstości, które następnie zerujemy. Liczniki będą zliczały występowanie kaŝdej wartości całkowitej w przedziale od w_min do w_max. Pętla nr 1 przebiega przez kolejne elementy zbioru d[ ] zliczając ich wystąpienia w odpowiednich licznikach. Po jej zakończeniu tablica L[ ] zawiera informację i ilości powtórzeń w zbiorze d[ ] kaŝdej wartości z przedziału od w_min do w_max. W kolejnym kroku wyszukujemy licznik, który zliczył największą ilość powtórzeń elementu - dokonuje tego pętla nr 2. W zmiennej L_n mamy maksymalną liczbę powtórzeń elementu o wartości w_n. Jeśli liczba ta wynosi 1, to Ŝaden element zbioru nie powtarza się dwa razy, zatem ustawiamy wynik w_t na false i kończymy algorytm. W przeciwnym razie sprawdzamy w pętli nr 3, czy w tablicy liczników L[ ] znajduje się licznik, który zliczył tyle samo powtórzeń. MoŜe się tak zdarzyć, jeśli zbiór nie zawiera najczęstszego elementu, ale zawiera kilka elementów powtarzających się tyle samo razy. Jeśli znajdziemy taki licznik, to wyznaczona w zbiorze jest więcej niŝ jeden element powtarzający się L_n razy. Kończymy algorytm z wynikiem negatywnym. Jeśli natomiast tylko jeden licznik zliczył wartość L_n, to w zbiorze istnieje element najczęstszy i jest to w_n. W takim przypadku ustawiamy wynik w_t na true i kończymy algorytm. W przeciwieństwie do algorytmów opisanych w dwóch poprzednich rozdziałach niniejszy algorytm nie tylko wyszukuje najczęstszy element, ale równieŝ sprawdza, czy znaleziony element jest faktycznie jedynym, najczęstszym elementem zbioru. Klasa czasowej złoŝoności obliczeniowej jest równa Θ(n + m), gdzie n oznacza ilość elementów, a m jest ilością moŝliwych wartości elementów. Klasa pamięciowej złoŝoności obliczeniowej jest równa Θ (m). Przykładowy program. program searchmf3; const N = 100; { liczba elementow w zbiorze } W_MIN = -9; { dolny zakres elementow } W_MAX = 9; { gorny zakres elementow } var d : array[1..n] of integer; L : array[w_min..w_max] of integer; i,l_n,w_n,licz_n : integer; w_t : boolean; begin writeln('demonstracja wyszukiwania najczestszego elementu'); writeln(' '); writeln('(c)2006 mgr Jerzy Walaszek I LO w Tarnowie'); writeln; { Generujemy zbior liczb pseudolosowych } randomize; for i := 1 to N do d[i] := W_MIN + random(w_max - W_MIN + 1); { Zerujemy liczniki } Strona 30 z 185

31 for i := W_MIN to W_MAX do L[i] := 0; { Zliczamy elementy zbioru } for i := 1 to N do inc(l[d[i]]); { Wyszukujemy licznik o najwiekszej liczbie powtorzen } L_n := L[W_MIN]; w_n := W_MIN; for i := W_MIN to W_MAX do if L[i] > L_n then begin L_n := L[i]; w_n := i; end; { Sprawdzamy wyniki wyszukiwania } if L_n = 1 then w_t := false else begin Licz_n := 0; for i := W_MIN to W_MAX do if L[i] = L_n then inc(licz_n); w_t := (Licz_n = 1); end; { Prezentujemy wyniki } for i := 1 to N do if w_t and (w_n = d[i]) then write('(',d[i]:2,')') else write(' ',d[i]:2,' '); writeln; if w_t then writeln('element = ',w_n,', Liczba powtorzen = ',l_n) else writeln('w zbiorze brak elementu najczestszego'); writeln; { Gotowe } writeln('nacisnij klawisz Enter...'); readln; end. Strona 31 z 185

32 ZADA 7 W pliku liczby.txt znaleźć drugą największą liczbę Drugi największy element zbioru. Jeśli zbiór jest uporządkowany, to zadanie staje się trywialnie proste - zwracamy przedostatni element. W przypadku zbioru nieuporządkowanego moŝemy zbiór posortować i zwrócić przedostatni element. JednakŜe sortowanie jest kosztowne i zajmuje drogocenny czas. Istnieje o wiele prostsza metoda, która wymaga jednokrotnego przeglądnięcia zbioru, zatem ma klasę czasowej złoŝoności obliczeniowej Θ(n). Co więcej, nie zmienia ona struktury zbioru (kolejności elementów) oraz nie wymaga dodatkowej pamięci zaleŝnej od ilości elementów w zbiorze. Umówmy się, iŝ wynikiem poszukiwań będzie wartość elementu zbioru oraz jego połoŝenie, czyli indeks. Dodatkowo nasz algorytm będzie zwracał wartość oraz połoŝenie największego elementu w zbiorze. Specyfikacja problemu Dane wejściowe : n - liczba elementów w zbiorze wejściowym d[ ] - zbiór wejściowy, w którym dokonujemy poszukiwań. Indeksy elementów rozpoczynają się od 1. Dane wyjściowe : w1 w2 p1 p2 - wartość pierwszego największego elementu - wartość drugiego największego elementu - pozycja pierwszego największego elementu - pozycja drugiego największego elementu Zmienne pomocnicze : i - zmienna licznikowa pętli Lista kroków Krok 1 : w1 := d[n]; p1 := n; w2 :=d[n - 1]; p2 := n - 1 Krok 2 : Jeśli w2 > w1 to w1 w2; p1 p2 Krok 3 : Dla i = n - 2, n - 3,...,1: wykonuj kroki Krok 4 : Jeśli d[i] > w2, to idź do kroku 5 inaczej wykonaj następny obieg pętli z kroku 3 Krok 5 : w2 := d[i]; p2 := i; Krok 6 : Jeśli w2 > w1, to w1 w2; p1 p2 Krok 7 : Zakończ algorytm Strona 32 z 185

33 Schemat blokowy START w1 := d[n]; p1 := n; w2 := d[n-1]; p2 := n-1; w2 > w1 w1 w2 p1 p2 i := n - 2; i >= 1 d[i] > w2 w2 d[i]; p2 i; w2 > w1 w1 w2 p1 p2 STOP i := i - 1; Na początku algorytmu wybieramy ze zbioru dwa ostatnie elementy i umieszczamy je odpowiednio w zmiennych w1 i w2. Dlaczego rozpoczynamy od końca zbioru? OtóŜ jeśli w przyszłości posortujemy zbiór stabilnym algorytmem sortującym (czyli takim, który nie zmienia kolejności elementów równych), to wyznaczony przez nasz algorytm drugi największy element będzie przedostatnim elementem zbioru posortowanego. Rozpoczynając przeglądanie od początku zbioru nie mielibyśmy takiej gwarancji (na przykład w przypadku, gdy w zbiorze są dwa elementy równe drugiemu największemu elementowi zbioru). W zmiennych p1 i p2 zapamiętujemy pozycję tych elementów. Umawiamy się, iŝ w1, p1 identyfikuje największy element w zbiorze, a w2 i p2 identyfikuje drugi największy element. Po inicjalizacji zmiennych musimy sprawdzić, czy wprowadzone do nich dane spełniają ten warunek. Jeśli nie, to wymieniamy ze sobą odpowiednie zawartości zmiennych. Rozpoczynamy pętlę przeglądającą kolejne elementy zbioru od n - 2 do pierwszego. Pozycje n i n - 1 pomijamy, poniewaŝ odpowiadające im elementy są juŝ w w1 i w2. W kaŝdym obiegu pętli sprawdzamy, czy i-ty element zbioru jest większy od tymczasowego drugiego największego elementu, czyli w2. Jeśli tak, to zapamiętujemy i-ty element w w2 oraz jego pozycję w p2. Teraz musimy sprawdzić, czy operacja ta nie spowodowała, iŝ w2 stało się większe od w1. Jeśli tak, to wymieniamy ze sobą zawartości zmiennych w1 z w2 oraz p1 z p2. Po zakończeniu pętli w zmiennej w1 mamy wartość największego elementu zbioru, w p1 jego pozycję w zbiorze, w w2 mamy wartość drugiego największego elementu zbioru i w p2 jego pozycję. Algorytm kończymy. Strona 33 z 185

34 6.2. K-ty największy element zbioru. Jeśli k jest nieduŝe, to do wyszukania k-tego największego elementu moŝemy wykorzystać prosty algorytm będący rozwinięciem algorytmu z poprzedniego rozdziału. OtóŜ utworzymy listę, w której umieścimy k końcowych elementów zbioru. Lista będzie posortowana malejąco, tzn. element ostatni będzie najmniejszy, a pierwszy największy. Przeglądanie zbioru rozpoczniemy od elementu na (n - k)-tej pozycji do elementu na pozycji nr 1. Jeśli wybrany element zbioru będzie większy od ostatniego elementu listy, to dopiszemy go do tej listy tak, aby wciąŝ była uporządkowana (problem wstawiania elementu na listę uporządkowaną opisaliśmy w artykule o algorytmach sortujących - sortowanie przez wstawianie). Po operacji wstawienia ostatni element listy będzie zawsze usuwany - dzięki temu lista będzie zawierała zawsze dokładnie k elementów. Po przeglądnięciu całego zbioru na liście znajdzie się k kolejnych, największych elementów, przy czym element pierwszy będzie zawierał element największy, a element k-ty będzie zawierał k-ty największy element w zbiorze. Tego typu algorytm ma klasę złoŝoności Θ(k 2 +kn). Jeśli k jest stałe, a zmienia się n, to klasa złoŝoności redukuje się do Θ(n). Specyfikacja problemu Dane wejściowe : n - liczba elementów w zbiorze wejściowym d[ ] - zbiór wejściowy, w którym dokonujemy poszukiwań. Indeksy elementów rozpoczynają się od 1. k - numer poszukiwanego największego elementu, k < n Dane wyjściowe : naj [ ] - k elementowa lista zawierająca kolejne, największe elementy zbioru d[ ]. Indeksy rozpoczynają się od 1. Element listy jest rekordem o dwóch polach: w - pole zawiera wartość kolejnego elementu największego p - pole zawiera pozycję kolejnego elementu największego Elementy listy określają kolejne największe elementy w następujący sposób: naj[1] - największy element naj[2] - drugi największy element... naj[k] k-ty największy element Zmienne pomocnicze : i,j - zmienne licznikowe pętli x - zmienna pomocnicza do sortowania listy naj[ ] Lista kroków Krok 1 : Dla i = 1,2,...,k: wykonuj kroki Krok 2 : j := i - 1; x.w := d[n - i + 1]; x.p := n - i + 1 Krok 3 : Dopóki (j > 0) and (x.w > naj[j].w): wykonuj krok 4 Krok 4 : naj[j + 1] := naj[j]; j := j 1; Krok 5 : naj[j + 1] := x; Strona 34 z 185

35 Krok 6 : Dla i = n - k, n - k - 1,...,1: wykonuj kroki Krok 7 : Jeśli d[i] <= naj[k].w, to wykonaj następny obieg pętli z kroku 6 Krok 8 : j := k - 1; x.w := d[i]; x.p := i; Krok 9 : Dopóki (j > 0) and (x.w > naj[j].w): wykonuj krok 10 Krok 10 : naj[j + 1] := naj[j]; j := j 1; Krok 11 : naj[j + 1] := x; Krok 12 : Zakończ algorytm Schemat blokowy START i := n k; i := 1; STOP i >= i <= k d[i] > naj[k].w j := i 1; x.w := d[n-i+1] x.p := n-i+1 j := k 1; x.w := d[ i ]; x.p := i; 2 j > 0 4 j > 0 x.w > naj[j].w x.w > naj[j].w naj [j+1] := naj[j]; j := j 1; naj [j+1] := naj[j]; j := j 1; naj[j+1] := x; naj[j+1] := x; i := i + 1; i := i + 1; Algorytm wyznaczania k-tego największego elementu składa się z dwóch sortowań. Pierwsze sortowanie realizowane jest przez pętle nr 1 i pętlę nr 2. Celem jest utworzenie posortowanej listy Strona 35 z 185

36 naj[ ] zawierającej k ostatnich elementów zbioru d[ ]. Lista jest sortowana malejąco, zatem pierwszy jej element będzie się odnosił do największego elementu, a ostatni do k-tego największego elementu. Drugie sortowanie realizują pętle nr 3 i nr 4. W tym przypadku pętla nr 3 wybiera ze zbioru elementy poczynając od elementu o indeksie n - k i idąc w kierunku początku zbioru. Wybrany element jest porównywany z końcem listy naj[ ]. Jeśli jest większy od ostatniego elementu tej listy, to powinien się na niej znaleźć. Pętla nr 4 szuka miejsca wstawienia na listę naj[ ] wybranego elementu. Po jej zakończeniu wstawiamy element na wyznaczone miejsce na liście. Zwróć uwagę, iŝ lista naj[ ] nie rozrasta się. Zawsze ostatni element jest tracony i dlatego lista zachowuje długość k elementów. Po zakończeniu pętli nr 3 na liście mamy zebrane k największych elementów w zbiorze (lista zapamiętuje zarówno wartość elementu jak i jego pozycję w zbiorze). k-ty największy element znajduje się na k-tej pozycji na tej liście. Algorytm kończy się. Zaletą algorytmu jest to, iŝ zbiór wejściowy nie jest modyfikowany i zachowuje oryginalną kolejność elementów - czasem moŝe to być poŝądane. Dla małych wartości k algorytm ma dosyć duŝą efektywność i nie wymaga wiele dodatkowej pamięci K-ty największy element zbioru wyszukiwanie szybkie. Istnieje szybki algorytm wyszukiwania k-tego największego elementu oparty na podziałach zbioru na partycje i posiadający pesymistyczną złoŝoność czasową Θ(n 2 ). W przypadku typowym k-ty największy element znajdowany jest w czasie liniowo logarytmicznym O(n log n). Algorytm nosi nazwę Szybkiego Wyszukiwania (ang. Quick Select) i został opracowany przez prof. Tony'ego Hoare'a (twórca znanego algorytmu sortującego Quick Sort). Idea działania algorytmu szybkiego wyszukiwania jest genialnie prosta i opiera się na wykorzystaniu metody Dziel i ZwycięŜaj (ang. Divide and Conquer): W zbiorze wybieramy element środkowy tak zwany pivot leŝący na pozycji w środku zbioru i dzielimy względem niego zbiór na dwie partycje tak, aby w lewej partycji znalazły się wszystkie elementy mniejsze od wybranego elementu, a w partycji prawej wszystkie elementy większe lub równe mu. Po podziale (opisanym dokładnie w artykule o algorytmach sortujących przy opisie algorytmu QuickSort) otrzymujemy wynikową pozycję elementu dzielącego. Jeśli jest równa k-tej pozycji od końca zbioru, to algorytm kończymy - element podziałowy jest poszukiwanym k-tym największym elementem w zbiorze. Jeśli równość nie zachodzi, to za nowy zbiór wybieramy tę partycję, która zawiera pozycję k-tą od końca zbioru i procedurę podziału powtarzamy aŝ do osiągnięcia poŝądanego wyniku. PoniŜej przedstawiamy trzy moŝliwe przypadki, które mogą wystąpić po podziale zbioru na dwie partycje względem wybranego elementu: 1. lewa partycja 2. lewa partycja k j k 3. lewa partycja j j prawa partycja prawa partycja prawa partycja k Pozycja elementu podziałowego j-ta jest równa k-tej od końca pozycji w zbiorze. Zatem prawa partycja zawiera k - 1 elementów większych lub równych elementowi podziałowemu, który jest k-tym największym elementem Pozycja j-ta jest większa od k-tej od końca pozycji w zbiorze. Poszukiwany element będzie zatem w lewej partycji. Za nowy zbiór przyjmiemy lewą partycję. Pozycja j-ta jest mniejsza od k-tej od końca pozycji w zbiorze. Poszukiwany element będzie w prawej partycji. Za nowy zbiór przyjmiemy prawą partycję. Strona 36 z 185

1 Wprowadzenie do algorytmiki

1 Wprowadzenie do algorytmiki Teoretyczne podstawy informatyki - ćwiczenia: Prowadzący: dr inż. Dariusz W Brzeziński 1 Wprowadzenie do algorytmiki 1.1 Algorytm 1. Skończony, uporządkowany ciąg precyzyjnie i zrozumiale opisanych czynności

Bardziej szczegółowo

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy ALGORYTMY 1. Podstawowe definicje Algorytm (definicja nieformalna) to sposób postępowania (przepis) umożliwiający rozwiązanie określonego zadania (klasy zadań), podany w postaci skończonego zestawu czynności

Bardziej szczegółowo

Sortowanie przez wstawianie Insertion Sort

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,

Bardziej szczegółowo

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy ALGORYTMY 1. Podstawowe definicje Algorytm (definicja nieformalna) to sposób postępowania (przepis) umożliwiający rozwiązanie określonego zadania (klasy zadań), podany w postaci skończonego zestawu czynności

Bardziej szczegółowo

ALGORYTMY Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

ALGORYTMY Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny ALGORYMY Algorytm to przepis; zestawienie kolejnych kroków prowadzących do wykonania określonego zadania; to uporządkowany sposób postępowania przy rozwiązywaniu zadania, problemu, z uwzględnieniem opisu

Bardziej szczegółowo

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy. PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy. 1. Instrukcję case t of... w przedstawionym fragmencie programu moŝna zastąpić: var t : integer; write( Podaj

Bardziej szczegółowo

Algorytm. a programowanie -

Algorytm. a programowanie - Algorytm a programowanie - Program komputerowy: Program komputerowy można rozumieć jako: kod źródłowy - program komputerowy zapisany w pewnym języku programowania, zestaw poszczególnych instrukcji, plik

Bardziej szczegółowo

Algorytmy i struktury danych. Wykład 4

Algorytmy i struktury danych. Wykład 4 Wykład 4 Różne algorytmy - obliczenia 1. Obliczanie wartości wielomianu 2. Szybkie potęgowanie 3. Algorytm Euklidesa, liczby pierwsze, faktoryzacja liczby naturalnej 2017-11-24 Algorytmy i struktury danych

Bardziej szczegółowo

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

Rekurencje. Jeśli algorytm zawiera wywołanie samego siebie, jego czas działania moŝe być określony rekurencją. Przykład: sortowanie przez scalanie: Rekurencje Jeśli algorytm zawiera wywołanie samego siebie, jego czas działania moŝe być określony rekurencją. Przykład: sortowanie przez scalanie: T(n) = Θ(1) (dla n = 1) T(n) = 2 T(n/2) + Θ(n) (dla n

Bardziej szczegółowo

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

Informatyka wprowadzenie do algorytmów (II) dr hab. inż. Mikołaj Morzy Informatyka wprowadze do algorytmów (II) dr hab. inż. Mikołaj Morzy plan wykładu cechy algorytmów sposoby zapisu algorytmów klasyfikacja algorytmów przykłady algorytmów sumowa przeszukiwa ciągu liczb sortowa

Bardziej szczegółowo

Definicja algorytmu brzmi:

Definicja algorytmu brzmi: 1.1. Definicja algorytmu Często w życiu stajesz przed koniecznością rozwiązania jakiegoś zadania. Na lekcji matematyki musisz na przykład rozwiązać równanie i w tym celu wykonujesz szereg czynności: od

Bardziej szczegółowo

Programowanie w VB Proste algorytmy sortowania

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

Bardziej szczegółowo

Algorytmy sortujące i wyszukujące

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.

Bardziej szczegółowo

Definicje. Algorytm to:

Definicje. Algorytm to: Algorytmy Definicje Algorytm to: skończony ciąg operacji na obiektach, ze ściśle ustalonym porządkiem wykonania, dający możliwość realizacji zadania określonej klasy pewien ciąg czynności, który prowadzi

Bardziej szczegółowo

Wprowadzenie do algorytmiki

Wprowadzenie do algorytmiki Wprowadzenie do algorytmiki Pojecie algorytmu Powszechnie przyjmuje się, że algorytm jest opisem krok po kroku rozwiązania postawionego problemu lub sposób osiągnięcia jakiegoś celu. Wywodzi się z matematyki

Bardziej szczegółowo

Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny Algorytm to przepis; zestawienie kolejnych kroków prowadzących do wykonania określonego zadania; to uporządkowany sposób postępowania przy rozwiązywaniu zadania, problemu, z uwzględnieniem opisu danych

Bardziej szczegółowo

1. Informatyka - dyscyplina naukowa i techniczna zajmująca się przetwarzaniem informacji.

1. Informatyka - dyscyplina naukowa i techniczna zajmująca się przetwarzaniem informacji. Temat: Technologia informacyjna a informatyka 1. Informatyka - dyscyplina naukowa i techniczna zajmująca się przetwarzaniem informacji. Technologia informacyjna (ang.) Information Technology, IT jedna

Bardziej szczegółowo

Opis problemu i przedstawienie sposobu jego rozwiązania w postaci graficznej. Gimnazjum nr 3 im. Jana Pawła II w Hrubieszowie 1

Opis problemu i przedstawienie sposobu jego rozwiązania w postaci graficznej. Gimnazjum nr 3 im. Jana Pawła II w Hrubieszowie 1 Opis problemu i przedstawienie sposobu jego rozwiązania w postaci graficznej Gimnazjum nr 3 im. Jana Pawła II w Hrubieszowie 1 Etapy rozwiązywania problemu PROBLEM wybór metody rozwiązania ALGORYTM 1.

Bardziej szczegółowo

Język ludzki kod maszynowy

Język ludzki kod maszynowy Język ludzki kod maszynowy poziom wysoki Język ludzki (mowa) Język programowania wysokiego poziomu Jeśli liczba punktów jest większa niż 50, test zostaje zaliczony; w przeciwnym razie testu nie zalicza

Bardziej szczegółowo

Algorytmy i struktury danych

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

Bardziej szczegółowo

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.

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

Bardziej szczegółowo

Sortowanie Shella Shell Sort

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

Bardziej szczegółowo

do instrukcja while (wyrażenie);

do instrukcja while (wyrażenie); Instrukcje pętli -ćwiczenia Instrukcja while Pętla while (póki) powoduje powtarzanie zawartej w niej sekwencji instrukcji tak długo, jak długo zaczynające pętlę wyrażenie pozostaje prawdziwe. while ( wyrażenie

Bardziej szczegółowo

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe Podstawy programowania Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe 1 I. Składnia Składnia programu Program nazwa; Uses biblioteki; Var deklaracje zmiennych;

Bardziej szczegółowo

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki Turbo Pascal jest językiem wysokiego poziomu, czyli nie jest rozumiany bezpośrednio dla komputera, ale jednocześnie jest wygodny dla programisty,

Bardziej szczegółowo

Pętla for. Matematyka dla ciekawych świata -19- Scilab. for i=1:10... end. for k=4:-1:1... end. k=3 k=4. k=1. k=2

Pętla for. Matematyka dla ciekawych świata -19- Scilab. for i=1:10... end. for k=4:-1:1... end. k=3 k=4. k=1. k=2 Pętle wielokrotne wykonywanie ciągu instrukcji. Bardzo często w programowaniu wykorzystuje się wielokrotne powtarzanie określonego ciągu czynności (instrukcji). Rozróżniamy sytuacje, gdy liczba powtórzeń

Bardziej szczegółowo

Luty 2001 Algorytmy (7) 2000/2001 s-rg@siwy.il.pw.edu.pl

Luty 2001 Algorytmy (7) 2000/2001 s-rg@siwy.il.pw.edu.pl System dziesiętny 7 * 10 4 + 3 * 10 3 + 0 * 10 2 + 5 *10 1 + 1 * 10 0 = 73051 Liczba 10 w tym zapisie nazywa się podstawą systemu liczenia. Jeśli liczba 73051 byłaby zapisana w systemie ósemkowym, co powinniśmy

Bardziej szczegółowo

Schematy blokowe I. 1. Dostępne bloki: 2. Prosty program drukujący tekst.

Schematy blokowe I. 1. Dostępne bloki: 2. Prosty program drukujący tekst. Schematy blokowe I Jeżeli po schematach blokowych będzie używany język C, to należy używać operatorów: '&&', ' ', '!=', '%' natomiast jeśli Ruby to 'and', 'or', '%', '!='. 1. Dostępne bloki: a) początek:

Bardziej szczegółowo

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu Programowanie strukturalne Opis ogólny programu w Turbo Pascalu STRUKTURA PROGRAMU W TURBO PASCALU Program nazwa; } nagłówek programu uses nazwy modułów; } blok deklaracji modułów const } blok deklaracji

Bardziej szczegółowo

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. 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

Bardziej szczegółowo

WHILE (wyrażenie) instrukcja;

WHILE (wyrażenie) instrukcja; INSTRUKCJE ITERACYJNE WHILE, DO WHILE, FOR Instrukcje iteracyjne pozwalają powtarzać daną instrukcję programu określoną liczbę razy lub do momentu osiągnięcia określonego skutku. Pętla iteracyjna while

Bardziej szczegółowo

Instrukcja warunkowa i złoŝona.

Instrukcja warunkowa i złoŝona. Instrukcja warunkowa i złoŝona. Budowa pętli warunkowej. JeŜeli mielibyśmy przetłumaczyć instrukcję warunkową to brzmiałoby to mniej więcej tak: jeŝeli warunek jest spełniony, to wykonaj jakąś operację

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Luty 2001 Algorytmy (4) 2000/2001

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

Bardziej szczegółowo

Analiza algorytmów zadania podstawowe

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ą

Bardziej szczegółowo

WHILE (wyrażenie) instrukcja;

WHILE (wyrażenie) instrukcja; INSTRUKCJE ITERACYJNE WHILE, DO WHILE, FOR Instrukcje iteracyjne pozwalają powtarzać daną instrukcję programu określoną liczbę razy lub do momentu osiągnięcia określonego skutku. Pętla iteracyjna while

Bardziej szczegółowo

1. Napisz program, który wyświetli Twoje dane jako napis Witaj, Imię Nazwisko. 2. Napisz program, który wyświetli wizytówkę postaci:

1. Napisz program, który wyświetli Twoje dane jako napis Witaj, Imię Nazwisko. 2. Napisz program, który wyświetli wizytówkę postaci: 1. Napisz program, który wyświetli Twoje dane jako napis Witaj, Imię Nazwisko. 2. Napisz program, który wyświetli wizytówkę postaci: * Jan Kowalski * * ul. Zana 31 * 3. Zadeklaruj zmienne przechowujące

Bardziej szczegółowo

INFORMATYKA W SZKOLE. Podyplomowe Studia Pedagogiczne. Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227

INFORMATYKA W SZKOLE. Podyplomowe Studia Pedagogiczne. Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 INFORMATYKA W SZKOLE Dr inż. Grażyna KRUPIŃSKA grazyna@fis.agh.edu.pl D-10 pokój 227 Podyplomowe Studia Pedagogiczne 2 Algorytmy Nazwa algorytm wywodzi się od nazwiska perskiego matematyka Muhamed ibn

Bardziej szczegółowo

Informatyka A. Algorytmy

Informatyka A. Algorytmy Informatyka A Algorytmy Spis algorytmów 1 Algorytm Euklidesa....................................... 2 2 Rozszerzony algorytm Euklidesa................................ 2 3 Wyszukiwanie min w tablicy..................................

Bardziej szczegółowo

Podstawy Programowania C++

Podstawy Programowania C++ Wykład 3 - podstawowe konstrukcje Instytut Automatyki i Robotyki Warszawa, 2014 Wstęp Plan wykładu Struktura programu, instrukcja przypisania, podstawowe typy danych, zapis i odczyt danych, wyrażenia:

Bardziej szczegółowo

Wstęp do informatyki- wykład 2

Wstęp do informatyki- wykład 2 MATEMATYKA 1 Wstęp do informatyki- wykład 2 Systemy liczbowe Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania. Wydanie VI, Helion, 2012 www.cplusplus.com Jerzy

Bardziej szczegółowo

Zapis algorytmów: schematy blokowe i pseudokod 1

Zapis algorytmów: schematy blokowe i pseudokod 1 Zapis algorytmów: schematy blokowe i pseudokod 1 Przed przystąpieniem do napisania kodu programu należy ten program najpierw zaprojektować. Projekt tworzącego go algorytmu może być zapisany w formie schematu

Bardziej szczegółowo

Iteracje. Algorytm z iteracją to taki, w którym trzeba wielokrotnie powtarzać instrukcję, aby warunek został spełniony.

Iteracje. Algorytm z iteracją to taki, w którym trzeba wielokrotnie powtarzać instrukcję, aby warunek został spełniony. Iteracje Algorytm z iteracją to taki, w którym trzeba wielokrotnie powtarzać instrukcję, aby warunek został spełniony. Iteracja inaczej zwana jest pętlą i oznacza wielokrotne wykonywanie instrukcji. Iteracje

Bardziej szczegółowo

Wyszukiwanie. Wyszukiwanie binarne

Wyszukiwanie. Wyszukiwanie binarne Wyszukiwanie Wejście: posortowana, n-elementowa tablica liczbowa T oraz liczba p. Wyjście: liczba naturalna, określająca pozycję elementu p w tablicy T, bądź 1, jeŝeli element w tablicy nie występuje.

Bardziej szczegółowo

Algorytm - pojęcie algorytmu, sposób zapisu, poziom szczegółowości, czynności proste i strukturalne. Pojęcie procedury i funkcji.

Algorytm - pojęcie algorytmu, sposób zapisu, poziom szczegółowości, czynności proste i strukturalne. Pojęcie procedury i funkcji. Algorytm - pojęcie algorytmu, sposób zapisu, poziom szczegółowości, czynności proste i strukturalne. Pojęcie procedury i funkcji. Maria Górska 9 stycznia 2010 1 Spis treści 1 Pojęcie algorytmu 3 2 Sposób

Bardziej szczegółowo

Sortowanie - wybrane algorytmy

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

Bardziej szczegółowo

Algorytmy i struktury danych

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

Bardziej szczegółowo

wagi cyfry 7 5 8 2 pozycje 3 2 1 0

wagi cyfry 7 5 8 2 pozycje 3 2 1 0 Wartość liczby pozycyjnej System dziesiętny W rozdziale opiszemy pozycyjne systemy liczbowe. Wiedza ta znakomicie ułatwi nam zrozumienie sposobu przechowywania liczb w pamięci komputerów. Na pierwszy ogień

Bardziej szczegółowo

Algorytmika i pseudoprogramowanie

Algorytmika i pseudoprogramowanie Przedmiotowy system oceniania Zawód: Technik Informatyk Nr programu: 312[ 01] /T,SP/MENiS/ 2004.06.14 Przedmiot: Programowanie Strukturalne i Obiektowe Klasa: druga Dział Dopuszczający Dostateczny Dobry

Bardziej szczegółowo

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH ĆWICZENIE NR 9 WYRAŻENIA LOGICZNE, INSTRUKCJE WARUNKOWE I INSTRUKCJE ITERACYJNE W PROGRAMIE KOMPUTEROWYM MATLAB Dr inż. Sergiusz Sienkowski ĆWICZENIE NR

Bardziej szczegółowo

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 )

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,

Bardziej szczegółowo

Efektywna metoda sortowania sortowanie przez scalanie

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

Bardziej szczegółowo

Algorytmy. Programowanie Proceduralne 1

Algorytmy. Programowanie Proceduralne 1 Algorytmy Programowanie Proceduralne 1 Przepis Warzenie piwa Brunświckiego Programowanie Proceduralne 2 Przepis Warzenie piwa Brunświckiego składniki (dane wejściowe): woda, słód, itd. wynik: beczka piwa

Bardziej szczegółowo

START. Wprowadź (v, t) S:=v*t. Wyprowadź (S) KONIEC

START. Wprowadź (v, t) S:=v*t. Wyprowadź (S) KONIEC GRUPA I Co to jest algorytm, a czym jest program komputerowy? Algorytm: uporządkowany i uściślony sposób rozwiązywania problemu, zawierający szczegółowy opis wykonywanych czynności. Program komputerowy:

Bardziej szczegółowo

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny Klasa 2 INFORMATYKA dla szkół ponadgimnazjalnych zakres rozszerzony Założone osiągnięcia ucznia wymagania edukacyjne na poszczególne oceny Algorytmy 2 3 4 5 6 Wie, co to jest algorytm. Wymienia przykłady

Bardziej szczegółowo

Pętle. Dodał Administrator niedziela, 14 marzec :27

Pętle. Dodał Administrator niedziela, 14 marzec :27 Pętlami nazywamy konstrukcje języka, które pozwalają na wielokrotne wykonywanie powtarzających się instrukcji. Przykładowo, jeśli trzeba 10 razy wyświetlić na ekranie pewien napis, to można wykorzystać

Bardziej szczegółowo

Sortowanie bąbelkowe - wersja nr 1 Bubble Sort

Sortowanie bąbelkowe - wersja nr 1 Bubble Sort Sortowanie bąbelkowe - wersja nr 1 Bubble Sort Algorytm Algorytm sortowania bąbelkowego jest jednym z najstarszych algorytmów sortujących. Można go potraktować jako ulepszenie opisanego w poprzednim rozdziale

Bardziej szczegółowo

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych Rafał Walkowiak Politechnika Poznańska Studia inżynierskie Informatyka 2014/15 Znajdowanie maksimum w zbiorze

Bardziej szczegółowo

a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10] 3-2 5 8 12-4 -26 12 45-76

a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10] 3-2 5 8 12-4 -26 12 45-76 . p. 1 Algorytmem nazywa się poddający się interpretacji skończony zbiór instrukcji wykonania zadania mającego określony stan końcowy dla każdego zestawu danych wejściowych W algorytmach mogą występować

Bardziej szczegółowo

Jeszcze o algorytmach

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

Bardziej szczegółowo

Algorytmy i Struktury Danych.

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

Bardziej szczegółowo

(3 kwiecień 2014) Marika Pankowska Kamila Pietrzak

(3 kwiecień 2014) Marika Pankowska Kamila Pietrzak (3 kwiecień 2014) Marika Pankowska Kamila Pietrzak Wyszukiwanie liniowe (ang. linear search), zwane również sekwencyjnym (ang. sequential search) polega na przeglądaniu kolejnych elementów zbioru Z. Jeśli

Bardziej szczegółowo

Sortowanie przez scalanie

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

Bardziej szczegółowo

Wykład IV Algorytmy metody prezentacji i zapisu Rzut oka na język PASCAL

Wykład IV Algorytmy metody prezentacji i zapisu Rzut oka na język PASCAL Studia Podyplomowe INFORMATYKA Podstawy Informatyki Wykład IV Algorytmy metody prezentacji i zapisu Rzut oka na język PASCAL 1 Część 1 Pojęcie algorytmu 2 I. Pojęcie algorytmu Trochę historii Pierwsze

Bardziej szczegółowo

Wstęp do programowania

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

Bardziej szczegółowo

Wykład z Technologii Informacyjnych. Piotr Mika

Wykład z Technologii Informacyjnych. Piotr Mika Wykład z Technologii Informacyjnych Piotr Mika Uniwersalna forma graficznego zapisu algorytmów Schemat blokowy zbiór bloków, powiązanych ze sobą liniami zorientowanymi. Jest to rodzaj grafu, którego węzły

Bardziej szczegółowo

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++ Programowanie Wstęp p do programowania Klasa 3 Lekcja 9 PASCAL & C++ Język programowania Do przedstawiania algorytmów w postaci programów służą języki programowania. Tylko algorytm zapisany w postaci programu

Bardziej szczegółowo

Zaawansowane algorytmy i struktury danych

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)

Bardziej szczegółowo

Wstęp do informatyki. Maszyna RAM. Schemat logiczny komputera. Maszyna RAM. RAM: szczegóły. Realizacja algorytmu przez komputer

Wstęp do informatyki. Maszyna RAM. Schemat logiczny komputera. Maszyna RAM. RAM: szczegóły. Realizacja algorytmu przez komputer Realizacja algorytmu przez komputer Wstęp do informatyki Wykład UniwersytetWrocławski 0 Tydzień temu: opis algorytmu w języku zrozumiałym dla człowieka: schemat blokowy, pseudokod. Dziś: schemat logiczny

Bardziej szczegółowo

Zapis liczb binarnych ze znakiem

Zapis liczb binarnych ze znakiem Zapis liczb binarnych ze znakiem W tej prezentacji: Zapis Znak-Moduł (ZM) Zapis uzupełnień do 1 (U1) Zapis uzupełnień do 2 (U2) Zapis Znak-Moduł (ZM) Koncepcyjnie zapis znak - moduł (w skrócie ZM - ang.

Bardziej szczegółowo

Język programowania PASCAL

Język programowania PASCAL Język programowania PASCAL (wersja podstawowa - standard) Literatura: dowolny podręcznik do języka PASCAL (na laboratoriach Borland) Iglewski, Madey, Matwin PASCAL STANDARD, PASCAL 360 Marciniak TURBO

Bardziej szczegółowo

Programowanie w Baltie klasa VII

Programowanie w Baltie klasa VII Programowanie w Baltie klasa VII Zadania z podręcznika strona 127 i 128 Zadanie 1/127 Zadanie 2/127 Zadanie 3/127 Zadanie 4/127 Zadanie 5/127 Zadanie 6/127 Ten sposób pisania programu nie ma sensu!!!.

Bardziej szczegółowo

Lekcja 3: Pierwsze kroki z Pythonem. Pętle

Lekcja 3: Pierwsze kroki z Pythonem. Pętle #SuperKoderzy www.superkoderzy.pl Mikrobitowcy Autorzy: Filip Kłębczyk Lekcja 3: Pierwsze kroki z Pythonem. Pętle Podczas lekcji uczniowie zapoznają się z dwoma rodzajami pętli - for i while - analizując

Bardziej szczegółowo

Wojewódzki Przedmiotowy Konkurs z informatyki dla uczniów szkół gimnazjalnych ETAP REJONOWY 2008/2009 TEST

Wojewódzki Przedmiotowy Konkurs z informatyki dla uczniów szkół gimnazjalnych ETAP REJONOWY 2008/2009 TEST TEST. Test składa się z 35 zadań. Na jego rozwiązanie masz 90 minut. W kaŝdym zadaniu wybierz jedną, najlepszą według Ciebie odpowiedź i zaznacz na karcie odpowiedzi znakiem x. Do dyspozycji masz wszystkie

Bardziej szczegółowo

liniowa - elementy następują jeden za drugim. Graficznie możemy przedstawić to tak:

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

Bardziej szczegółowo

Zadanie 1. Potęgi (14 pkt)

Zadanie 1. Potęgi (14 pkt) 2 Egzamin maturalny z informatyki Zadanie 1. otęgi (14 pkt) W poniższej tabelce podane są wartości kolejnych potęg liczby 2: k 0 1 2 3 4 5 6 7 8 9 10 2 k 1 2 4 8 16 32 64 128 256 512 1024 Ciąg a=(a 0,

Bardziej szczegółowo

1. Liczby wymierne. x dla x 0 (wartością bezwzględną liczby nieujemnej jest ta sama liczba)

1. Liczby wymierne. x dla x 0 (wartością bezwzględną liczby nieujemnej jest ta sama liczba) 1. Liczby wymierne. - wartość bezwzględna liczby. dla 0 (wartością bezwzględną liczby nieujemnej jest ta sama liczba) - dla < 0 ( wartością bezwzględną liczby ujemnej jest liczba do niej przeciwna) W interpretacji

Bardziej szczegółowo

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania 1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja nie ma parametru i zwraca wartość na zewnątrz. nie ma parametru i nie zwraca wartości na zewnątrz. ma parametr o nazwie void i zwraca

Bardziej szczegółowo

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 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

Bardziej szczegółowo

Wprowadzenie komentarzy do programu

Wprowadzenie komentarzy do programu Wprowadzenie komentarzy do programu W programach mogą wystąpić objaśnienia, uwagi zamykane w klamrach { } lub nawiasach z gwiazdką (* *). Komentarze ułatwiają zrozumienie programów. Przyjmijmy, że komentarze

Bardziej szczegółowo

Zadanie 1. Zmiana systemów. Zadanie 2. Szyfr Cezara. Zadanie 3. Czy liczba jest doskonała. Zadanie 4. Rozkład liczby na czynniki pierwsze Zadanie 5.

Zadanie 1. Zmiana systemów. Zadanie 2. Szyfr Cezara. Zadanie 3. Czy liczba jest doskonała. Zadanie 4. Rozkład liczby na czynniki pierwsze Zadanie 5. Zadanie 1. Zmiana systemów. Zadanie 2. Szyfr Cezara. Zadanie 3. Czy liczba jest doskonała. Zadanie 4. Rozkład liczby na czynniki pierwsze Zadanie 5. Schemat Hornera. Wyjaśnienie: Zadanie 1. Pozycyjne reprezentacje

Bardziej szczegółowo

Nazwa implementacji: Nauka języka Python pętla for. Autor: Piotr Fiorek

Nazwa implementacji: Nauka języka Python pętla for. Autor: Piotr Fiorek Nazwa implementacji: Nauka języka Python pętla for Autor: Piotr Fiorek Opis implementacji: Poznanie innego rodzaju pętli, jaką jest pętla for w języku Python. Składnia pętli for jest następująca: for

Bardziej szczegółowo

Sortowanie zewnętrzne

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

Bardziej szczegółowo

4. Postęp arytmetyczny i geometryczny. Wartość bezwzględna, potęgowanie i pierwiastkowanie liczb rzeczywistych.

4. Postęp arytmetyczny i geometryczny. Wartość bezwzględna, potęgowanie i pierwiastkowanie liczb rzeczywistych. Jarosław Wróblewski Matematyka dla Myślących, 008/09. Postęp arytmetyczny i geometryczny. Wartość bezwzględna, potęgowanie i pierwiastkowanie liczb rzeczywistych. 15 listopada 008 r. Uwaga: Przyjmujemy,

Bardziej szczegółowo

lekcja 8a Gry komputerowe MasterMind

lekcja 8a Gry komputerowe MasterMind lekcja 8a Gry komputerowe MasterMind Posiadamy już elementarną wiedzę w zakresie programowania. Pora więc zabrać się za rozwiązywanie problemów bardziej złożonych, które wymagają zastosowania typowych

Bardziej szczegółowo

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

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

Bardziej szczegółowo

Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011 Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011 Załóżmy, że uprawiamy jogging i chcemy monitorować swoje postępy. W tym celu napiszemy program, który zlicza, ile czasu

Bardziej szczegółowo

Programowanie i techniki algorytmiczne

Programowanie i techniki algorytmiczne Temat 2. Programowanie i techniki algorytmiczne Realizacja podstawy programowej 1) wyjaśnia pojęcie algorytmu, podaje odpowiednie przykłady algorytmów rozwiązywania różnych 2) formułuje ścisły opis prostej

Bardziej szczegółowo

Podstawy Informatyki. Sprawność algorytmów

Podstawy Informatyki. Sprawność algorytmów Podstawy Informatyki Sprawność algorytmów Sprawność algorytmów Kryteria oceny oszczędności Miara złożoności rozmiaru pamięci (złożoność pamięciowa): Liczba zmiennych + liczba i rozmiar struktur danych

Bardziej szczegółowo

INSTRUKCJA PUSTA. Nie składa się z żadnych znaków i symboli, niczego nie robi. for i := 1 to 10 do {tu nic nie ma};

INSTRUKCJA PUSTA. Nie składa się z żadnych znaków i symboli, niczego nie robi. for i := 1 to 10 do {tu nic nie ma}; INSTRUKCJA PUSTA Nie składa się z żadnych znaków i symboli, niczego nie robi Przykłady: for i := 1 to 10 do {tu nic nie ma}; while a>0 do {tu nic nie ma}; if a = 0 then {tu nic nie ma}; INSTRUKCJA CASE

Bardziej szczegółowo

Arytmetyka liczb binarnych

Arytmetyka liczb binarnych Wartość dwójkowej liczby stałoprzecinkowej Wartość dziesiętna stałoprzecinkowej liczby binarnej Arytmetyka liczb binarnych b n-1...b 1 b 0,b -1 b -2...b -m = b n-1 2 n-1 +... + b 1 2 1 + b 0 2 0 + b -1

Bardziej szczegółowo

Zaawansowane algorytmy i struktury danych

Zaawansowane algorytmy i struktury danych Zaawansowane algorytmy i struktury danych u dr Barbary Marszał-Paszek Opracowanie pytań praktycznych z egzaminów. Strona 1 z 12 Pytania praktyczne z kolokwium zaliczeniowego z 19 czerwca 2014 (studia dzienne)

Bardziej szczegółowo

Metody numeryczne Technika obliczeniowa i symulacyjna Sem. 2, EiT, 2014/2015

Metody numeryczne Technika obliczeniowa i symulacyjna Sem. 2, EiT, 2014/2015 Metody numeryczne Technika obliczeniowa i symulacyjna Sem. 2, EiT, 2014/2015 1 Metody numeryczne Dział matematyki Metody rozwiązywania problemów matematycznych za pomocą operacji na liczbach. Otrzymywane

Bardziej szczegółowo

Programowanie w Turbo Pascal

Programowanie w Turbo Pascal Skróty: ALT + F9 Kompilacja CTRL + F9 Uruchomienie Struktura programu: Programowanie w Turbo Pascal Program nazwa; - nagłówek programu - blok deklaracji (tu znajduje się VAR lub CONST) - blok instrukcji

Bardziej szczegółowo

Sortowanie danych. Jolanta Bachan. Podstawy programowania

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

Bardziej szczegółowo

Podstawy programowania w języku Visual Basic dla Aplikacji (VBA)

Podstawy programowania w języku Visual Basic dla Aplikacji (VBA) Podstawy programowania w języku Visual Basic dla Aplikacji (VBA) Instrukcje Język Basic został stworzony w 1964 roku przez J.G. Kemeny ego i T.F. Kurtza z Uniwersytetu w Darthmouth (USA). Nazwa Basic jest

Bardziej szczegółowo

INFORMATYKA SORTOWANIE DANYCH.

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Znajdowanie największego i najmniejszego elementu w zbiorze n liczb całkowitych

Znajdowanie największego i najmniejszego elementu w zbiorze n liczb całkowitych 1/12 Opracowała Kozłowska Ewa ekozbelferek@poczta.onet.pl nauczyciel przedmiotów informatycznych Zespół Szkół Technicznych Mielec, ul. Jagiellończyka 3 Znajdowanie największego i najmniejszego elementu

Bardziej szczegółowo