Dynamiczny przydział pamięci (język C) Dynamiczne struktury danych. Sortowanie. Klasyfikacja algorytmów sortowania. Algorytmy sortowania

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

Download "Dynamiczny przydział pamięci (język C) Dynamiczne struktury danych. Sortowanie. Klasyfikacja algorytmów sortowania. Algorytmy sortowania"

Transkrypt

1 Rok akademicki 2010/2011, Wykład nr 4 2/50 Plan wykładu nr 4 Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia Rok akademicki 2010/2011 Wykład nr 4 ( ) dr inż. Jarosław Forenc Dynamiczny przydział pamięci język C: funkcje calloc(), malloc() i free() język C++: operatory new i delete Dynamiczne struktury danych stos, kolejka, lista, drzewo Sortowanie Klasyfikacja algorytmów sortowania Algorytmy sortowania sortowanie przez proste wstawianie sortowanie przez proste wybieranie sortowanie bąbelkowe Rok akademicki 2010/2011, Wykład nr 4 3/50 Rok akademicki 2010/2011, Wykład nr 4 4/50 Dynamiczny przydział pamięci (język C) Dynamiczny przydział pamięci na tablicę dwuwymiarową (macierz): przydział pamięci na tablicę zawierającą N-wierszy i M-kolumn int tab[n][m]; Dynamiczny przydział pamięci (język C) Dynamiczny przydział pamięci na tablicę dwuwymiarową (macierz): zamiast standardowego odwołania do elementów macierzy: tab[i][j] stosujemy odwołania do odpowiednich elementów wektora: *(tab+i*m+j) lub tab[i*m+j] Metoda 1 (wektor N M-elementowy): przydzielamy pamięć na wektor N M-elementowy: int *tab; tab = (int*) calloc(n*m,sizeof(int)); /*... */ free(tab); po wykorzystaniu wektora, przydzieloną pamięć zwalniamy funkcją free() tab M Przykład: tablica tab, dla której N=3, M=4 [0][0] [0][1] [0][2] [0][3] [1][0] [1][1] [1][2] [1][3] [2][0] [2][1] [2][2] [2][3] Mi odwołujemy się do elementu tab[2][2]: *(tab+2*4+2) j

2 Rok akademicki 2010/2011, Wykład nr 4 5/50 Rok akademicki 2010/2011, Wykład nr 4 6/50 Przykład nr 1 - Dynamiczny przydział pamięci (1/2) Przykład nr 1 - Dynamiczny przydział pamięci (2/2) #include <stdio.h> #include <stdlib.h> #include <time.h> int main() int i, j, n, m, *tab; printf("podaj liczbe wierszy: "); scanf("%d",&n); printf("podaj liczbe kolumn: "); scanf("%d",&m); for (i=0; i<n; i++) for (j=0; j<m; j++) printf("%4d",tab[m*i+j]); printf("\n"); free(tab); return 0; Podaj liczbe wierszy: 4 Podaj liczbe kolumn: tab = (int *) calloc(n*m,sizeof(int)); srand(time(null)); for (i=0; i<n; i++) for (j=0; j<m; j++) *(tab+m*i+j) = rand()%100; Rok akademicki 2010/2011, Wykład nr 4 7/50 Rok akademicki 2010/2011, Wykład nr 4 8/50 Dynamiczny przydział pamięci (język C) Metoda 2 (wskaźnik na tablicę wskaźników): przydzielamy pamięć na N-elementowy wektor wskaźników do typu int do kolejnych elementów tego wektora zapisujemy adresy M-elementowych wektorów liczb typu int (pamięć na wektory jest także przydzielana dynamicznie) Dynamiczny przydział pamięci (język C) Metoda 3 (wektor N M-elementowy + wektor wskaźników): przydzielamy pamięć na N-elementowy wektor wskaźników do typu int przydzielamy pamięć na N M-elementowy wektor elementów typu int, jego adres zapisujemy pod zerowym elementem wektora N-elementowego do pozostałych elementów wektora N-elementowego zapisujemy adresy pierwszych elementów kolejnych wierszy macierzy znajdujących się w wektorze N M-elementowym tab N odwołania do elementów takiej tablicy mają taką samą postać jak w przypadku zwykłych tablic: tab[i][j] M M... M

3 Rok akademicki 2010/2011, Wykład nr 4 9/50 Rok akademicki 2010/2011, Wykład nr 4 10/50 Dynamiczny przydział pamięci (język C++) Dynamiczny przydział pamięci (język C++) do dynamicznego przydziału pamięci w języku C++ stosowany jest operator new pamięć przydzielona operatorem new istnieje do zakończenia programu lub do chwili zwolnienia tej pamięci za pomocą operatora delete new typ delete ptr; operator ten alokuje obszar pamięci niezbędny dla przechowywania obiektu typu typ i zwraca wskaźnik na początek tego obszaru gdzie ptr jest wskaźnikiem wskazującym na obiekt stworzony przez new int *ptr; ptr = new int; przydział pamięci na tablicę n elementów typu typ: new typ[n] jeśli alokacja pamięci nie jest możliwa, to zwracana jest wartość NULL typ wskaźnika jest odpowiednio dopasowany do typu obiektu, więc nie są konieczne żadne konwersje wskaźnikowe wartością powyższego wyrażenia jest wskaźnik na typ (a nie na tablicę elementów typu typ) jako rozmiar tablicy n można podać dowolne wyrażenie Rok akademicki 2010/2011, Wykład nr 4 11/50 Rok akademicki 2010/2011, Wykład nr 4 12/50 Dynamiczny przydział pamięci (język C++) Przykład nr 2 - operatory new i delete (1/2) przydział pamięci na tablicę n-elementową typu int: int *ptr; ptr = new int[n]; usuwając tablicę, trzeba podać, że chodzi o tablicę, a nie o pojedynczy element: delete [] ptr; gdzie ptr jest wskaźnikiem zwróconym przez operator new podczas tworzenia dynamicznej tablicy niestety nie można w ten sposób tworzyć dynamicznych tablic wielowymiarowych #include <stdio.h> #include <stdlib.h> int main() int *tab, i, n; float suma = 0.0; printf("podaj ilosc liczb: "); scanf("%d",&n); tab = new int[n]; if (tab == NULL) printf("nie mozna przydzielic pamieci.\n"); exit(-1);

