Algorytmy i struktury danych. dr inż. Sławomir Samolej D108 A, tel: , WWW: ssamolej.prz-rzeszow.

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

Wykład z Podstaw Informatyki dla I roku BO. Piotr Mika

Algorytm. Krótka historia algorytmów

Algorytm. Krótka historia algorytmów

Algorytmika i pseudoprogramowanie

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

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

Algorytm. Słowo algorytm pochodzi od perskiego matematyka Mohammed ibn Musa al-kowarizimi (Algorismus - łacina) z IX w. ne.

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

Podstawy Programowania Algorytmy i programowanie

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

Algorytm. a programowanie -

Algorytm. Słowo algorytm pochodzi od perskiego matematyka Mohammed ibn Musa al-kowarizimi (Algorismus - łacina) z IX w. ne.

Algorytm. Algorytmy Marek Pudełko

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

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

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

while(wyrażenie) instrukcja

Algorytmy i Struktury Danych

3. Podaj elementy składowe jakie powinna uwzględniać definicja informatyki.

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Matematyczne Podstawy Informatyki

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

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

Podstawy Informatyki. Wykład 6. Struktury danych

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

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

Efektywność algorytmów

Algorytmy sortujące i wyszukujące

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 )

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

Praktyka Programowania

Programowanie I. O czym będziemy mówili. Plan wykładu nieco dokładniej. Plan wykładu z lotu ptaka. Podstawy programowania w językach. Uwaga!

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

Algorytmy i schematy blokowe

wstęp do informatyki i programowania część testowa (25 pyt. / 60 min.)

Wstęp do programowania

Algorytmy, reprezentacja algorytmów.

dodatkowe operacje dla kopca binarnego: typu min oraz typu max:

Algorytmy komputerowe. dr inŝ. Jarosław Forenc

Podstawy i języki programowania

Rozkład materiału do nauczania informatyki w liceum ogólnokształcącym Wersja I

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

Za pierwszy niebanalny algorytm uważa się algorytm Euklidesa wyszukiwanie NWD dwóch liczb (400 a 300 rok przed narodzeniem Chrystusa).

Rozdział 4. Algorytmy sortowania 73 Rozdział 5. Typy i struktury danych 89 Rozdział 6. Derekursywacja i optymalizacja algorytmów 147

Instrukcje dla zawodników

REPREZENTACJA LICZBY, BŁĘDY, ALGORYTMY W OBLICZENIACH

Język ludzki kod maszynowy

Opis efektów kształcenia dla modułu zajęć

Metody Kompilacji Wykład 3

1. Kalkulator czterech działań. 2. Konwersja ciągu znaków do tablicy.

Definicje. Algorytm to:

do instrukcja while(wyrażenie);

REPREZENTACJA LICZBY, BŁĘDY, ALGORYTMY W OBLICZENIACH

Rozkład materiału do nauczania informatyki w liceum ogólnokształcącym Wersja II

EGZAMIN MATURALNY 2012 INFORMATYKA

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

Technologie informacyjne - wykład 12 -

ALGORYTMY I STRUKTURY DANYCH

Język C zajęcia nr 11. Funkcje

Sortowanie - wybrane algorytmy

I. Podstawy języka C powtórka

Co to jest algorytm? przepis prowadzący do rozwiązania zadania, problemu,

Podstawowe struktury danych

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

Definicja algorytmu brzmi:

Wykład 2. Poprawność algorytmów

Analiza algorytmów zadania podstawowe

Algorytmy i struktury danych. Wykład 6 Tablice rozproszone cz. 2

Wstęp do informatyki- wykład 2

Wykład I Cyfrowa reprezentacja informacji Algorytmy metody prezentacji i zapisu

Podstawy programowania 2. Temat: Funkcje i procedury rekurencyjne. Przygotował: mgr inż. Tomasz Michno


Metodyki i techniki programowania

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

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

Zadanie 1. Suma silni (11 pkt)

Podstawy programowania skrót z wykładów:

Sortowanie danych. Jolanta Bachan. Podstawy programowania

Zofia Kruczkiewicz, Algorytmu i struktury danych, Wykład 14, 1

Szczegółowy program kursów szkoły programowania Halpress

Podstawy programowania. Wykład: 13. Rekurencja. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Dodatkowo klasa powinna mieć destruktor zwalniający pamięć.

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

