Wstęp do programowania

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

Download "Wstęp do programowania"

Transkrypt

1 Wieczorowe Studia Licencjackie Wrocław, Wstęp do programowania Wykład nr 9 (w oparciu o notatki K. Lorysia z modyfikacjami) Sortowanie szybkie (Quicksort) Sortowanie przez scalanie opierało się na technice dziel i zwyciężaj, którą ogólnie scharakteryzować można poprzez wyspecyfikowanie następujących etapów rozwiązywania problemu: a) podział na podproblemy b) rozwiązanie podproblemów c) połączenie rozwiązań podproblemów i uzyskanie rozwiązania problemu głównego. W przypadku sortowania przez scalanie (rekurencyjnego) ciągu a[l..p-1], powyższy schemat realizowany jest następująco: a) podział na podproblemy: wyznaczenie pozycji środkowej s; b) rozwiązanie podproblemów: sortowanie podciągów a[l..s] i a[s+1..p-1] c) połączenie rozwiązań: scalenie podciągów a[l..s] i a[s+1..p-1] Bardzo popularna metoda Quicksort również opiera się na technice dziel i zwyciężaj. Sortowanie ciągu a[l..p-1] możemy opisać następująco: a) podział na podproblemy: wybór elementu x z a[l..p-1] i podział tablicy na elementy większe bądź równe i elementy mniejsze od tego elementu; w efekcie tego a[l..j] zawiera tylko elementy mniejsze od elementów w a[j+1..p-1] dla pewnego j b) rozwiązanie podproblemów: posortowanie podciągów a[l..j] i a[j+1..p-1]. c) połączenie rozwiązań: nie wymaga żadnych dodatkowych czynności! Poniżej znajduje się zapis powyższej idei w postaci funkcji rekurencyjnej: qsort(int d[],int l,int p) { int s; if (l<p) {s=partition(d,l,p); qsort(d,l,s); qsort(d,s+1,p); Funkcja qsort sortuje d[l..p], wykorzystując funkcję partition partition(int d[], int l, int p) { int x,y; x=d[l]; l--; p++; do { while (d[--p]<x); while (d[++l]>x); if (l<p) {y=d[p]; d[p]=d[l]; d[l]=y; else return p; while (1); której wartością jest taka liczba s, że po wykonaniu tej funkcji: - na pozycjach l..s znajdują się elementy mniejsze od x bądź równe x;

2 - na pozycjach s+1..p znajdują się elementy większe bądź równe x. Element x jest równy wartości d[l] przed uruchomieniem funkcji partition. Funkcja partition działa następująco: - przesuwamy się w tablicy t w prawo począwszy od pozycji l, aż do napotkania elementu mniejszego bądź równego x - przesuwamy się w tablicy t w lewo począwszy od pozycji p, aż do napotkania elementu większego bądź równego x - zamieniamy ze sobą elementy znalezione w dwóch powyższych krokach - kontynuujemy powyższe postępowanie począwszy od ostatnio odwiedzonych pozycji, kończymy po przejrzeniu całego obszaru t[l..p]. Koszt czasowy: - w najgorszym przypadku, n 2 (kiedy?) - w średnim przypadku n log n. - w praktyce: najszybszy ze stosowanych algorytmów. Iteracyjna implementacja Quicksort Zauważmy następującą odmienność sortowania przez scalanie i quicksort: - sortowanie przez scalanie pozwala na podział na podzadania w czasie stałym, a quicksort wymaga użycia partition, które działa w czasie liniowym - łączenie rozwiązań w przypadku sortowania przez scalanie wymaga scalenia posortowanych podciągów, natomiast w przypadku quicksort nie wymaga żadnych dodatkowych czynności. Oznacza to, że w przypadku (iteracyjnego) quicksort nie możemy zacząć od wykonywania najmniejszych podzadań, tak jak to robiliśmy w iteracyjnej wersji sortowania przez scalanie; Nasza metoda polegać będzie na naśladowaniu rekurencyjnej wersji quicksort w taki sposób, że: - dla każdej pary rekurencyjnych wywołań qsort(d,l,s) i qsort(d,s+1,p) w treści qsort(d,l,p), na stosie odkładamy parametry wywołania (s+1,p) a wywołanie qsort(d,l,s) czynimy wywołaniem aktualnym (poprzez nadanie odpowiednich wartości zmiennym l i p) - stos implementujemy przy pomocy dwóch tablic stosl[n] i stosp[n] na których umieszczamy lewe i prawe końce przedziałów do posortowania, dokładamy zawsze na koniec i pobieramy z końca; - po dojściu do przedziału długości jeden, pobieramy nowy przedział do posortowania z naszego stosu (czyniąc go przedziałem aktualnym ); - powyższe postępowanie kończymy gdy stos nie zawiera już danych o żadnych przedziałach do posortowania (zmienna pos wskazuje na ostatnią pozycję na stosie; pos<0 oznaczać będzie pusty stos). qsort(int d[],int l,int p) { int s, stosl[n], stosp[n], pos; pos=0; do { if (l==p) { pos--; if (pos>=0) { l=stosl[pos]; p=stosp[pos]; else { s=partition(d,l,p); stosl[pos]=s+1; stosp[pos++]=p; p=s; while(pos>=0);

3 Algorytmy z nawrotami (backtracking) Algorytmy z nawrotami poznamy na przykładzie dwóch problemów szachowych : rozstawienia hetmanów i wędrówki skoczka po szachownicy. Rozstawienie hetmanów Problem polega na rozstawieniu n hetmanów na szachownicy n n w taki sposób, by się nawzajem nie atakowały. Przypomnijmy, że hetman atakuje każde pole znajdujące się bądź w tym samym wierszu co on, bądź w tej samej kolumnie, bądź na jednej z dwóch przekątnych (patrz rysunek poniżej). Rys.1. Kółkiem oznaczone są pola atakowane przez hetmana znajdującego się na polu z literą Jak łatwo sprawdzić, dla n=2 i 3, rozwiązania nie istnieją. Dla większych wartości n rozwiązania istnieją, co więcej, dla dużych n jest ich bardzo dużo. Chcemy napisać program, który dla zadanego n będzie znajdować którekolwiek z tych rozwiązań. Rys.2. Przykładowe rozwiązania dla n=4 i n=5. Algorytm naiwny mógłby polegać na sprawdzaniu wszystkich możliwych ustawień hetmanów. Ze względu olbrzymią liczbę tych ustawień efektywność tego algorytmu jest co najmniej wątpliwa. Istnieją algorytmy znacznie bardziej efektywne. Bazują one na regularności rozwiązań. Przyglądając się rysunkowi 2 łatwo zauważyć, że w obydwu przedstawionych rozwiązaniach hetmany ustawione są wzdłuż dwóch linii. Łatwo się przekonać (do czego zachęcam czytelnika), że rozwiązania te dają się rozszerzyć na wiele innych wartości n, w szczególności na n nieparzyste. Algorytm z nawrotami, który rozważymy, jest dość prostą modyfikacją algorytmu naiwnego. Przedstawiamy go, by zilustrować klasyczną technikę programowania. Idea algorytmu. Algorytm próbuje ustawiać hetmany w kolejnych kolumnach począwszy od pierwszej kolumny (oczywiście w każdej kolumnie ustawia tylko jednego hetmana). W każdej z kolumn szuka pierwszego pola (począwszy od dolnego), na którym postawienie hetmana nie koliduje z hetmanami z wcześniejszych kolumn. Jeśli takie pole istnieje, ustawia na nim hetmana i przechodzi do kolejnej kolumny. Jeśli nie istnieje - algorytm powraca do

4 poprzedniej kolumny i próbuje przestawić hetmana na kolejne nie kolidujące pole. Może się zdarzyć, że algorytm będzie musiał cofnąć się aż do pierwszej kolumny. Taka sytuacja pokazana jest na Rysunku 3. Rys.3. W pewnym momencie działania algorytm zachłanny dochodzi do sytuacji przedstawionej obok. Próba znalezienia niekolidującego pola w czwartej kolumnie zakończy się niepowodzeniem. Podobnie zakończą się próby przestawienia hetmanów w 3-ciej, a następnie w 2-giej kolumnie. Skuteczne okaże się dopiero przestawienie hetmana w pierwszej kolumnie Implementacja Sprawdzanie czy pole jest atakowane Jednym z problemów, które będziemy musieli rozwiązać, jest znalezienie metody sprawdzania, czy dane pole (powiedzmy pole <i, j>) szachownicy nie jest atakowane przez hetmany ustawione we wcześniejszych kolumnach. W tym celu musimy sprawdzić, czy żaden z tych hetmanów nie znajduje się: w i-tym wierszu (to jest łatwe); na tych samych przekątnych co pole <i, j>. Jak łatwo zauważyć, pola dla których obydwa indeksy są sobie równe leżą na tej samej przekątnej, idącej od lewego górnego pola do prawego dolnego pola. Tuż nad nią leżą pola, których pierwszy indeks jest o jeden mniejszy od drugiego indeksu, a tuż pod nią pola, których pierwszy indeks jest o jeden większy od drugiego indeksu. Te obserwacje skłaniają nas do uważniejszego przyjrzenia się różnicom i sumom indeksów pól. (patrz Rysunek 4). i= 1 j= i-j= i+j= i-j= i+j= Rys.4. Wszystkie pola leżące na tej samej przekątnej idącej z lewego górnego rogu do prawego dolnego rogu mają taką samą sumę indeksów (lewy rysunek). Natomiast pola leżące na tej samej przekątnej idącej z prawego górnego do lewego dolnego rogu maja taką samą różnicę indeksów (prawy rysunek). Tak więc sprawdzenie, czy pole leży na tej samej przekątnej co pole <i,j>, sprowadza się do porównania różnicy indeksów tego pola z wartością i-j oraz sumy jego indeksów z wartością i+j. Pamiętanie rozstawienia hetmanów Może się wydawać, że algorytm musi używać dwuwymiarowej tablicy [1..n,1..n] do pamiętania stanu wszystkich pól szachownicy. Zauważmy jednak, że wystarczy pamiętać pozycje (numery wierszy) hetmanów z kolejnych kolumn. Do tego celu użyjemy jednowymiarowej tablicy w:array[1..n] of integer; Element w[i] będzie równy j, jeśli w i-tej kolumnie hetman został ustawiony w j-tym wierszu. Przykładowo, dla rozstawienia hetmanów z Rysunku 3, tablica w przyjmie wartości: w[i] : i :

5 Program #include <iostream.h> #define n 6 int w[n]; init() //wartosci poczatkowe tablicy w {int i; w[0]=0; for (i=1; i<n; i++) w[i]=-1; wolne(int x, int y) // sprawdzenie, czy pole <x,y> jest atakowane przez // hetmany ustawione w kolumnach 1,2,...,x-1 {int i; for (i=0; i<x; i++) if (w[i]-i==y-x w[i]+i==y+x w[i]==y)return 0; return 1; int hetmany() //algorytm z nawrotami; jeśli uda się //ustawić n hetmanów, funkcja przyjmuje wartość n // w przeciwnym razie przyjmuje wartość -1 {int k; k=1; while (k<n && k>=0) { do {w[k]++; while (w[k]<n &&!wolne(k,w[k])); if (w[k]<n) k++; else {w[k]=-1; k--; return k; main() {int i,j; init(); if (hetmany()==n) { cout << endl; for (i=0; i<n; i++) cout << w[i] << ; cout << endl << endl; for(i=0; i<n; i++) {for(j=0; j<n; j++) if (w[j]==i) cout << "x "); else cout << "o "; cout << endl; else cout << "nie mozna rozstawic hetmanow"; Komentarz do wybranych instrukcji: Funkcja init o w[0]:=0; - ustawienie hetmana z pierwszej kolumny na polu <1,1> o for (i=1; i<n; i++) w[i]=-1; - ustawienie pozostałych hetmanów poza szachownicą. Funkcja wolne o W pętli for (i=0; i<x; i++) sprawdzamy dla kolejnych i, począwszy od i=0, aż do i=x-1, czy hetman z i-tej kolumny nie atakuje pola <x,y>. Pętlę kończymy, jeśli natkniemy się na hetmana atakującego to pole (funkcja przyjmuje wartość 0), bądź też sprawdzimy wszystkie hetmany i żaden z nich nie koliduje (funkcja przyjmuje wartość 1). Funkcja hetmany() o Zmienna k pamięta numer ustawianego hetmana. Zaczynamy od drugiego hetmana (tj. od hetmana z kolumny numer 1). Następnie w każdej iteracji pętli while albo uda się ustawić k- tego hetmana (wówczas zmienną k należy zwiększyć o 1) albo sztuka ta się nie uda (wówczas k należy zmniejszyć o 1). o Teraz możemy docenić zalety nadania w procedurze init wartości -1 elementom tablicy w. Dzięki temu możemy teraz w pętli while jednolicie potraktować sytuację, w której hetmana z k-tej kolumny wstawiamy dopiero na szachownicę i taką, w której hetman ten już stał, lecz musimy poprawić jego pozycję (tj. przesunąć na następne nie atakowane pole w tej kolumnie), ponieważ przy obecnym ustawieniu, niepowodzeniem zakończyły się próby ustawienia hetmanów w dalszych kolumnach. W obydwu przypadkach wystarczy wartość w[k] zwiększać o jeden. Realizowane jest to w pętli: do {w[k]++; while (w[k]<n && wolne(k,w[k])==0); Kolejne instrukcje w[k]++ przesuwają hetmana po kolejnych polach k-tej kolumny tak długo, aż napotkamy nie atakowane pole bądź wyskoczymy hetmanem poza szachownicę. To, z którą sytuacją mamy do czynienia badane jest w instrukcji if (w[k]<n) k++; else {w[k]=-1; k--;

6 Jeśli w[k]<n, to hetmana w k-tej kolumnie udało się ustawić, a więc należy przejść do następnej kolumny (k++); w przeciwnym razie musimy cofnąć się do poprzedniej kolumny (k--), a wartość w[k] należy ustawić na -1, co odpowiada temu, że k-ty hetman jest poza szachownicą. Poniżej hetmany rekurencyjnie: int hetmany(int k) { // k numer kolumny if (k<n) { w[k]=-1; while (w[k]<n) { do {w[k]++; while (w[k]<n && wolne(k,w[k])==0); if (w[k]<n) { if (hetmany(k+1)) return n; else return -1; else return n;

Algorytm selekcji Hoare a. Łukasz Miemus

Algorytm selekcji Hoare a. Łukasz Miemus Algorytm selekcji Hoare a Łukasz Miemus 1 lutego 2006 Rozdział 1 O algorytmie 1.1 Problem Mamy tablicę A[N] różnych elementów i zmienną int K, takie że 1 K N. Oczekiwane rozwiązanie to określenie K-tego

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

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

Strategia "dziel i zwyciężaj"

Strategia dziel i zwyciężaj Strategia "dziel i zwyciężaj" W tej metodzie problem dzielony jest na kilka mniejszych podproblemów podobnych do początkowego problemu. Problemy te rozwiązywane są rekurencyjnie, a następnie rozwiązania

Bardziej szczegółowo

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

Podstawy algorytmiki i programowania - wykład 6 Sortowanie- algorytmy 1 Podstawy algorytmiki i programowania - wykład 6 Sortowanie- algorytmy 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

Bardziej szczegółowo

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

Algorytmy i struktury danych. Co dziś? Tytułem przypomnienia metoda dziel i zwyciężaj. Wykład VIII Elementarne techniki algorytmiczne Algorytmy i struktury danych Wykład VIII Elementarne techniki algorytmiczne Co dziś? Algorytmy zachłanne (greedyalgorithms) 2 Tytułem przypomnienia metoda dziel i zwyciężaj. Problem można podzielić na

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

Wstęp do programowania

Wstęp do programowania Wstęp do programowania Rekurencja, metoda dziel i zwyciężaj Paweł Daniluk Wydział Fizyki Jesień 2014 P. Daniluk(Wydział Fizyki) WP w. VIII Jesień 2014 1 / 27 Rekurencja Recursion See Recursion. P. Daniluk(Wydział

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

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

Wykład 3. Metoda dziel i zwyciężaj Wykład 3 Metoda dziel i zwyciężaj 1 Wprowadzenie Technika konstrukcji algorytmów dziel i zwyciężaj. przykładowe problemy: Wypełnianie planszy Poszukiwanie (binarne) Sortowanie (sortowanie przez łączenie

Bardziej szczegółowo

Algorytm obejścia drzewa poszukiwań i zadanie o hetmanach szachowych

Algorytm obejścia drzewa poszukiwań i zadanie o hetmanach szachowych Algorytm obejścia drzewa poszukiwań i zadanie o hetmanach szachowych 1 Algorytm obejścia drzewa poszukiwań i zadanie o hetmanach szachowych Alexander Denisjuk Prywatna Wyższa Szkoła Zawodowa w Giżycku

Bardziej szczegółowo

Zmienne i struktury dynamiczne

Zmienne i struktury dynamiczne Zmienne i struktury dynamiczne Zmienne dynamiczne są to zmienne, które tworzymy w trakcie działania programu za pomocą operatora new. Usuwa się je operatorem delete. Czas ich występowania w programie jest

Bardziej szczegółowo

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie. Sortowanie Dane wejściowe: ciąg n-liczb (kluczy) (a 1, a 2, a 3,..., a n 1, a n ) Dane wyjściowe: permutacja ciągu wejściowego (a 1, a 2, a 3,..., a n 1, a n) taka, że a 1 a 2 a 3... a n 1 a n. Będziemy

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

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

gimnazjalista.fundacja2lo.pl

gimnazjalista.fundacja2lo.pl Matematyka na szachownicy Legenda głosi, że pewien sułtan tak bardzo szachy pokochał iż wynalazcy tej gry, braminowi Sissa Nassir obiecał każdą nagrodę, której zażąda. Ten jednak nie chciał ani złota ani

Bardziej szczegółowo

Rekurencja. Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Przykład: silnia: n! = n(n-1)!

Rekurencja. Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Przykład: silnia: n! = n(n-1)! Rekurencja Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Przykład: silnia: n! = n(n-1)! Pseudokod: silnia(n): jeżeli n == 0 silnia = 1 w przeciwnym

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

Teoretyczne podstawy informatyki

Teoretyczne podstawy informatyki Teoretyczne podstawy informatyki Wykład 4a: Rozwiązywanie rekurencji http://kiwi.if.uj.edu.pl/~erichter/dydaktyka2010/tpi-2010 Prof. dr hab. Elżbieta Richter-Wąs 1 Czas działania programu Dla konkretnych

Bardziej szczegółowo

Sortowanie. LABORKA Piotr Ciskowski

Sortowanie. LABORKA Piotr Ciskowski Sortowanie LABORKA Piotr Ciskowski main Zaimplementuj metody sortowania przedstawione w następnych zadaniach Dla każdej metody osobna funkcja Nagłówek funkcji wg uznania ale wszystkie razem powinny być

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

Laboratorium nr 7 Sortowanie

Laboratorium nr 7 Sortowanie Laboratorium nr 7 Sortowanie 1. Sortowanie bąbelkowe (BbS) 2. Sortowanie przez wstawianie (IS) 3. Sortowanie przez wybieranie (SS) Materiały Wyróżniamy następujące metody sortowania: 1. Przez prostą zamianę

Bardziej szczegółowo

Struktury danych i złożoność obliczeniowa Wykład 2. Prof. dr hab. inż. Jan Magott

Struktury danych i złożoność obliczeniowa Wykład 2. Prof. dr hab. inż. Jan Magott Struktury danych i złożoność obliczeniowa Wykład 2. Prof. dr hab. inż. Jan Magott Metody konstrukcji algorytmów: Siłowa (ang. brute force), Dziel i zwyciężaj (ang. divide-and-conquer), Zachłanna (ang.

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania Wieczorowe Studia Licencjackie Wrocław, 9.01.2007 Wstęp do programowania Wykład nr 13 Listy usuwanie elementów Poniżej prezentujemy funkcję, która usuwa element o podanej wartości pola wiek z nieuporządkowanej

Bardziej szczegółowo

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

WYKŁAD 9. Algorytmy sortowania elementów zbioru (tablic) Programy: c4_1.c... c4_3.c. Tomasz Zieliński WYKŁAD 9 Algorytmy sortowania elementów zbioru (tablic) Programy: c4_1.c... c4_3.c Tomasz Zieliński /* Przyklad 4.1 - SORTOWANIE TABLIC - metoda najprostsza */ #include #define ROZMIAR 11 void

Bardziej szczegółowo

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

Złożoność obliczeniowa zadania, zestaw 2 Złożoność obliczeniowa zadania, zestaw 2 Określanie złożoności obliczeniowej algorytmów, obliczanie pesymistycznej i oczekiwanej złożoności obliczeniowej 1. Dana jest tablica jednowymiarowa A o rozmiarze

Bardziej szczegółowo

Budowa i generowanie planszy

Budowa i generowanie planszy Gra Saper została napisana w. Jest dostępna w każdej wersji systemu Windows. Polega na odkrywaniu zaminowanej planszy tak, aby nie trafić na minę. Gra działa na bardzo prostej zasadzie i nie wymaga zaawansowanego

Bardziej szczegółowo

TEORETYCZNE PODSTAWY INFORMATYKI

TEORETYCZNE PODSTAWY INFORMATYKI 1 TEORETYCZNE PODSTAWY INFORMATYKI 16/01/2017 WFAiS UJ, Informatyka Stosowana I rok studiów, I stopień Repetytorium złożoność obliczeniowa 2 Złożoność obliczeniowa Notacja wielkie 0 Notacja Ω i Θ Rozwiązywanie

Bardziej szczegółowo

Wieczorowe Studia Licencjackie Wrocław, Wykład nr 6 (w oparciu o notatki K. Lorysia, z modyfikacjami) Sito Eratostenesa

Wieczorowe Studia Licencjackie Wrocław, Wykład nr 6 (w oparciu o notatki K. Lorysia, z modyfikacjami) Sito Eratostenesa Wieczorowe Studia Licencjackie Wrocław, 7.11.2006 Wstęp do programowania Wykład nr 6 (w oparciu o notatki K. Lorysia, z modyfikacjami) Sito Eratostenesa Zaprezentujemy teraz algorytm na wyznaczanie wszystkich

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

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

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe Algorytmy i złożoności Wykład 3. Listy jednokierunkowe Wstęp. Lista jednokierunkowa jest strukturą pozwalającą na pamiętanie danych w postaci uporzadkowanej, a także na bardzo szybkie wstawianie i usuwanie

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

Czym jest całka? Całkowanie numeryczne

Czym jest całka? Całkowanie numeryczne Całkowanie numeryczne jest to zagadnienie z metod elementów skończonych (MES). Korzystając z całkowania numerycznego możemy obliczyć wartość dowolnej całki jednowymiarowej oznaczonej. Wynik jest zawsze

Bardziej szczegółowo

REKURENCJA W JĘZYKU HASKELL. Autor: Walczak Michał

REKURENCJA W JĘZYKU HASKELL. Autor: Walczak Michał REKURENCJA W JĘZYKU HASKELL Autor: Walczak Michał CZYM JEST REKURENCJA? Rekurencja zwana rekursją, polega na wywołaniu przez funkcję samej siebie. Algorytmy rekurencyjne zastępują w pewnym sensie iteracje.

Bardziej szczegółowo

Programowanie dynamiczne

Programowanie dynamiczne Programowanie dynamiczne Patryk Żywica 5 maja 2008 1 Spis treści 1 Problem wydawania reszty 3 1.1 Sformułowanie problemu...................... 3 1.2 Algorytm.............................. 3 1.2.1 Prosty

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

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char Programowanie C++ Informacje wstępne #include - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char = -128 do 127, unsigned char = od

Bardziej szczegółowo

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

Wstęp do programowania. Dziel i rządź. Piotr Chrząstowski-Wachtel Wstęp do programowania Dziel i rządź Piotr Chrząstowski-Wachtel Divide et impera Starożytni Rzymianie znali tę zasadę Łatwiej się rządzi, jeśli poddani są podzieleni Nie chodziło im jednak bynajmniej o

Bardziej szczegółowo

7. Pętle for. Przykłady

7. Pętle for. Przykłady . Pętle for Przykłady.1. Bez użycia pętli while ani rekurencji, napisz program, który wypisze na ekran kolejne liczby naturalne od 0 do pewnego danego n. 5 int n; 6 cin >> n; 8 for (int i = 0; i

Bardziej szczegółowo

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium 7. 2 Drzewa poszukiwań binarnych

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium 7. 2 Drzewa poszukiwań binarnych Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych Algorytmy i struktury danych Laboratorium Drzewa poszukiwań binarnych 1 Cel ćwiczenia Ćwiczenie ma na celu zapoznanie studentów

Bardziej szczegółowo

Wykład 6. Metoda eliminacji Gaussa: Eliminacja z wyborem częściowym Eliminacja z wyborem pełnym

Wykład 6. Metoda eliminacji Gaussa: Eliminacja z wyborem częściowym Eliminacja z wyborem pełnym 1 Wykład 6 Metoda eliminacji Gaussa: Eliminacja z wyborem częściowym Eliminacja z wyborem pełnym ELIMINACJA GAUSSA Z WYBOREM CZĘŚCIOWYM ELEMENTÓW PODSTAWOWYCH 2 Przy pomocy klasycznego algorytmu eliminacji

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

Temat: Algorytmy zachłanne

Temat: Algorytmy zachłanne Temat: Algorytmy zachłanne Algorytm zachłanny ( ang. greedy algorithm) wykonuje zawsze działanie, które wydaje się w danej chwili najkorzystniejsze. Wybiera zatem lokalnie optymalną możliwość w nadziei,

Bardziej szczegółowo

Lekcja : Tablice + pętle

Lekcja : Tablice + pętle Lekcja : Tablice + pętle Wprowadzenie Oczywiście wiesz już jak dużo można osiągnąć za pomocą tablic oraz jak dużo można osiągnąć za pomocą pętli, jednak tak naprawdę prawdziwe możliwości daje połączenie

Bardziej szczegółowo

Wykład 5. Metoda eliminacji Gaussa

Wykład 5. Metoda eliminacji Gaussa 1 Wykład 5 Metoda eliminacji Gaussa Rozwiązywanie układów równań liniowych Układ równań liniowych może mieć dokładnie jedno rozwiązanie, nieskończenie wiele rozwiązań lub nie mieć rozwiązania. Metody dokładne

Bardziej szczegółowo

Drzewa poszukiwań binarnych

Drzewa poszukiwań binarnych 1 Cel ćwiczenia Algorytmy i struktury danych Instytut Sterowania i Systemów Informatycznych Wydział Elektrotechniki, Informatyki i Telekomunikacji Uniwersytet ielonogórski Drzewa poszukiwań binarnych Ćwiczenie

Bardziej szczegółowo

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1 Podstawy programowania, Poniedziałek 30.05.2016, 8-10 Projekt, część 1 1. Zadanie Projekt polega na stworzeniu logicznej gry komputerowej działającej w trybie tekstowym o nazwie Minefield. 2. Cele Celem

Bardziej szczegółowo

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

Wykład 1_2 Algorytmy sortowania tablic Sortowanie bąbelkowe I. Struktury sterujące.bezpośrednie następstwo (A,B-czynności) Wykład _2 Algorytmy sortowania tablic Sortowanie bąbelkowe Elementy języka stosowanego do opisu algorytmu Elementy Poziom koncepcji Poziom

Bardziej szczegółowo

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

Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami Przykład 1. Napisz program, który dla podanej liczby n wypisze jej rozkład na czynniki pierwsze. Oblicz asymptotyczną złożoność

Bardziej szczegółowo

Programowanie komputerowe. Zajęcia 1

Programowanie komputerowe. Zajęcia 1 Programowanie komputerowe Zajęcia 1 Code::Blocks - tworzenie projektu Create New Project Console Application -> C++ Wybierz nazwę projektu Stworzy się nowy projekt z wpisaną funkcją main Wpisz swój program

Bardziej szczegółowo

Rozwiązanie. #include <cstdlib> #include <iostream> using namespace std;

Rozwiązanie. #include <cstdlib> #include <iostream> using namespace std; Programowanie C++ Zadanie 1 Napisz program do obliczenia sumy i iloczynu ciągu liczb zakooczonego liczbą zero. Zakładamy, że ciąg zawiera co najmniej jedną liczbę (założenie to jest konieczne przy obliczeniu

Bardziej szczegółowo

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

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 9. Karol Tarnowski A-1 p. Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy Wykład 9 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Zasada dziel i zwyciężaj Przykłady znajdowanie

Bardziej szczegółowo

3. Macierze i Układy Równań Liniowych

3. Macierze i Układy Równań Liniowych 3. Macierze i Układy Równań Liniowych Rozważamy równanie macierzowe z końcówki ostatniego wykładu ( ) 3 1 X = 4 1 ( ) 2 5 Podstawiając X = ( ) x y i wymnażając, otrzymujemy układ 2 równań liniowych 3x

Bardziej szczegółowo

Wyszukiwanie w BST Minimalny i maksymalny klucz. Wyszukiwanie w BST Minimalny klucz. Wyszukiwanie w BST - minimalny klucz Wersja rekurencyjna

Wyszukiwanie w BST Minimalny i maksymalny klucz. Wyszukiwanie w BST Minimalny klucz. Wyszukiwanie w BST - minimalny klucz Wersja rekurencyjna Podstawy Programowania 2 Drzewa bst - część druga Arkadiusz Chrobot Zakład Informatyki 12 maja 2016 1 / 8 Plan Wstęp Wyszukiwanie w BST Minimalny i maksymalny klucz Wskazany klucz Zmiany w funkcji main()

Bardziej szczegółowo

Algorytmy z powrotami. Algorytm minimax

Algorytmy z powrotami. Algorytm minimax Algorytmy z powrotami. Algorytm minimax Algorytmy i struktury danych. Wykład 7. Rok akademicki: 2010/2011 Algorytm z powrotami rozwiązanie problemu budowane jest w kolejnych krokach, po stwierdzeniu (w

Bardziej szczegółowo

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

[12] Metody projektowania algorytmów (dziel i rządź, programowanie dynamiczne i algorytmy zachłanne). [12] Metody projektowania algorytmów (dziel i rządź, programowanie dynamiczne i algorytmy zachłanne). Tworzenie projektów informatycznych opiera się w dużej mierze na formułowaniu i implementacji algorytmów,

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

Metodyki i Techniki Programowania 2

Metodyki i Techniki Programowania 2 Metodyki i Techniki Programowania 2 zajęcia nr 5 algorytmy cz.1: sortowanie Elektronika i Telekomunikacja, semestr III rok akademicki 2009/2010 mgr inż.. Paweł Myszkowski Plan dzisiejszych zajęć 1. Sortowanie

Bardziej szczegółowo

Algorytmy i struktury danych

Algorytmy i struktury danych POLITECHNIKA KRAKOWSKA - WIEiK KATEDRA AUTOMATYKI i TECHNIK INFORMACYJNYCH Algorytmy i struktury danych www.pk.edu.pl/~zk/aisd_hp.html Wykładowca: dr inż. Zbigniew Kokosiński zk@pk.edu.pl Wykład 5: Algorytmy

Bardziej szczegółowo

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

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 13. Karol Tarnowski A-1 p. Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy Wykład 13 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji (1) Złożoność algorytmów czy to istotne, skoro

Bardziej szczegółowo

Wykład 2. Poprawność algorytmów

Wykład 2. Poprawność algorytmów Wykład 2 Poprawność algorytmów 1 Przegląd Ø Poprawność algorytmów Ø Podstawy matematyczne: Przyrost funkcji i notacje asymptotyczne Sumowanie szeregów Indukcja matematyczna 2 Poprawność algorytmów Ø Algorytm

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

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

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 13. Karol Tarnowski A-1 p. Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy Wykład 13 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji (1) Złożoność algorytmów czy to istotne, skoro

Bardziej szczegółowo

WYKŁAD 3 WYPEŁNIANIE OBSZARÓW. Plan wykładu: 1. Wypełnianie wieloboku

WYKŁAD 3 WYPEŁNIANIE OBSZARÓW. Plan wykładu: 1. Wypełnianie wieloboku WYKŁ 3 WYPŁNINI OSZRÓW. Wypełnianie wieloboku Zasada parzystości: Prosta, która nie przechodzi przez wierzchołek przecina wielobok parzystą ilość razy. Plan wykładu: Wypełnianie wieloboku Wypełnianie konturu

Bardziej szczegółowo

Algorytmy i struktury danych.

Algorytmy i struktury danych. Algorytmy i struktury danych. Wykład 4 Krzysztof M. Ocetkiewicz Krzysztof.Ocetkiewicz@eti.pg.gda.pl Katedra Algorytmów i Modelowania Systemów, WETI, PG Problem plecakowy mamy plecak o określonej pojemności

Bardziej szczegółowo

5. Podstawowe algorytmy i ich cechy.

5. Podstawowe algorytmy i ich cechy. 23 5. Podstawowe algorytmy i ich cechy. 5.1. Wyszukiwanie liniowe i binarne 5.1.1. Wyszukiwanie liniowe Wyszukiwanie jest jedną z najczęściej wykonywanych operacji na strukturach danych i dotyczy wszystkich,

Bardziej szczegółowo

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu. Część XIX C++ w Każda poznana do tej pory zmienna może przechowywać jedną liczbę. Jeśli zaczniemy pisać bardziej rozbudowane programy, okaże się to niewystarczające. Warto więc poznać zmienne, które mogą

Bardziej szczegółowo

Algorytmy przeszukiwania

Algorytmy przeszukiwania Algorytmy przeszukiwania Przeszukiwanie liniowe Algorytm stosowany do poszukiwania elementu w zbiorze, o którym nic nie wiemy. Aby mieć pewność, że nie pominęliśmy żadnego elementu zbioru przeszukujemy

Bardziej szczegółowo

Podstawy algorytmiki i programowania - wykład 3 Funkcje rekurencyjne Wyszukiwanie liniowe i binarne w tablicy

Podstawy algorytmiki i programowania - wykład 3 Funkcje rekurencyjne Wyszukiwanie liniowe i binarne w tablicy 1 Podstawy algorytmiki i programowania - wykład 3 Funkcje rekurencyjne Wyszukiwanie liniowe i binarne w tablicy Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania.

Bardziej szczegółowo

Opis zagadnieo 1-3. Iteracja, rekurencja i ich realizacja

Opis zagadnieo 1-3. Iteracja, rekurencja i ich realizacja Opis zagadnieo 1-3 Iteracja, rekurencja i ich realizacja Iteracja Iteracja to czynnośd powtarzania (najczęściej wielokrotnego) tej samej instrukcji (albo wielu instrukcji) w pętli. Mianem iteracji określa

Bardziej szczegółowo

Podstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD programowania Wykład: 4 Instrukcje sterujące, operatory 1 programowania w C++ Instrukcje sterujące 2 Pętla for for ( instrukcja_ini ; wyrazenie_warunkowe ; instrukcja_krok ) tresc_petli ; instrukcja_ini

Bardziej szczegółowo

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

znalezienia elementu w zbiorze, gdy w nim jest; dołączenia nowego elementu w odpowiednie miejsce, aby zbiór pozostał nadal uporządkowany. Przedstawiamy algorytmy porządkowania dowolnej liczby elementów, którymi mogą być liczby, jak również elementy o bardziej złożonej postaci (takie jak słowa i daty). Porządkowanie, nazywane również często

Bardziej szczegółowo

INFORMATYKA Z MERMIDONEM. Programowanie. Moduł 5 / Notatki

INFORMATYKA Z MERMIDONEM. Programowanie. Moduł 5 / Notatki INFORMATYKA Z MERMIDONEM Programowanie Moduł 5 / Notatki Projekt współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego. Realizator projektu: Opracowano w ramach projektu

Bardziej szczegółowo

Część XV C++ Ćwiczenie 1

Część XV C++ Ćwiczenie 1 Część XV C++ Instrukcja break przerywa działanie tylko tej pętli, w ciele której została wywołana. Jeśli więc wywołamy break w pętli zagnieżdżonej w innej pętli, zostanie przerwane działanie tylko tej

Bardziej szczegółowo

Problem skoczka szachowego i inne cykle Hamiltona na szachownicy n x n

Problem skoczka szachowego i inne cykle Hamiltona na szachownicy n x n i inne cykle Hamiltona na szachownicy n x n Uniwersytet Warszawski 15 marca 2007 Agenda 1 2 naiwne Prosty algorytm liniowy 3 Problem znany był już od bardzo dawna, jako łamigłówka logiczna. Był też stosowany

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

opracował: Patryk Besler

opracował: Patryk Besler opracował: Patryk Besler Aby poprawnie uzupełnić szachownicę potrzebna nam będzie do tego funkcja Złącz teksty. Pamiętaj o zaznaczeniu odpowiedniej komórki Aby ją wybrać należy przejść do zakładki Formuły.

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania wykład 7 Agata Półrola Wydział Matematyki i Informatyki UŁ sem. zimowy 2016/2017 Losowanie liczb całkowitych Dostępne biblioteki Najprostsze losowanie liczb całkowitych można wykonać za pomocą funkcji

Bardziej szczegółowo

8. Wektory. Przykłady Napisz program, który pobierze od użytkownika 10 liczb, a następnie wypisze je w kolejności odwrotnej niż podana.

8. Wektory. Przykłady Napisz program, który pobierze od użytkownika 10 liczb, a następnie wypisze je w kolejności odwrotnej niż podana. 8. Wektory Przykłady 8.1. Napisz program, który pobierze od użytkownika 10 liczb, a następnie wypisze je w kolejności odwrotnej niż podana. Uwaga! Kod poniżej. To zadanie można rozwiązać przy użyciu wiedzy

Bardziej szczegółowo

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

Złożoność algorytmów. Wstęp do Informatyki Złożoność algorytmów Złożoność pamięciowa - liczba i rozmiar struktur danych wykorzystywanych w algorytmie Złożoność czasowa - liczba operacji elementarnych wykonywanych w trakcie przebiegu algorytmu Złożoność

Bardziej szczegółowo

Algorytmy sortujące 1

Algorytmy sortujące 1 Algorytmy sortujące 1 Sortowanie Jeden z najczęściej występujących, rozwiązywanych i stosowanych problemów. Ułożyć elementy listy (przyjmujemy: tablicy) w rosnącym porządku Sortowanie może być oparte na

Bardziej szczegółowo

Heurystyczne metody przeszukiwania

Heurystyczne metody przeszukiwania Heurystyczne metody przeszukiwania Dariusz Banasiak Katedra Informatyki Technicznej W4/K9 Politechnika Wrocławska Pojęcie heurystyki Metody heurystyczne są jednym z ważniejszych narzędzi sztucznej inteligencji.

Bardziej szczegółowo

6. Pętle while. Przykłady

6. Pętle while. Przykłady 6. Pętle while Przykłady 6.1. Napisz program, który, bez użycia rekurencji, wypisze na ekran liczby naturalne od pewnego danego n do 0 włącznie, w kolejności malejącej, po jednej liczbie na linię. Uwaga!

Bardziej szczegółowo

Teoretyczne podstawy informatyki

Teoretyczne podstawy informatyki Teoretyczne podstawy informatyki Wykład 4: Iteracja, indukcja i rekurencja http://kiwi.if.uj.edu.pl/~erichter/dydaktyka2010/tpi-2010 Prof. dr hab. Elżbieta Richter-Wąs 1 Słowem wstępu Iteracja, indukcja

Bardziej szczegółowo

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 3

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 3 Podstawy programowania, Poniedziałek 13.05.2015, 8-10 Projekt, część 3 1. Zadanie Projekt polega na stworzeniu logicznej gry komputerowej działającej w trybie tekstowym o nazwie Minefield. 2. Cele Celem

Bardziej szczegółowo

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main. Część XVI C++ Funkcje Jeśli nasz program rozrósł się już do kilkudziesięciu linijek, warto pomyśleć o jego podziale na mniejsze części. Poznajmy więc funkcje. Szybko się przekonamy, że funkcja to bardzo

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

Wykład 5: Iteracja, indukcja i rekurencja Sortowanie

Wykład 5: Iteracja, indukcja i rekurencja Sortowanie Teoretyczne podstawy informatyki Wykład 5: Iteracja, indukcja i rekurencja Sortowanie Prof. dr hab. Elżbieta Richter-Wąs 1 30.10.2012 Słowem wstępu Iteracja, indukcja i rekurencja to podstawowe zagadnienia

Bardziej szczegółowo

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA WYŻSZA SZKOŁA IFORMATYKI STOSOWAEJ I ZARZĄDZAIA Złożoność algorytmów Złożoność pamięciowa algorytmu wynika z liczby i rozmiaru struktur danych wykorzystywanych w algorytmie. Złożoność czasowa algorytmu

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

Dynamiczne struktury danych

Dynamiczne struktury danych Dynamiczne struktury danych 391 Dynamiczne struktury danych Przez dynamiczne struktury danych rozumiemy proste i złożone struktury danych, którym pamięć jest przydzielana i zwalniana na żądanie w trakcie

Bardziej szczegółowo

Rekurencja. Przygotowała: Agnieszka Reiter

Rekurencja. Przygotowała: Agnieszka Reiter Rekurencja Przygotowała: Agnieszka Reiter Definicja Charakterystyczną cechą funkcji (procedury) rekurencyjnej jest to, że wywołuje ona samą siebie. Drugą cechą rekursji jest jej dziedzina, którą mogą być

Bardziej szczegółowo

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek Algorytmy i str ruktury danych Metody algorytmiczne Bartman Jacek jbartman@univ.rzeszow.pl Metody algorytmiczne - wprowadzenia Znamy strukturę algorytmów Trudność tkwi natomiast w podaniu metod służących

Bardziej szczegółowo

Programowanie - wykład 4

Programowanie - wykład 4 Programowanie - wykład 4 Filip Sośnicki Wydział Fizyki Uniwersytet Warszawski 20.03.2019 Przypomnienie Prosty program liczący i wyświeltający wartość silni dla wprowadzonej z klawiatury liczby: 1 # include

Bardziej szczegółowo

4. Funkcje. Przykłady

4. Funkcje. Przykłady 4. Funkcje Przykłady 4.1. Napisz funkcję kwadrat, która przyjmuje jeden argument: długość boku kwadratu i zwraca pole jego powierzchni. Używając tej funkcji napisz program, który obliczy pole powierzchni

Bardziej szczegółowo

2. Układy równań liniowych

2. Układy równań liniowych 2. Układy równań liniowych Grzegorz Kosiorowski Uniwersytet Ekonomiczny w Krakowie zima 2017/2018 rzegorz Kosiorowski (Uniwersytet Ekonomiczny w Krakowie) 2. Układy równań liniowych zima 2017/2018 1 /

Bardziej szczegółowo

. Podstawy Programowania 2. Drzewa bst - część druga. Arkadiusz Chrobot. 12 maja 2019

. Podstawy Programowania 2. Drzewa bst - część druga. Arkadiusz Chrobot. 12 maja 2019 .. Podstawy Programowania 2 Drzewa bst - część druga Arkadiusz Chrobot Zakład Informatyki 12 maja 2019 1 / 39 Plan.1 Wstęp.2 Wyszukiwanie w BST Minimalny i maksymalny klucz Wskazany klucz.3.4 Zmiany w

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

Podstawowe struktury danych

Podstawowe struktury danych Podstawowe struktury danych 1) Listy Lista to skończony ciąg elementów: q=[x 1, x 2,..., x n ]. Skrajne elementy x 1 i x n nazywamy końcami listy, a wielkość q = n długością (rozmiarem) listy. Szczególnym

Bardziej szczegółowo