4 Rok akademicki 2010/2011, Wykład nr 4 13/50 Rok akademicki 2010/2011, Wykład nr 4 14/50 Przykład nr 2 - operatory new i delete (1/2) Przykład nr 2 - operatory new i delete (1/2) for (i=0; i<n; i++) /* wczytanie liczb */ printf("podaj liczbe nr %d: ",i+1); scanf("%d",&tab[i]); for (i=0; i<n; i++) suma = suma + tab[i]; Podaj ilosc liczb: 5 for (i=0; i<n; i++) /* wczytanie Podaj liczb liczbe */ nr 1: 1 Podaj liczbe nr 2: 2 printf("podaj liczbe nr %d: ",i+1); Podaj liczbe nr 3: 3 scanf("%d",&tab[i]); Podaj liczbe nr 4: 4 Podaj liczbe nr 5: 5 for (i=0; i<n; i++) Srednia 5 liczb wynosi suma = suma + tab[i]; printf("srednia %d liczb wynosi %f\n",n,suma/n); printf("srednia %d liczb wynosi %f\n",n,suma/n); delete [] tab; return 0; delete [] tab; return 0; Rok akademicki 2010/2011, Wykład nr 4 15/50 Rok akademicki 2010/2011, Wykład nr 4 16/50 Dynamiczne struktury danych Stos Dynamiczne struktury danych - struktury danych, którym pamięć jest przydzielana i zwalniana w trakcie wykonywania programu Podstawowe dynamicznych struktur danych: stos, kolejka lista (jednokierunkowa, dwukierunkowa, cykliczna: jedno- i dwukierunkowa) drzewo Elementy umieszczane w dynamicznych strukturach danych są najczęściej strukturami składającymi się z użytecznych danych (data) oraz z jednego lub kilku wskaźników (next) zawierających adresy innych elementów struct element typ data; struct element *next; ; data next stos (ang. stack) - struktur składająca się z elementów, z których każdy posiada tylko adres następnika dostęp do danych przechowywanych na stosie jest możliwy tylko w miejscu określanym mianem wierzchołka stosu (ang. top) wierzchołek stosu jest jedynym miejscem, do którego można dołączać lub z którego można usuwać elementy każdy składnik stosu posiada wyróżniony element (next) zawierający adres następnego elementu wskaźnik ostatniego elementu stosu wskazuje na adres pusty (NULL) podstawowe operacje na stosie to: dodanie elementu do stosu - funkcja push() zdjęcie elementu ze stosu - funkcja pop() tutaj dodajemy i usuwamy elementy data next data next data next NULL top wierzchołek

5 Rok akademicki 2010/2011, Wykład nr 4 17/50 Rok akademicki 2010/2011, Wykład nr 4 18/50 Zastosowania stosu - notacja polska Zastosowania stosu - odwrotna notacja polska notacja polska (zapis przedrostkowy, Notacja Łukasiewicza) jest to sposób zapisu wyrażeń arytmetycznych, podający najpierw operator, a następnie argumenty odwrotna notacja polska - ONP (ang. Reverse Polish Notation, RPN) jest sposobem zapisu wyrażeń arytmetycznych, w którym operator umieszczany jest po argumentach wyrażenie arytmetyczne: wyrażenie arytmetyczne: 4 / (1 + 3) (1 + 3) / 2 ma w notacji polskiej postać: ma w odwrotnej notacji polskiej postać: / / wyrażenie w notacji polskiej nie wymaga nawiasów, ponieważ przypisanie argumentów do operatorów wynika wprost z ich kolejności w zapisie odwrotna notacja polska została opracowana przez australijskiego naukowca Charlesa Hamblina notacja polska była podstawą opracowania tzw. odwrotnej notacji polskiej Rok akademicki 2010/2011, Wykład nr 4 19/50 Rok akademicki 2010/2011, Wykład nr 4 20/50 Zastosowania stosu - odwrotna notacja polska obliczenie wartości wyrażenia przy zastosowaniu ONP wymaga: zamiany notacji konwencjonalnej (nawiasowej) na ONP obliczenia wartości wyrażenia arytmetycznego zapisanego w ONP oba powyższe algorytmy wykorzystują stos Zamiana wyrażenia z notacji konwencjonalnej na ONP: zamiana wykonywana jest przy zastosowaniu algorytmu Dijkstry nazywanego stacją rozrządową czytając wyrażenie arytmetyczne od strony lewej do strony prawej operatory odkładamy na stos a liczby na wyjście Zastosowania stosu - odwrotna notacja polska Reguły zamiany wyrażenia z notacji konwencjonalnej na ONP: operator odkładamy na stos tylko wtedy, jeśli ostatnim elementem stosu jest operator o niższym priorytecie jeżeli ma on wyższy lub równy priorytet to zdejmujemy ze stosu dotąd elementy i wysyłamy na wyjście, aż ostatni operator będzie miał niższy priorytet lub stos będzie pusty jeśli kolejnym elementem jest nawias otwierający (, to odkładamy go na stos, bez względu na to co znajduje się w danym momencie na stosie i bez względu na to czy stos jest pusty powyższy nawias traktujemy jak dno stosu i odczytujemy kolejne elementy wyrażenia według standardowego algorytmu jeśli dojdziemy do nawiasu zamykającego ), to zdejmujemy kolejne operatory ze stosu i wysyłamy na wyjście, aż dojdziemy do nawiasu otwierającego, który również zdejmujemy ze stosu jeśli dojdziemy do końca wyrażenia arytmetycznego, to zdejmujemy ze stosu pozostałe operatory i wysyłamy je na wyjście