INFORMATYKA DANE.

KARTA PRZEDMIOTU. 1. Informacje ogólne. 2. Ogólna charakterystyka przedmiotu. Algorytmy i struktury danych, C3

wykład Organizacja plików Opracował: dr inż. Janusz DUDCZYK

Wstęp do Informatyki

PROGRAM KOŁA INFORMATYCZNEGO

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

Rekurencja (rekursja)

Lista, Stos, Kolejka, Tablica Asocjacyjna

KONSPEKT ZAJĘĆ KOŁA INFORMATYCZNEGO LUB MATEMATYCZNEGO W KLASIE III GIMNAZJUM LUB I LICEUM ( 2 GODZ.)

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

a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10]

ang. file) Pojęcie pliku (ang( Typy plików Atrybuty pliku Fragmentacja wewnętrzna w systemie plików Struktura pliku

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Algorytmy równoległe. Rafał Walkowiak Politechnika Poznańska Studia inżynierskie Informatyka 2010

WYMAGANIE EDUKACYJNE Z MATEMATYKI W KLASIE II GIMNAZJUM. dopuszczającą dostateczną dobrą bardzo dobrą celującą

Wstęp do informatyki- wykład 1

Transkrypt:

Algorytmy i struktury danych dr inż. Sławomir Samolej D108 A, tel: 865 1486, email: ssamolej@prz-rzeszow.pl WWW: ssamolej.prz-rzeszow.pl 1

Program komputerowy - dyskusja Program komputerowy jest skonkretyzowaniem abstrakcyjnych algorytmów przetwarzających określone struktury danych, Stąd, pojęcia struktury danych i algorytmu są bardzo ściśle związane ze sobą związane dobór struktury danych narzuca wybór algorytmu i odwrotnie, Dane odzwierciedlają zwykle informacje o obiektach rzeczywistych przystosowane ostatecznie do możliwości komputera. 2

Struktury danych - dyskusja Podstawowe typy danych, jakie może przechować komputer to liczby stało i zmiennopozycyjne, Dane są przechowywane w tzw. zmiennych miejscach w pamięci, które można zapisać ciągiem bitów lub odczytać. Większość języków programowania umożliwia w prosty sposób zorganizowanie podstawowych typów danych w podstawowe struktury danych: ablicę, Rekord, Zbiór, Plik sekwencyjny, W strukturach podstawowych zmienne zmieniają jedynie wartość, z góry określona jest długość danych ilość i rodzaj elementów w strukturze. a bazie struktur podstawowych buduje się struktury złożone w nich możliwa jest zmiana zarówno wartości zmiennych jak i przeorganizowanie samej struktury danych w czasie wykonywania programu, ypowe struktury złożone to: Lista, Stos, Kolejka Drzewo. 3

Podstawowe struktury danych - tablica ablica jest strukturą jednorodną składa się ze składowych tego samego typu. ablica nazywana jest strukturą o dostępie swobodnym wszystkie składowe mogą być wybrane w dowolnej kolejności i są jednakowo dostępne, W celu wybrania pojedynczej składowej stosuje się indeks numer składowej w tablicy, Zastosowania tablic przechowywanie grupy danych jednakowego typu wyników pomiarów, tekstów, macierzy, wektorów itp. x 1 x 2 x 3 x 4 x 5 0.5 0.25 0.125 0.0625 0.03125 4

Podstawowe struktury danych - rekord Służy do łączenia w jedną strukturę elementów o dowolnych typach, np.: Liczby zespolone para liczb rzeczywistych, Wiersz z bazy danych imię, nazwisko, data urodzenia, wiek, płaca podstawowa. Jan Kowalski 12 02 1988 45 3500,34 ekst ekst Data l. całkowita l. zmiennopoz. Uwagi: Składowymi rekordu może być tablica (np. tablica znaków zawierająca imię), Rekordy mogą być zgrupowane w tablicę (np. prosta baza danych). 5

Podstawowe struktury danych - zbiór Pojęcie zbioru danych odpowiada matematycznemu pojęciu zbioru, Wprowadza się je, aby można było dokonywać operacji na danych identycznych jak operacji na zbiorach matematycznych, Kluczowymi operacjami są: zdefiniowanie zbioru, sprawdzenie, czy dana wartość należy do zbioru, możliwość zdefiniowania różnicy, sumy zbiorów oraz zdefiniowania podzbiorów. 6

Podstawowe struktury danych plik sekwencyjny Plik sekwencyjny jest ciągiem danych, w pewnych przypadkach może być traktowanym jako nieskończony, lub wystarczająco długi, Specyfiką pliku sekwencyjnego jest, że w danym momencie dostępna jest tylko jedna składowa ciągu określona przez aktualną pozycję, W przetwarzaniu pliku dostępne są następujące operatory plikowe: Ustawienie się na początek pliku, Przesunięcie aktualnej pozycji o zadaną ilość elementów ciągu, Odczyt bieżącego elementu ciągu, Dopisanie elementu na końcu ciągu, Dostępny jest również operator: Zapis w bieżącym elemencie ciągu (uwaga: następuje zamazanie poprzednich elementów ciągu). 7

Algorytm - definicja Algorytm: Skończony ciąg/sekwencja reguł, które aplikuje się na skończonej liczbie danych, pozwalający rozwiązać zbliżone do siebie klasy problemów; Zespół reguł charakterystycznych dla pewnych obliczeń lub czynności informatycznych. Słowo "algorytm" pochodzi od nazwiska Muhammed ibn (أبو عبد االله محمد بن موسى الخوارزمي ( Alchwarizmi Musa matematyka perskiego z IX wieku i początkowo oznaczało w Europie sposób obliczeń oparty na dziesiętnym systemie liczbowym. 8

Jeden z pierwszych algorytmówalgorytm Euklidesa na obliczenie WD WD(liczba całkowita a, liczba całkowita b) dopóki b!= 0 c := reszta z dzielenia a przez b a := b b := c zwróć a 9

Algorytm Euklidesa - przykład a b c WD(1071,1029) = WD (1029, 1071 mod 1029 =42) = WD(1029,42) = WD(42,1029 mod 42 = 21) = WD(42, 21) = WD(21, 42 mod 21 = 0) SĄD: WD(1071,1029)=21 10

Algorytm - cechy Każdy algorytm: Posiada dane wejściowe ( w ilości większej lub równej 0) pochodzące z dobrze zdefiniowanego zbioru; Produkuje pewien wynik (niekoniecznie numeryczny); Jest precyzyjnie zdefiniowany (każdy krok algorytmu musi być jednoznacznie określony); Jest skończony (wynik algorytmu musi zostać kiedyś dostarczony mając algorytm A i dane wejściowe D powinno być możliwe precyzyjne określenie czasu wykonania (A)). 11

Metody opisu algorytmów Graficzny schemat blokowy Pseudokod mieszanka języka naturalnego i form składowych pochodzących z kilku języków programowania Kod w języku programowania 12

Konwencja graficznego opisu algorytmu (1) Strzałki łączące Początek lub koniec algorytmu Odczyt danych Zapis danych Decyzja 13

Konwencja graficznego opisu algorytmu (2) Wykonanie instrukcji, proces Wywołanie procesu wcześniej zdefiniowanego (procedury/funkcji) Łącznik stronicowy Łącznik międzystronicowy 14

Przykład algorytmu rozwiązanie rów. kwadratowego Start a,b,c a == 0 del = b*b - 4*a*c Równanie nie jest kwadratowe Del >= 0 Równanie nie ma pierwiastków rzeczywistych x1 = (-b sqrt(del))/(2*a) x2 = (-b + sqrt(del))/(2*a) x1, x2 Stop 15

Przetworzenie ciągu danych o nieznanej długości, ale ze znacznikiem końca. SAR a...... a!=znacznik_konca... SOP a 16

Przykład algorytmu obliczanie średniej arytmetycznej z ciągu danych, 0 oznacza koniec ciągu SAR a l=0 s=0 a!=0 Brak danych l==0 s=s/l l=l+1 s=s+a a s SOP 17

Przetworzenie ciągu danych o znanej długości. SAR a=0...... a<ilosc_elementow... SOP a++ 18

Przykład algorytmu wyznaczenie maksymalnego elementu ciągu zapisanego w tablicy t o długości dl_tab SAR t,dl_tab max_el=t[0] i=1 i<dl_tab max_el SOP t[i]>max_el max_el=t[i] i++ 19

Przykład algorytmu obliczanie silni z n SAR n s=1 i=2 i<=n s SOP s=s*i i=i+1 20

Przykład algorytmu sortowanie przez wstawianie a i=1 = -1, 0, 5, 8, -3, 2, -3 a i=2 = -1, 0, 5, 8, -3, 2, -3 a i=3 = -1, 0, 5, 8, -3, 2, -3 a i=4 = -1, 0, 5, 8, -3, 2, -3 a i=5 = -3, -1, 0, 5, 8, 2, -3 a i=6 = -3, -1, 0, 2, 5, 8, -3 a i=7 = -3, -3, -1, 0, 2, 5, 8 21

Przykład algorytmu sortowanie przez wstawianie - implementacja SAR data,n i=0 i<n SOP tmp=data[i] j=i data[j]=tmp i++ j>0 && tmp<data[j-1] data[j]=data[j-1] j-- 22

Przykład algorytmu sortowanie przez wybieranie a i=1 = 4, 6, -13, 2, 5, 14, -5 a i=2 = -13, 6, 4, 2, 5, 14, -5 a i=3 = -13, -5, 4, 2, 5, 14, 6 a i=4 = -13, -5, 2, 4, 5, 14, 6 a i=5 = -13, -5, 2, 4, 5, 14, 6 a i=6 = -13, -5, 2, 4, 5, 14, 6 a i=7 = -13, -5, 2, 4, 5, 6, 14 23

SAR data,n i=0 Przykład algorytmu sortowanie SOP i<n-1 j=i+1 least=i przez j<n wybieranie - data[j]<data[least] implementacja least=j j++ tmp=data[least] data[least]=data[i] data[i]=tmp i++ 24

Przykład algorytmu sortowanie bąbelkowe 0 1 2 3 4 5 6 7 8 9 10 5 5 5 5 1 1 1 1 1 1 1 2 2 2 1 5 5 5 2 2 2 2 3 3 1 2 2 2 2 5 5 3 3 8 1 3 3 3 3 3 3 3 5 5 1 8 8 8 8 8 8 8 8 8 8 25

SAR data,n i=0 Przykład algorytmu sortowanie bąbelkowe - implementacja SOP i<n-1 j=n-1 j>i data[j-1]>data[j] tmp=data[j-1] data[j-1]=data[j] data[j]=tmp j=j-1 i=i+1 26

Przykład algorytmu sortowanie przez zliczanie 1 2 3 4 5 6 7 8 A = 3 6 4 1 3 4 1 4 1 2 3 4 5 6 C1 = 2 0 2 3 0 1 C2 = 2 2 4 7 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 1 2 3 4 5 6 7 8 3 6 4 1 3 4 1 4 2 2 4 7 7 8 4 3 6 4 1 3 4 1 4 2 2 4 6 7 8 1 4 3 6 4 1 3 4 1 4 1 2 3 6 7 8 1 4 4 3 6 4 1 3 4 1 4 0 2 3 4 7 7 1 1 3 3 4 4 4 6 27

Przykład algorytmu wyszukiwanie binarne Dany jest ciąg posortowany, należy sprawdzić, czy pewna liczba (np. 18) znajduje się w ciągu. /p: l p umery el. ciągu: 0 1 2 3 4 5 6 7 8 9 10 11 iąg posortowany: 1, 2, 6,18,20,23,29,32,34,39,40,41 == 0, p == 11; l < p stąd można kontynuować obliczenia = (l + p)/2 = (0 +11)/2 = 5 8 < 23 stąd poszukiwanie będzie się odbywać na lewo od 23 /p: l p umery el. ciągu: 0 1 2 3 4 odciąg: 1, 2, 6,18,20 == 0, p == 4; l < p => stąd można kontynuować obliczenia = (0 + 4) / 2 = 2 8 > 6 stąd poszukiwanie będzie się odbywać na prawo od 6 l/p: l p umery el. ciągu: 3 4 odciąg: 18,20 == 3, p == 4; l < p => stąd można kontynuować obliczenia = (3 + 4) / 2 = 3 iczba 18 została znaleziona! 28

Przykład algorytmu wyszukiwanie binarne, implementacja SAR data,x,n sukces=0 left=0 right=n-1 left<=right && sukces!=1 sukces==1 mid=(left+right)/2-1 mid SOP data[mid]<x data[mid]==x sukces=1 right=mid-1 left=mid+1 29

Przykłady złożonych struktur danych - lista 1 23 25 32 ULL Lista jest wiązaną strukturą danych, Każdy z elementów listy zawiera dane oraz dowiązanie do następnego, Istnieje umowa, że jeśli dowiązanie wskazuje na 0 (ULL), to jest to ostatni element listy, Pierwszym elementem jest zwykle specjalny obiekt zawierający tylko dowiązanie, W odróżnieniu od ciągłych struktur danych (np. tablic) lista nie potrzebuje jednego ciągłego obszaru pamięci do przechowywania informacji dowiązanie może wskazywać w różne miejsca w pamięci, Listę można skonstruować z zastosowaniem tzw. Dynamicznego przydziału pamięci, co pozwala efektywniej zarządzać pamięcią: rezerwowana jest taka liczba pamięci, jaka wymagana jest w danej chwili, ajczęstsze zastosowania list: Bazy danych, 30

Przykłady złożonych struktur danych - stos 1 23 25 32 Stos jest liniową strukturą danych, dostępną do zapisywania i odczytywania tylko z jednego końca, Stos można zdefiniować za pomocą operacji, które zmieniają jego stan: initialize(stack) opróżnienie stosu, empty(stack) sprawdzenie, czy stos jest pusty, full(stack) sprawdzenie, czy stos jest zapełniony, push(el,stack) powoduje umieszczenie el. na stos, pop(stack) powoduje zdjęcie najwyższego elementu ze stosu, Zastosowania: przechowywanie rejestrów podczas wywoływania podprogramów, grafika komputerowa składnie przekształceń przestrzennych, przechowywanie zmiennych lokalnych w języku C, element szeregu algorytmów np. kalkulatora w odwrotnej notacji polskiej: 2 3 5 * + < = > (3*5)+2 push(2,stos); push(3,stos); push(5,stos); push((pop(stos) * pop(stos)),stos); push((pop(stos) + pop(stos)),stos) 31

Przykłady złożonych struktur danych kolejka FIFO first last 1 23 25 32 Kolejka jest listą (oczekujących) zwiększającą się przez dodanie elementów na jej koniec, a zmniejszająca się przez wyjmowanie elementów z jej początku. W odróżnieniu od stosu w kolejce wykorzystywane są oba końce jeden do wstawiania nowych elementów, drugi do ich usuwania. Kolejkę można zdefiniować za pomocą operacji, które zmieniają jego stan: initialize(queue) opróżnienie kolejki, empty(queue) sprawdzenie, czy kolejka jest pusta full(queue) sprawdzenie, czy kolejka jest zapełniony, enq(el,queue) powoduje umieszczenie el. na końcu kolejki, deq(queue) powoduje usunięcie pierwszego elementu z kolejki, Zastosowania: komunikacja pomiędzy urządzeniami i procesami obliczeniowymi w komputerze 32

Przykłady złożonych struktur danych drzewo 15 11 12 6 10 2 3 Przykład drzewa binarnego - kopiec 1 8 Drzewo składa się z wierzchołków i krawędzi, Wierzchołki nie posiadające dzieci nazywane są liśćmi, Drzewa, w których z każdego wierzchołka mogą wyrastać tylko dwa wierzchołki potomne nazywane są drzewami binarnymi, Każdy wierzchołek może mieć co najwyżej jednego rodzica, Struktura drzewa pozwala nie tylko na porządkowanie danych ale również na ich hierarchizację. Zastosowania drzew: kompilatory do przetwarzania tekstu programu, wydajne algorytmy sortowania (np. przez kopcowanie), do opisu wyrażeń matematycznych. 33

Pominięte zagadnienia Przy konstruowaniu algorytmów ocenia się ich złożoność obliczeniową, istnieją problemy obliczeniowe tak złożone, że nigdy nie zostaną rozwiązane przez komputer np. gra w szachy Istotnym działem algorytmiki są tzw. algorytmy rekurencyjne wprost pozwalające na implementację rekurencyjnie zdefiniowanych pojęć, np. silnia: 0! = 1 n! = n * (n-1)! Gdzie n >= 1 unsigned long int silnia(int x) { if(x==0) return 0; else return x*silnia(x-1);} Przedstawiono tylko wybrane algorytmy i struktury danych, szerszy przegląd znajduje się w literaturze przedłożonej na pierwszych zajęciach. 34