6 Rok akademicki 2010/2011, Wykład nr 4 21/50 Rok akademicki 2010/2011, Wykład nr 4 22/50 Odwrotna notacja polska - przykład wyrażenie w notacji konwencjonalnej: (2+1)*3-4*(7+4) = -35 Krok Wejście Stos Wyjście 1 ( ( NULL 2 2 ( NULL ( NULL ( NULL 1 5 ) NULL + 6 * * NULL 7 3 * NULL NULL * NULL 4 10 * * - NULL 11 ( ( * - NULL 12 7 ( * - NULL ( * - NULL ( * - NULL 4 15 ) * - NULL + 16 Koniec - NULL * 17 NULL - wyrażenie w ONP: * * - Zastosowania stosu - odwrotna notacja polska Operacje wykonywane przy obliczaniu wartości wyrażenia w ONP: pobieramy kolejny element wyrażenia jeśli elementem jest liczba to odkładamy ją na stos jeśli elementem jest operator, to pobieramy ze stosu tyle liczb, aby można było zastosować operator na tych liczbach, np. dla dodawania, odejmowania, mnożenia i dzielenia są to dwie kolejne liczby wykonujemy operację na liczbach i jej wynik odkładamy na stos jeśli dotrzemy do końca wyrażenia, to pobieramy wynik ze stosu, który jest wartością wyrażenia arytmetycznego Uwaga: jeśli nie ma jeszcze końca, to wracamy na początek algorytmu jeśli np. stos ma postać: 2 4 NULL i mamy wykonać operację dzielenia /, to operacja ta ma postać: 4 / 2, czyli do wykonania operacji argumenty brane są w odwrotnej kolejności Rok akademicki 2010/2011, Wykład nr 4 23/50 Rok akademicki 2010/2011, Wykład nr 4 24/50 Odwrotna notacja polska - przykład Kolejka równanie w ONP: * * - wynik: -35 Krok Wejście Stos Działanie NULL NULL NULL NULL 5 * 9 NULL 3 * NULL NULL NULL NULL * 44 9 NULL 4 * NULL Koniec NULL wynik: -35 kolejka (ang. queue) - składa się z liniowo uporządkowanych elementów elementy dołączane są tylko na końcu kolejki (wkaźnik tail) elementy usuwane są tylko z początku kolejki (wskaźnik head) powiązanie między elementami kolejki jest takie samo, jak w stosie kolejka nazywana jest stosem FIFO (ang. First In First Out)

7 Rok akademicki 2010/2011, Wykład nr 4 25/50 Rok akademicki 2010/2011, Wykład nr 4 26/50 Lista jednokierunkowa Lista dwukierunkowa organizacja listy jednokierunkowej podobna jest do organizacji stosu i kolejki w liście dwukierunkowej każdy węzeł posiada adres następnika, jak i poprzednika dla każdego składnika (poza ostatnim) jest określony następny składnik (lub poprzedni - zależnie od implementacji) w strukturze tego typu wygodne jest przechodzenie pomiędzy elementami w obu kierunkach (od początku do końca i odwrotnie) zapamiętywany jest wskaźnik tylko na pierwszy element listy (first) lub wskaźniki na pierwszy (first) i ostatni element listy (last) elementy listy można dołączać/usuwać w dowolnym miejscu listy Rok akademicki 2010/2011, Wykład nr 4 27/50 Rok akademicki 2010/2011, Wykład nr 4 28/50 Lista cykliczna Drzewo lista cykliczna powstaje z listy jednokierunkowej lub dwukierunkowej, poprzez połączenie ostatniego element z pierwszym Jednokierunkowa: Dwukierunkowa: drzewo - najbardziej ogólna dynamiczna struktura danych, może być reprezentowane graficznie na różne sposoby na górze znajduje się korzeń drzewa (a) skojarzone z korzeniem poddrzewa połączone są z korzeniem liniami zwanymi gałęziami drzewa potomkiem węzła w nazywamy każdy, różny od w, węzeł należący do drzewa, w którym w jest korzeniem węzeł, który nie ma potomków, to liść drzewa

8 Rok akademicki 2010/2011, Wykład nr 4 29/50 Rok akademicki 2010/2011, Wykład nr 4 30/50 Drzewo binarne Binarne drzewo wyszukiwawcze drzewo binarne jest szczególnym przypadkiem ogólnej struktury zwanej drzewem każdy wierzchołek drzewa ma co najwyżej dwóch potomków jest to drzewo binarne, w którym dla każdego węzła w i : wszystkie klucze w lewym poddrzewie węzła w i są mniejsze od klucza w węźle w i wszystkie klucze w prawym poddrzewie węzła w i są większe od klucza w węźle w i największą zaletą takiej struktury jest szybkość wyszukiwania informacji Rok akademicki 2010/2011, Wykład nr 4 31/50 Rok akademicki 2010/2011, Wykład nr 4 32/50 Sortowanie Sortowanie sortowanie polega na uporządkowaniu zbioru danych względem pewnych cech charakterystycznych każdego elementu tego zbioru najczęstszym przypadkiem jest sortowanie względem wartości każdego elementu, np. sortowanie liczb, sortowanie słów w przypadku liczb, sortowanie polega na znalezieniu kolejności liczb zgodnej z relacją lub w przypadku słów (nazw) sortowanie polega na ustawieniu ich w porządku słownikowym (lub alfabetycznym) zwanym także leksykograficznym Przykład: tablica nieposortowana: Przykład: tablica nieposortowana: tablice posortowane: tablica posortowana zgodnie z relacją (od najmniejszej do największej liczby): tablica posortowana zgodnie z relacją (od największej do najmniejszej liczby): porównanie nazw może być sprowadzone do porównywania ich liczbowych kodów

9 Rok akademicki 2010/2011, Wykład nr 4 33/50 Rok akademicki 2010/2011, Wykład nr 4 34/50 Sortowanie w praktyce sortowanie sprowadza się do porządkowanie danych na podstawie porównania - element stosowany w porównaniu to klucz Przykład: tablica nieposortowana (imię, nazwisko, wiek): Sortowanie Po co stosować sortowanie? posortowane elementy można szybciej zlokalizować posortowane elementy można przedstawić w czytelniejszy sposób kolejność alfabetyczna nazwisk przedstawienie cen produktów od najniższej do najwyższej tablica posortowana (klucz - nazwisko): tablica posortowana (klucz - wiek): Klasyfikacje algorytmów sortowania złożoność obliczeniowa algorytmu - zależność liczby wykonywanych operacji w stosunku do liczebności sortowanego zbioru n oceniając wydajność algorytmu często analizuje się przypadki: najgorszy (złożoność pesymistyczna) najlepszy średni (złożoność średnia) Rok akademicki 2010/2011, Wykład nr 4 35/50 Rok akademicki 2010/2011, Wykład nr 4 36/50 Notacja O notacja O stosowana jest do porównywania wydajności algorytmów, wyraża złożoność matematyczną algorytmu w notacji tej po literze O występuje wyrażenie w nawiasach zawierające literę n oznaczającą liczbę elementów, na której działa algorytm do wyznaczenia złożoności obliczeniowej algorytmu przyjmuje się liczbę wykonywanych w nim elementarnych operacji, np. porównywanie Przykład: Notacja O porównanie najczęściej występujących złożoności: Elementy O(log n) O(n) O(n log n) O(n 2 ) O(2 n ) , , , O(n) O(n 2 ) - złożoność algorytmu jest prostą funkcją liczby elementów - (jeśli sortowanie 1000 elementów zajmuje 1 s, to sortowanie - (2000 elementów zajmie 2 s) - czas konieczny do wykonania algorytmu rośnie wraz z kwadratem liczby elementów O(log n) - złożoność logarytmiczna O(n) - złożoność liniowa O(n log n) - złożoność liniowo-logarytmiczna O(n 2 ) - złożoność kwadratowa O(2 n ) - złożoność wykładnicza

10 Rok akademicki 2010/2011, Wykład nr 4 37/50 Rok akademicki 2010/2011, Wykład nr 4 38/50 Klasyfikacje algorytmów sortowania Złożoność pamięciowa: Klasyfikacje algorytmów sortowania Stabilność algorytmu: jest to wielkość zasobów zajmowanych przez algorytm w algorytmach wykorzystujących technikę sortowania w miejscu wielkość zbioru danych podczas sortowania nie zmienia się (lub jest tylko nieco większa) algorytmy nie wykorzystujące techniki sortowania w miejscu wymagają podczas sortowania znaczniej więcej miejsca w pamięci komputera do przechowywania danych Sortowanie zewnętrzne i wewnętrzne: algorytm jest nazywany stabilnym, jeśli podczas sortowania zachowuje kolejność występowania elementów o tym samym kluczu, np. tablica nieposortowana (imię, nazwisko, wiek): tablica posortowana algorytmem stabilnym (klucz - wiek): sortowanie zewnętrzne - jest stosowane, gdy nie jest możliwe jednoczesne umieszczenie wszystkich elementów zbioru sortowanego w pamięci komputera (np. sortowanie plików) tablica posortowana algorytmem niestabilnym (klucz - wiek): sortowanie wewnętrzne - odbywa się w pamięci komputera Rok akademicki 2010/2011, Wykład nr 4 39/50 Rok akademicki 2010/2011, Wykład nr 4 40/50 Sortowanie przez proste wstawianie Sortowanie przez proste wstawianie sortowanie przez proste wstawianie (ang. insertion sort) - polega na pobieraniu kolejnego elementu z danych wejściowych i wstawianiu go na odpowiednie miejsce w wynikach Algorytm metody: elementy są umownie podzielone na ciąg wynikowy: a 1,a 2,,a i-1 i ciąg źródłowy: a i,a i+1,,a n w i-tym kroku pobieramy element z ciągu źródłowego a i porównujemy ten element z kolejnymi elementami z ciągu wynikowego: a i-1,a i-2, porównywanie kończymy, gdy porównywany element jest mniejszy lub równy elementowi a i lub dojdziemy do początku ciągu wynikowego wstawiamy element a i w odpowiednim miejscu ciągu wynikowego Przykład: Funkcja w języku C: void InsertionSort(int tab[]) int i,j,tmp; for (i=1; i<n; i++) j=i; tmp=tab[i]; while (tab[j-1]>tmp && j>0) tab[j]=tab[j-1]; j--; tab[j]=tmp;

11 Rok akademicki 2010/2011, Wykład nr 4 41/50 Rok akademicki 2010/2011, Wykład nr 4 42/50 Sortowanie przez proste wstawianie Uwagi: złożoność algorytmu: O(n 2 ) w najgorszym przypadku każdy element powoduje jednokrotne przestawienie wszystkich poprzedzających go elementów, a wtedy liczba porównań wynosi: n (n-1) liczba porównań zależna jest od początkowego rozmieszczenia elementów w tablicy + wydajny dla danych wstępnie posortowanych + wydajny dla zbiorów o niewielkiej liczebności + małe zasoby zajmowane podczas pracy (sortowanie w miejscu) + stabilny - zachowuje oryginalną kolejność takich samych elementów + prosty w implementacji Sortowanie przez proste wybieranie sortowanie przez proste wybieranie (ang. selection sort) - polega na wyszukaniu elementu, który ma się znaleźć na zadanej pozycji i na zamianie miejscami z tym elementem, który jest tam obecnie Algorytm metody: zaczynając od elementu pierwszego, szukamy w tablicy elementu o najmniejszej wartości i zamieniamy go miejscami z pierwszym elementem następnie szukamy elementu najmniejszego zaczynając od drugiego elementu i zamieniamy go z drugim elementem powtarzamy powyższe operacje do momentu, aż w tablicy pozostanie tylko jeden element mała efektywność dla normalnej i dużej ilości danych Rok akademicki 2010/2011, Wykład nr 4 43/50 Rok akademicki 2010/2011, Wykład nr 4 44/50 Sortowanie przez proste wybieranie Przykład: Funkcja w języku C: void SelectionSort(int tab[]) int i,j,k,tmp; for (i=0;i<n-1;i++) k=i; for (j=i+1; j<n; j++) if (tab[k]>=tab[j]) k = j; tmp = tab[i]; tab[i] = tab[k]; tab[k] = tmp; Sortowanie przez proste wybieranie Uwagi: złożoność algorytmu: O(n 2 ) + szybki w sortowaniu niewielkich tablic + małe zasoby zajmowane podczas pracy (sortowanie w miejscu) + prosty w implementacji liczba porównań elementów jest niezależna od początkowego rozmieszczenia elementów w tablicy (takie zachowanie algorytmu nazywane jest neutralnym lub niewrażliwym) w algorytmie może zdarzyć się, że wykonywana jest zamiana tego samego elementu ze sobą (sytuacja taka występuje, gdy najmniejszy element jest na pierwszej pozycji)

12 Rok akademicki 2010/2011, Wykład nr 4 45/50 Rok akademicki 2010/2011, Wykład nr 4 46/50 Sortowanie bąbelkowe Sortowanie bąbelkowe sortowanie bąbelkowe (ang. bubble sort), nazywane jest także: sortowaniem pęcherzykowym sortowaniem przez prostą zamianę (ang. straight exchange) metoda ta polega na porównywaniu dwóch kolejnych elementów i zamianie ich kolejności jeśli jest to konieczne nazwa metody wzięła się stąd, że kolejne porównania powodują wypychanie kolejnego największego elementu na koniec ( wypłynięcie największego bąbelka ) Algorytm metody: porównujemy pierwszy i drugi element tabeli i jeśli trzeba to zamieniamy je miejscami, następnie porównujemy drugi i trzeci element i jeśli jest to konieczne, to zamieniamy je miejscami, itd. powyższe operacje wykonujemy, aż dojdziemy do końca tabeli następnie ponownie rozpoczynamy porównywanie elementów od początku tabeli (element pierwszy z drugim, drugi z trzecim, itd. aż dojdziemy do końca tabeli) sortowanie kończymy, gdy podczas kolejnego przejścia przez całą tabelę nie wykonana zostanie żadna zamiana elementów Rok akademicki 2010/2011, Wykład nr 4 47/50 Rok akademicki 2010/2011, Wykład nr 4 48/50 Sortowanie bąbelkowe - przykład Sortowanie bąbelkowe Funkcja w języku C: void BubbleSort(int tab[]) int i,j,tmp,koniec; do koniec=0; for (i=0;i<n-1;i++) if (tab[i]>tab[i+1]) tmp=tab[i]; tab[i]=tab[i+1]; tab[i+1]=tmp; koniec=1; while (koniec);

13 Rok akademicki 2010/2011, Wykład nr 4 49/50 Rok akademicki 2010/2011, Wykład nr 4 50/50 Sortowanie bąbelkowe Koniec wykładu nr 4 Uwagi: złożoność algorytmu: O(n 2 ) + prosta realizacja + wysoka efektywność użycia pamięci (sortowanie w miejscu) + stabilny algorytm - zachowuje oryginalną kolejność takich samych elementów Dziękuję za uwagę! mała efektywność

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy) Rok akademicki 2012/2013, Wykład nr 2 2/25 Plan wykładu nr 2 Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia Rok akademicki 2012/2013

Bardziej szczegółowo

Podstawy informatyki 2. Podstawy informatyki 2. Wykład nr 2 ( ) Plan wykładu nr 2. Politechnika Białostocka. - Wydział Elektryczny

Podstawy informatyki 2. Podstawy informatyki 2. Wykład nr 2 ( ) Plan wykładu nr 2. Politechnika Białostocka. - Wydział Elektryczny Wykład nr 2 2/6 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr II, studia stacjonarne Rok akademicki 2006/2007 Plan wykładu nr 2 Argumenty funkcji main Dynamiczne struktury danych

Bardziej szczegółowo

Podstawy informatyki 2

Podstawy informatyki 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr II, studia stacjonarne Rok akademicki 2006/2007 Wykład nr 2 (07.03.2007) Wykład nr 2 2/46 Plan wykładu nr 2 Argumenty funkcji main

Bardziej szczegółowo

Informatyka 2. Wykład nr 5 ( ) Plan wykładu nr 5. Politechnika Białostocka. - Wydział Elektryczny. Odwrotna notacja polska.

Informatyka 2. Wykład nr 5 ( ) Plan wykładu nr 5. Politechnika Białostocka. - Wydział Elektryczny. Odwrotna notacja polska. Rok akademicki 008/009, Wykład nr 5 /6 Plan wykładu nr 5 Informatyka Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia (zaoczne) Rok akademicki

Bardziej szczegółowo

Informatyka 2. Wykład nr 5 ( ) Politechnika Białostocka. - Wydział Elektryczny. dr inŝ. Jarosław Forenc

Informatyka 2. Wykład nr 5 ( ) Politechnika Białostocka. - Wydział Elektryczny. dr inŝ. Jarosław Forenc Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia (zaoczne) Rok akademicki 2008/2009 Wykład nr 5 (22.11.2008) Rok akademicki 2008/2009,

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

dr inż. Paweł Myszkowski Wykład nr 11 ( )

dr inż. Paweł Myszkowski Wykład nr 11 ( ) dr inż. Paweł Myszkowski Politechnika Białostocka Wydział Elektryczny Elektronika i Telekomunikacja, semestr II, studia stacjonarne I stopnia Rok akademicki 2015/2016 Wykład nr 11 (11.05.2016) Plan prezentacji:

Bardziej szczegółowo

Algorytmy i Struktury Danych

Algorytmy i Struktury Danych Algorytmy i Struktury Danych Kopce Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 11 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 11 1 / 69 Plan wykładu

Bardziej szczegółowo

Podstawy Informatyki. Wykład 6. Struktury danych

Podstawy Informatyki. Wykład 6. Struktury danych Podstawy Informatyki Wykład 6 Struktury danych Stałe i zmienne Podstawowymi obiektami występującymi w programie są stałe i zmienne. Ich znaczenie jest takie samo jak w matematyce. Stałe i zmienne muszą

Bardziej szczegółowo

Spis treści WSKAŹNIKI. DYNAMICZNY PRZYDZIAŁ PAMIĘCI W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu

Spis treści WSKAŹNIKI. DYNAMICZNY PRZYDZIAŁ PAMIĘCI W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu Politechnika Białostocka Wydział Elektryczny Katedra Elektrotechniki Teoretycznej i Metrologii Instrukcja do pracowni specjalistycznej z przedmiotu Informatyka 2 Kod przedmiotu: ES1C300 016 (studia stacjonarne)

Bardziej szczegółowo

Algorytmy i. Wykład 3: Stosy, kolejki i listy. Dr inż. Paweł Kasprowski. FIFO First In First Out (kolejka) LIFO Last In First Out (stos)

Algorytmy i. Wykład 3: Stosy, kolejki i listy. Dr inż. Paweł Kasprowski. FIFO First In First Out (kolejka) LIFO Last In First Out (stos) Algorytmy i struktury danych Wykład 3: Stosy, kolejki i listy Dr inż. Paweł Kasprowski pawel@kasprowski.pl Kolejki FIFO First In First Out (kolejka) LIFO Last In First Out (stos) Stos (stack) Dostęp jedynie

Bardziej szczegółowo

Struktury danych: stos, kolejka, lista, drzewo

Struktury danych: stos, kolejka, lista, drzewo Struktury danych: stos, kolejka, lista, drzewo Wykład: dane w strukturze, funkcje i rodzaje struktur, LIFO, last in first out, kolejka FIFO, first in first out, push, pop, size, empty, głowa, ogon, implementacja

Bardziej szczegółowo

Notacja RPN. 28 kwietnia wyliczanie i transformacja wyrażeń. Opis został przygotowany przez: Bogdana Kreczmera.

Notacja RPN. 28 kwietnia wyliczanie i transformacja wyrażeń. Opis został przygotowany przez: Bogdana Kreczmera. 1 wyliczanie i transformacja wyrażeń (wersja skrócona) Opis został przygotowany przez: Bogdana Kreczmera 28 kwietnia 2002 Strona 1 z 68 Zakład Podstaw Cybernetyki i Robotyki - trochę historii...............

Bardziej szczegółowo

int tab[5]; tab[1]; ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu macierz [ ] - dwuargumentowy operator indeksowania

int tab[5]; tab[1]; ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu macierz [ ] - dwuargumentowy operator indeksowania Rok akademicki 2013/2014, Pracownia nr 10 2/20 Informatyka 1 Tablica elementów ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu Politechnika Białostocka - Wydział Elektryczny Elektrotechnika,

Bardziej szczegółowo

Spis treści JĘZYK C - WSKAŹNIKI, DYNAMICZNY PRZYDZIAŁ PAMIĘCI. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu

Spis treści JĘZYK C - WSKAŹNIKI, DYNAMICZNY PRZYDZIAŁ PAMIĘCI. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu Politechnika Białostocka Wydział Elektryczny Katedra Elektrotechniki Teoretycznej i Metrologii Instrukcja do pracowni specjalistycznej z przedmiotu Informatyka 2 Kod przedmiotu: ES1D300 017 (studia stacjonarne)

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania Wstęp do programowania Stosy, kolejki, drzewa Paweł Daniluk Wydział Fizyki Jesień 2013 P. Daniluk(Wydział Fizyki) WP w. VII Jesień 2013 1 / 25 Listy Lista jest uporządkowanym zbiorem elementów. W Pythonie

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

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

Podstawy informatyki. Wykład nr 1 ( ) Politechnika Białostocka. - Wydział Elektryczny. dr inŝ. Jarosław Forenc

Podstawy informatyki. Wykład nr 1 ( ) Politechnika Białostocka. - Wydział Elektryczny. dr inŝ. Jarosław Forenc Podstawy informatyki Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr II, studia niestacjonarne Rok akademicki 2006/2007 Wykład nr 1 (09.03.2007) Wykład nr 1 2/34 Dane podstawowe

Bardziej szczegółowo

Lab 9 Podstawy Programowania

Lab 9 Podstawy Programowania Lab 9 Podstawy Programowania (Kaja.Gutowska@cs.put.poznan.pl) Wszystkie kody/fragmenty kodów dostępne w osobnym pliku.txt. Materiały pomocnicze: Wskaźnik to specjalny rodzaj zmiennej, w której zapisany

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

Wykład 3. Złożoność i realizowalność algorytmów Elementarne struktury danych: stosy, kolejki, listy

Wykład 3. Złożoność i realizowalność algorytmów Elementarne struktury danych: stosy, kolejki, listy Wykład 3 Złożoność i realizowalność algorytmów Elementarne struktury danych: stosy, kolejki, listy Dynamiczne struktury danych Lista jest to liniowo uporządkowany zbiór elementów, z których dowolny element

Bardziej szczegółowo

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. 1. Rodzaje pamięci używanej w programach Pamięć komputera, dostępna dla programu,

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

// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.

// Liczy srednie w wierszach i kolumnach tablicy dwuwymiarowej // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib. Wykład 10 Przykłady różnych funkcji (cd) - przetwarzanie tablicy tablic (tablicy "dwuwymiarowej") - sortowanie przez "selekcję" Dynamiczna alokacja pamięci 1 // Liczy srednie w wierszach i kolumnach tablicy

Bardziej szczegółowo

WYKŁAD 10. Zmienne o złożonej budowie Statyczne i dynamiczne struktury danych: lista, kolejka, stos, drzewo. Programy: c5_1.c, c5_2, c5_3, c5_4, c5_5

WYKŁAD 10. Zmienne o złożonej budowie Statyczne i dynamiczne struktury danych: lista, kolejka, stos, drzewo. Programy: c5_1.c, c5_2, c5_3, c5_4, c5_5 WYKŁAD 10 Zmienne o złożonej budowie Statyczne i dynamiczne struktury danych: lista, kolejka, stos, drzewo Programy: c5_1.c, c5_2, c5_3, c5_4, c5_5 Tomasz Zieliński ZMIENNE O ZŁOŻONEJ BUDOWIE (1) Zmienne

Bardziej szczegółowo

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17 Wskaźniki Przemysław Gawroński D-10, p. 234 Wykład 2 8 marca 2019 (Wykład 2) Wskaźniki 8 marca 2019 1 / 17 Outline 1 Wskaźniki 2 Tablice a wskaźniki 3 Dynamiczna alokacja pamięci (Wykład 2) Wskaźniki 8

Bardziej szczegółowo

Podstawy Informatyki. Metody dostępu do danych

Podstawy Informatyki. Metody dostępu do danych Podstawy Informatyki c.d. alina.momot@polsl.pl http://zti.polsl.pl/amomot/pi Plan wykładu 1 Bazy danych Struktury danych Średni czas odszukania rekordu Drzewa binarne w pamięci dyskowej 2 Sformułowanie

Bardziej szczegółowo

if (warunek) instrukcja1; if (warunek) instrukcja1; else instrukcja2; a > b - a większe od b if (warunek) instrukcja1; a <= b - a mniejsze lub równe b

if (warunek) instrukcja1; if (warunek) instrukcja1; else instrukcja2; a > b - a większe od b if (warunek) instrukcja1; a <= b - a mniejsze lub równe b Rok akademicki 2012/2013, Pracownia nr 4 2/17 Informatyka 1 Instrukcja warunkowa if prawda instrukcja1 warunek fałsz Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr II, studia stacjonarne

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

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom). Zarządzanie pamięcią Pamięć: stos i sterta Statyczny i dynamiczny przydział pamięci Funkcje ANSI C do zarządzania pamięcią Przykłady: Dynamiczna tablica jednowymiarowa Dynamiczna tablica dwuwymiarowa 154

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

Sortowanie. Bartman Jacek Algorytmy i struktury

Sortowanie. Bartman Jacek Algorytmy i struktury Sortowanie Bartman Jacek jbartman@univ.rzeszow.pl Algorytmy i struktury danych Sortowanie przez proste wstawianie przykład 41 56 17 39 88 24 03 72 41 56 17 39 88 24 03 72 17 41 56 39 88 24 03 72 17 39

Bardziej szczegółowo

Wykład 2. Drzewa zbalansowane AVL i 2-3-4

Wykład 2. Drzewa zbalansowane AVL i 2-3-4 Wykład Drzewa zbalansowane AVL i -3-4 Drzewa AVL Wprowadzenie Drzewa AVL Definicja drzewa AVL Operacje wstawiania i usuwania Złożoność obliczeniowa Drzewa -3-4 Definicja drzewa -3-4 Operacje wstawiania

Bardziej szczegółowo

Drzewa BST i AVL. Drzewa poszukiwań binarnych (BST)

Drzewa BST i AVL. Drzewa poszukiwań binarnych (BST) Drzewa ST i VL Drzewa poszukiwań binarnych (ST) Drzewo ST to dynamiczna struktura danych (w formie drzewa binarnego), która ma tą właściwość, że dla każdego elementu wszystkie elementy w jego prawym poddrzewie

Bardziej szczegółowo

Sortowanie bąbelkowe

Sortowanie bąbelkowe 1/98 Sortowanie bąbelkowe (Bubble sort) prosty i nieefektywny algorytm sortowania wielokrotnie przeglądamy listę elementów, porównując dwa sąsiadujące i zamieniając je miejscami, jeśli znajdują się w złym

Bardziej szczegółowo

Drzewa wyszukiwań binarnych (BST)

Drzewa wyszukiwań binarnych (BST) Drzewa wyszukiwań binarnych (BST) Krzysztof Grządziel 12 czerwca 2007 roku 1 Drzewa Binarne Drzewa wyszukiwań binarnych, w skrócie BST (od ang. binary search trees), to szczególny przypadek drzew binarnych.

Bardziej szczegółowo

Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska

Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska 1 Przykład wyliczania wyrażeń arytmetycznych Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Copyright

Bardziej szczegółowo

Spis treści WSKAŹNIKI. DYNAMICZNY PRZYDZIAŁ PAMIĘCI W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu

Spis treści WSKAŹNIKI. DYNAMICZNY PRZYDZIAŁ PAMIĘCI W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu Politechnika Białostocka Wydział Elektryczny Katedra Elektrotechniki Teoretycznej i Metrologii Instrukcja do pracowni specjalistycznej z przedmiotu Informatyka 2 Kod przedmiotu: ES1C300 016 (studia stacjonarne)

Bardziej szczegółowo

Wysokość drzewa Głębokość węzła

Wysokość drzewa Głębokość węzła Drzewa Drzewa Drzewo (ang. tree) zbiór węzłów powiązanych wskaźnikami, spójny i bez cykli. Drzewo posiada wyróżniony węzeł początkowy nazywany korzeniem (ang. root). Drzewo ukorzenione jest strukturą hierarchiczną.

Bardziej szczegółowo

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

Kolejka priorytetowa. Często rozważa się kolejki priorytetowe, w których poszukuje się elementu minimalnego zamiast maksymalnego. Kolejki Kolejka priorytetowa Kolejka priorytetowa (ang. priority queue) to struktura danych pozwalająca efektywnie realizować następujące operacje na zbiorze dynamicznym, którego elementy pochodzą z określonego

Bardziej szczegółowo

Wykład X. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2016 Janusz Słupik

Wykład X. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2016 Janusz Słupik Wykład X Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2016 c Copyright 2016 Janusz Słupik Drzewa binarne Drzewa binarne Drzewo binarne - to drzewo (graf spójny bez cykli) z korzeniem (wyróżnionym

Bardziej szczegółowo

dr inŝ. Jarosław Forenc

dr inŝ. Jarosław Forenc Rok akademicki 2009/2010, Wykład nr 8 2/19 Plan wykładu nr 8 Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia stacjonarne I stopnia Rok akademicki 2009/2010

Bardziej szczegółowo

dr inż. Jarosław Forenc

dr inż. Jarosław Forenc Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia stacjonarne I stopnia Rok akademicki 2010/2011 Wykład nr 7 (24.01.2011) dr inż. Jarosław Forenc Rok akademicki

Bardziej szczegółowo

Wykład 5 Wybrane zagadnienia programowania w C++ (c.d.)

Wykład 5 Wybrane zagadnienia programowania w C++ (c.d.) Wykład 5 Wybrane zagadnienia programowania w C++ (c.d.) Kontenery - - wektor vector - - lista list - - kolejka queue - - stos stack Kontener asocjacyjny map 2016-01-08 Bazy danych-1 W5 1 Kontenery W programowaniu

Bardziej szczegółowo

Podstawy informatyki 2. Podstawy informatyki 2. Wykład nr 1 ( ) Dane podstawowe. Politechnika Białostocka. - Wydział Elektryczny

Podstawy informatyki 2. Podstawy informatyki 2. Wykład nr 1 ( ) Dane podstawowe. Politechnika Białostocka. - Wydział Elektryczny Wykład nr 1 2/42 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr II, studia stacjonarne Rok akademicki 2006/2007 Wykład nr 1 (28.02.2007) Dane podstawowe dr inŝ. Jarosław aw Forenc

Bardziej szczegółowo

ALGORYTMY I STRUKTURY DANYCH

ALGORYTMY I STRUKTURY DANYCH ALGORYTMY I STRUKTURY DANYCH Temat 4: Realizacje dynamicznych struktur danych. Wykładowca: dr inż. Zbigniew TARAPATA e-mail: Zbigniew.Tarapata@isi.wat.edu.pl http://www.tarapata.strefa.pl/p_algorytmy_i_struktury_danych/

Bardziej szczegółowo

ZASADY PROGRAMOWANIA KOMPUTERÓW

ZASADY PROGRAMOWANIA KOMPUTERÓW POLITECHNIKA WARSZAWSKA Instytut Automatyki i i Robotyki ZASADY PROGRAMOWANIA KOMPUTERÓW Język Język programowania: C/C++ Środowisko programistyczne: C++Builder 6 Wykład 9.. Wskaźniki i i zmienne dynamiczne.

Bardziej szczegółowo

Listy, kolejki, stosy

Listy, kolejki, stosy Listy, kolejki, stosy abc Lista O Struktura danych składa się z węzłów, gdzie mamy informacje (dane) i wskaźniki do następnych węzłów. Zajmuje tyle miejsca w pamięci ile mamy węzłów O Gdzie można wykorzystać:

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

dr inż. Jarosław Forenc

dr inż. Jarosław Forenc Informatyka Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr II, studia stacjonarne I stopnia Rok akademicki 8/9 Wykład nr 4 (.3.9) Rok akademicki 8/9, Wykład nr 4 /33 Plan wykładu

Bardziej szczegółowo

Struktury Danych i Złożoność Obliczeniowa

Struktury Danych i Złożoność Obliczeniowa Struktury Danych i Złożoność Obliczeniowa Zajęcia 2 Algorytmy wyszukiwania, sortowania i selekcji Sortowanie bąbelkowe Jedna z prostszych metod sortowania, sortowanie w miejscu? Sortowanie bąbelkowe Pierwsze

Bardziej szczegółowo

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

Algorytmy i. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski Algorytmy i struktury danych Wykład 5: Drzewa Dr inż. Paweł Kasprowski pawel@kasprowski.pl Drzewa Struktury przechowywania danych podobne do list ale z innymi zasadami wskazywania następników Szczególny

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

Programowanie i struktury danych

Programowanie i struktury danych Programowanie i struktury danych 1 / 30 STL Standard Template Library, STL (ang. = Standardowa Biblioteka Wzorców) biblioteka C++ zawierająca szablony (wzorce), które umożliwiają wielokrotne użycie. Główne

Bardziej szczegółowo

Złożoność obliczeniowa algorytmu ilość zasobów komputera jakiej potrzebuje dany algorytm. Pojęcie to

Złożoność obliczeniowa algorytmu ilość zasobów komputera jakiej potrzebuje dany algorytm. Pojęcie to Złożoność obliczeniowa algorytmu ilość zasobów komputera jakiej potrzebuje dany algorytm. Pojęcie to wprowadzili J. Hartmanis i R. Stearns. Najczęściej przez zasób rozumie się czas oraz pamięć dlatego

Bardziej szczegółowo

Algorytmy i Struktury Danych. Co dziś? Drzewo decyzyjne. Wykład IV Sortowania cd. Elementarne struktury danych

Algorytmy i Struktury Danych. Co dziś? Drzewo decyzyjne. Wykład IV Sortowania cd. Elementarne struktury danych Algorytmy i Struktury Danych Wykład IV Sortowania cd. Elementarne struktury danych 1 Co dziś? Dolna granica sortowań Mediany i statystyki pozycyjne Warstwa implementacji Warstwa abstrakcji #tablice #listy

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

prowadzący dr ADRIAN HORZYK /~horzyk e-mail: horzyk@agh tel.: 012-617 Konsultacje paw. D-13/325

prowadzący dr ADRIAN HORZYK /~horzyk e-mail: horzyk@agh tel.: 012-617 Konsultacje paw. D-13/325 PODSTAWY INFORMATYKI WYKŁAD 8. prowadzący dr ADRIAN HORZYK http://home home.agh.edu.pl/~ /~horzyk e-mail: horzyk@agh agh.edu.pl tel.: 012-617 617-4319 Konsultacje paw. D-13/325 DRZEWA Drzewa to rodzaj

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

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

Drzewo. Drzewo uporządkowane ma ponumerowanych (oznaczonych) następników. Drzewo uporządkowane składa się z węzłów, które zawierają następujące pola:

Drzewo. Drzewo uporządkowane ma ponumerowanych (oznaczonych) następników. Drzewo uporządkowane składa się z węzłów, które zawierają następujące pola: Drzewa Drzewa Drzewo (ang. tree) zbiór węzłów powiązanych wskaźnikami, spójny i bez cykli. Drzewo posiada wyróżniony węzeł początkowy nazywany korzeniem (ang. root). Drzewo ukorzenione jest strukturą hierarchiczną.

Bardziej szczegółowo

dr inż. Jarosław Forenc

dr inż. Jarosław Forenc Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia stacjonarne I stopnia Rok akademicki 2009/2010 Wykład nr 8 (29.01.2009) dr inż. Jarosław Forenc Rok akademicki

Bardziej szczegółowo

Algorytmy i struktury danych

Algorytmy i struktury danych Algorytmy i struktury danych ĆWICZENIE 2 - WYBRANE ZŁOŻONE STRUKTURY DANYCH - (12.3.212) Prowadząca: dr hab. inż. Małgorzata Sterna Informatyka i3, poniedziałek godz. 11:45 Adam Matuszewski, nr 1655 Oliver

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

Algorytmy i struktury danych. wykład 5

Algorytmy i struktury danych. wykład 5 Plan wykładu: Wskaźniki. : listy, drzewa, kopce. Wskaźniki - wskaźniki Wskaźnik jest to liczba lub symbol który w ogólności wskazuje adres komórki pamięci. W językach wysokiego poziomu wskaźniki mogą również

Bardziej szczegółowo

INFORMATYKA. Podstawy programowania w języku C. (Wykład) Copyright (C) 2005 by Sergiusz Sienkowski IME Zielona Góra

INFORMATYKA. Podstawy programowania w języku C. (Wykład) Copyright (C) 2005 by Sergiusz Sienkowski IME Zielona Góra INFORMATYKA Podstawy programowania w języku C (Wykład) Copyright (C) 2005 by Sergiusz Sienkowski IME Zielona Góra INFORMATYKA Temat: Struktury dynamiczne Wykład 7 Struktury dynamiczne lista jednokierunkowa,

Bardziej szczegółowo

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

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 4. Karol Tarnowski A-1 p. Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy Wykład 4 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Tablice Wskaźniki Adresy pamięci Operator adresu

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

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

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2014/2015. Drzewa BST c.d., równoważenie drzew, kopce. POLITECHNIKA WARSZAWSKA Instytut Automatyki i Robotyki ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 204/205 Język programowania: Środowisko programistyczne: C/C++ Qt Wykład 2 : Drzewa BST c.d., równoważenie

Bardziej szczegółowo

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1 Tablice wielowymiarowe C umożliwia definiowanie tablic wielowymiarowych najczęściej stosowane

Bardziej szczegółowo

Język C zajęcia nr 11. Funkcje

Język C zajęcia nr 11. Funkcje Język C zajęcia nr 11 Funkcje W języku C idea podprogramów realizowana jest wyłącznie poprzez definiowanie i wywołanie funkcji. Każda funkcja musi być przed wywołaniem zadeklarowana. Deklaracja funkcji

Bardziej szczegółowo

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4 Dr inż. Dariusz JĘDRZEJCZYK Wskaźniki Dynamiczna alokacja pamięci Przykłady 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 2 Wskaźnik to

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

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI Wprowadzenie do środowiska Matlab 1. Podstawowe informacje Przedstawione poniżej informacje maja wprowadzić i zapoznać ze środowiskiem

Bardziej szczegółowo

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

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

Wskaźniki. Informatyka

Wskaźniki. Informatyka Materiały Wskaźniki Informatyka Wskaźnik z punktu widzenia programisty jest grupą komórek pamięci (rozmiar wskaźnika zależy od architektury procesora, najczęściej są to dwa lub cztery bajty ), które mogą

Bardziej szczegółowo

PODSTAWY INFORMATYKI wykład 5.

PODSTAWY INFORMATYKI wykład 5. PODSTAWY INFORMATYKI wykład 5. Adrian Horzyk Web: http://home.agh.edu.pl/~horzyk/ E-mail: horzyk@agh.edu.pl Google: Adrian Horzyk Gabinet: paw. D13 p. 325 Akademia Górniczo-Hutnicza w Krakowie WEAIiE,

Bardziej szczegółowo

Teoretyczne podstawy informatyki

Teoretyczne podstawy informatyki Teoretyczne podstawy informatyki Wykład 6a Model danych oparty na drzewach 1 Model danych oparty na drzewach Istnieje wiele sytuacji w których przetwarzane informacje mają strukturę hierarchiczną lub zagnieżdżoną,

Bardziej szczegółowo

Wybrane algorytmy tablicowe

Wybrane algorytmy tablicowe Wybrane algorytmy tablicowe Algorytmy i struktury danych Wykład 2. Rok akademicki: 2009/2010 Sortowanie przez wybieranie for (int i = 0; i < liczby.length - 1; i++) k = i; for (int j = i; j < liczby.length;

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

Dynamiczne struktury danych

Dynamiczne struktury danych Listy Zbiór dynamiczny Zbiór dynamiczny to zbiór wartości pochodzących z pewnego określonego uniwersum, którego zawartość zmienia się w trakcie działania programu. Elementy zbioru dynamicznego musimy co

Bardziej szczegółowo

Tablice. Monika Wrzosek (IM UG) Podstawy Programowania 96 / 119

Tablice. Monika Wrzosek (IM UG) Podstawy Programowania 96 / 119 Tablice Tablica to struktura danych, która może przechowywać wiele wartości tego samego typu. Na przykład tablica może zawierać: 10 wartości typu int opisujących liczbę studentów przyjętych na kierunek

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 2013/14 Znajdowanie maksimum w zbiorze

Bardziej szczegółowo

Drzewa binarne. Drzewo binarne to dowolny obiekt powstały zgodnie z regułami: jest drzewem binarnym Jeśli T 0. jest drzewem binarnym Np.

Drzewa binarne. Drzewo binarne to dowolny obiekt powstały zgodnie z regułami: jest drzewem binarnym Jeśli T 0. jest drzewem binarnym Np. Drzewa binarne Drzewo binarne to dowolny obiekt powstały zgodnie z regułami: jest drzewem binarnym Jeśli T 0 i T 1 są drzewami binarnymi to T 0 T 1 jest drzewem binarnym Np. ( ) ( ( )) Wielkość drzewa

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

Struktury Danych i Złożoność Obliczeniowa

Struktury Danych i Złożoność Obliczeniowa Struktury Danych i Złożoność Obliczeniowa Zajęcia 1 Podstawowe struktury danych Tablica Najprostsza metoda przechowywania serii danych, zalety: prostota, wady: musimy wiedzieć, ile elementów chcemy przechowywać

Bardziej szczegółowo

Algorytmy i Struktury Danych.

Algorytmy i Struktury Danych. Algorytmy i Struktury Danych. Liniowe struktury danych. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 4 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład

Bardziej szczegółowo

Drzewa poszukiwań binarnych

Drzewa poszukiwań binarnych 1 Drzewa poszukiwań binarnych Kacper Pawłowski Streszczenie W tej pracy przedstawię zagadnienia związane z drzewami poszukiwań binarnych. Przytoczę poszczególne operacje na tej strukturze danych oraz ich

Bardziej szczegółowo

KURS C/C++ WYKŁAD 6. Wskaźniki

KURS C/C++ WYKŁAD 6. Wskaźniki Wskaźniki KURS C/C++ WYKŁAD 6 Każda zmienna ma unikalny adres wskazujący początkowy obszar pamięci zajmowany przez tą zmienną. Ilość pamięci zajmowanej przez zmienną zależy od typu zmiennej. Adres można

Bardziej szczegółowo

Informatyka 2. Wykład nr 2 ( ) Politechnika Białostocka. - Wydział Elektryczny. dr inŝ. Jarosław Forenc

Informatyka 2. Wykład nr 2 ( ) Politechnika Białostocka. - Wydział Elektryczny. dr inŝ. Jarosław Forenc Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia stacjonarne I stopnia Rok akademicki 2008/2009 Wykład nr 2 (22.10.2008) Rok akademicki 2008/2009, Wykład

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

Lista, Stos, Kolejka, Tablica Asocjacyjna

Lista, Stos, Kolejka, Tablica Asocjacyjna Lista, Stos, Kolejka, Tablica Asocjacyjna Listy Lista zbiór elementów tego samego typu może dynamicznie zmieniać rozmiar, pozwala na dostęp do poszczególnych elementów Typowo dwie implementacje: tablicowa,

Bardziej szczegółowo

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

Algorytmy i struktury danych. Wykład 4 Tablice nieporządkowane i uporządkowane Algorytmy i struktury danych Wykład 4 Tablice nieporządkowane i uporządkowane Tablice uporządkowane Szukanie binarne Szukanie interpolacyjne Tablice uporządkowane Szukanie binarne O(log N) Szukanie interpolacyjne

Bardziej szczegółowo

Algorytmy i Struktury Danych.

Algorytmy i Struktury Danych. Algorytmy i Struktury Danych. Abstrakcyjne struktury danych dr hab. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 5 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury

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

Abstrakcyjne struktury danych - stos, lista, drzewo

Abstrakcyjne struktury danych - stos, lista, drzewo Sprawozdanie Podstawy Informatyki Laboratoria Abstrakcyjne struktury danych - stos, lista, drzewo Maciej Tarkowski maciek@akom.pl grupa VII 1/8 1. Stos Stos (ang. Stack) jest podstawową liniową strukturą

Bardziej szczegółowo

Wskaźniki. Programowanie Proceduralne 1

Wskaźniki. Programowanie Proceduralne 1 Wskaźniki Programowanie Proceduralne 1 Adresy zmiennych Sterta 1 #include 2 3 int a = 2 ; 4 5 int main ( ) 6 { 7 int b = 3 ; 8 9 printf ( " adres zmiennej a %p\n", &a ) ; 10 printf ( " adres

Bardziej szczegółowo