Podział algorytmów ze względu na obszar zastosowań. algorytmy numeryczne (matematyczne) wykonują obliczenia arytmetyczne, algorytmy przeszukujące



Podobne dokumenty
Podział algorytmów ze względu na obszar zastosowań. algorytmy numeryczne (matematyczne) wykonują obliczenia arytmetyczne, algorytmy przeszukujące

INFORMATYKA SORTOWANIE DANYCH.

Zasady organizacji projektów informatycznych

Analiza i projektowanie oprogramowania. Analiza i projektowanie oprogramowania 1/32

Technika mikroprocesorowa. Struktura programu użytkownika w systemie mikroprocesorowym

Kompletna dokumentacja kontenera C++ vector w -

Efektywność algorytmów

Teraz bajty. Informatyka dla szkół ponadpodstawowych. Zakres rozszerzony. Część 1.

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

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

Wprowadzenie do złożoności obliczeniowej

Wybrane wymagania dla informatyki w gimnazjum i liceum z podstawy programowej

Technologia programowania

Teraz bajty. Informatyka dla szkoły podstawowej. Klasa VI

Efekt kształcenia. Ma uporządkowaną, podbudowaną teoretycznie wiedzę ogólną w zakresie algorytmów i ich złożoności obliczeniowej.

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

C++ - [1-3] Debugowanie w Qt Creator

Wykład VII. Programowanie III - semestr III Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Roman Mocek Zabrze Opracowanie zbiorcze ze źródeł Scholaris i CKE

Laboratorium Informatyka (I) AiR Ćwiczenia z debugowania

Plan nauczania informatyki Opracował: mgr Daniel Starego

PROGRAM PRAKTYKI ZAWODOWEJ. Technikum Zawód: technik informatyk

Język ludzki kod maszynowy

Technologie informacyjne - wykład 12 -

TEORETYCZNE PODSTAWY INFORMATYKI

Podstawy programowania

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE

biegle i poprawnie posługuje się terminologią informatyczną,

Zaawansowane programowanie w języku C++

Matematyczne Podstawy Informatyki

WYMAGANIA EGZAMINACYJNE Egzamin maturalny z INFORMATYKI

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

Algorytmika i pseudoprogramowanie

INŻYNIERIA OPROGRAMOWANIA

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

PROGRAMOWALNE STEROWNIKI LOGICZNE

Wstęp do Informatyki. Klasyfikacja oprogramowania

Tworzenie oprogramowania

Wstęp do Informatyki dla bioinformatyków

TEORETYCZNE PODSTAWY INFORMATYKI

Zapisywanie algorytmów w języku programowania

Efekty kształcenia dla kierunku studiów INFORMATYKA, Absolwent studiów I stopnia kierunku Informatyka WIEDZA

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

Programowanie w języku C++ Grażyna Koba

Projektowanie i wdrażanie systemów informatycznych (materiały do wykładu cz. II)

Wstęp do Informatyki. Program, proces tworzenia programu Środowisko programistyczne Języki programowania

Wymagania na poszczególne oceny szkolne dla klasy VI. (na podstawie Grażyny Koba, Teraz bajty. Informatyka dla szkoły podstawowej.

Kod doskonały : jak tworzyć oprogramowanie pozbawione błędów / Steve McConnell. Gliwice, cop Spis treści. Wstęp 15.

Programowanie komputerów

Państwowa Wyższa Szkoła Techniczno-Ekonomiczna w Jarosławiu

2/4. informatyka" studia I stopnia. Nazwa kierunku studiów i kod. Informatyka WM-I-N-1 programu wg USOS. Tytuł zawodowy uzyskiwany przez

Krótka Historia. Co to jest NetBeans? Historia. NetBeans Platform NetBeans IDE NetBeans Mobility Pack Zintegrowane moduły. Paczki do NetBeans.

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

Teraz bajty. Informatyka dla szkoły podstawowej. Klasa VI

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

Wymagania edukacyjne z informatyki dla uczniów klas VI SP nr 53 w Krakowie w roku szkolnym 2019/2020

EFEKTY KSZTAŁCENIA DLA KIERUNKU STUDIÓW

REFERAT PRACY DYPLOMOWEJ

System komputerowy. Sprzęt. System komputerowy. Oprogramowanie

KATEGORIA OBSZAR WIEDZY NR ZADANIA Podstawowe informacje i czynności

Programowanie Systemów Czasu Rzeczywistego

Programowanie dla początkujących w 24 godziny / Greg Perry, Dean Miller. Gliwice, cop Spis treści

EFEKTY KSZTAŁCENIA DLA KIERUNKU STUDIÓW INFORMATYKA. STUDIA PIERWSZEGO STOPNIA - PROFIL OGÓLNOAKADEMICKI

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Podstawa programowa Technik informatyk PODSTAWA PROGRAMOWA KSZTAŁCENIA W ZAWODZIE TECHNIK INFORMATYK SYMBOL CYFROWY 312[01]

Podstawy programowania.

Programowanie. Pascal - język programowania wysokiego poziomu. Klasa 2 Lekcja 9 PASCAL

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Teraz bajty. Informatyka dla szkoły podstawowej. Klasa 4 Wymagania edukacyjne na poszczególne oceny szkolne dla klasy 4

Analiza ilościowa w przetwarzaniu równoległym

Algorytm. a programowanie -

Technik informatyk. 3) efekty kształcenia właściwe dla kwalifikacji wyodrębnionych w zawodzie technik informatyk

Egzamin / zaliczenie na ocenę*

PROGRAM NAUCZANIA DLA ZAWODU TECHNIK INFORMATYK, O STRUKTURZE PRZEDMIOTOWEJ

Porównanie czasów działania algorytmów sortowania przez wstawianie i scalanie

Błędy procesu tworzenia oprogramowania (Badania firmy Rational Software Corporation)

Opracował: Jan Front

Zasady analizy algorytmów

Podsumowanie wyników ankiety

Wymagania edukacyjne z informatyki dla klasy szóstej szkoły podstawowej.

Studia I stopnia, stacjonarne, inżynierskie 3,5 letnie. kierunek: INFORMATYKA. Specjalność: PROGRAMOWANIE. Rok immatrykulacji 2018

Informatyka- wykład. Podstawy programowania w Pythonie. dr Marcin Ziółkowski

Sortowanie - wybrane algorytmy

SCENARIUSZ LEKCJI. Streszczenie. Czas realizacji. Podstawa programowa

Moduł 2 Użytkowanie komputerów i zarządzanie plikami wymaga od kandydata znajomości obsługi komputera osobistego.

ICD Wprowadzenie. Wprowadzenie. Czym jest In-Circuit Debugger? 2. O poradniku 3. Gdzie szukać dodatkowych informacji? 4

Teraz bajty. Informatyka dla szkoły podstawowej. Klasa IV

CZĘŚĆ A PIERWSZE KROKI Z KOMPUTEREM

Programowanie w Javie nazwa przedmiotu SYLABUS A. Informacje ogólne

Efekty kształcenia dla makrokierunku: INFORMATYKA STOSOWANA Z KOMPUTEROWĄ NAUKĄ O MATERIAŁACH Wydział: MECHANICZNY TECHNOLOGICZNY

INFORMATYKA KLASA IV

Zaawansowane algorytmy i struktury danych

Technologie cyfrowe. Artur Kalinowski. Zakład Cząstek i Oddziaływań Fundamentalnych Pasteura 5, pokój 4.15

Algorytmy asymetryczne

Podstawy programowania. Wykład 1 Wstęp. Krzysztof Banaś Podstawy programowania 1

Wykład I. Wprowadzenie do baz danych

DLA SEKTORA INFORMATYCZNEGO W POLSCE

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Projektowanie algorytmów równoległych. Zbigniew Koza Wrocław 2012

Transkrypt:

Podział algorytmów ze względu na obszar zastosowań. algorytmy numeryczne (matematyczne) wykonują obliczenia arytmetyczne, algorytmy przeszukujące badają zbiór w celu wyszukania wyróżnionego elementu, algorytmy porządkujące ustawiają elementy zbioru, wymaganej kolejności, algorytmy rekurencyjne rozwiązują problemy, które da się rozbić na mniejsze części, stanowiące kopie wzorca, algorytmy szyfrujące zmieniają dane tak, by ich odczyt nie był możliwy bez znajomości klucza kodującego, algorytmy kompresji danych określają taki sposób zapisu danych, by zmniejszyć objętość pliku kompresowanego, Złożoność algorytmów. Teoria złożoności jest to nauka której głównym celem jest określanie ilości zasobów potrzebnych do rozwiązania problemów obliczeniowych. Rozważanymi zasobami są takie wielkości jak czas, pamięć lub liczba procesorów. Złożoność algorytmów Ilość zasobów niezbędnych do wykonania algorytmu można rozumieć jako jego złożoność. W zależności od rozważanego zasobu mówimy o złożoności czasowej czy też pamięciowej. Oczywiście w większości wypadków ilość potrzebnych zasobów będzie się różnić w zależności od danych wejściowych z zakresu danego zagadnienia. Złożoność algorytmu jest więc funkcją rozmiaru danych wejściowych. Kolejnym problemem jest fakt, iż złożoność zwykle nie zależy wyłącznie od rozmiaru danych, ale może się znacznie różnić dla danych wejściowych o identycznym rozmiarze. Dwoma często stosowanymi sposobami podejścia są: rozpatrywanie przypadków najgorszych (złożoność pesymistyczna) oraz zastosowanie określonego sposobu uśrednienia wszystkich możliwych przypadków (złożoność oczekiwana). Ostatnim sposobem najrzadziej używanym jest szacowanie (złożoność optymistycznej) czyli złożoności obliczonej dla przypadku najkorzystniejszego dla danego algorytmu. Operacja elementarna (dominująca) w teorii obliczeń operacja charakterystyczna dla danego algorytmu, na ogół zajmująca w nim najwięcej czasu. Za jednostkę złożoności czasowej przyjmuje się wykonanie jednej operacji elementarnej. Złożoność czasowa Przyjętą miarą złożoności czasowej jest liczba operacji podstawowych w zależności od rozmiaru wejścia. Dlatego w charakterze czasu wykonania rozpatruje się zwykle liczbę operacji podstawowych (dominujących). Operacjami podstawowymi mogą być na przykład: podstawienie, porównanie lub prosta operacja arytmetyczna. Algorytmy analizuje się, wykorzystując abstrakcyjne modele obliczeń. Nie uwzględniając specyfiki sprzętu ni języka programowania. Złożoność pamięciowa jest miarą ilości wykorzystanej pamięci. Jako tę ilość najczęściej przyjmuje się użytą pamięć maszyny abstrakcyjnej w funkcji rozmiaru wejścia. Możliwe jest również obliczanie rozmiaru potrzebnej pamięci fizycznej wyrażonej w bitach lub bajtach. Porównywanie złożoności algorytmów przy porównywaniu bierzemy jak zachowuje się funkcja określająca złożoność dla odpowiednio dużych, granicznych argumentów (rozmiarów danych wejściowych) ignorując zachowanie dla małych danych. Ponadto złożoności algorytmów różniące się o stałą uważamy za takie same, co eliminuje wpływ szybkości działania komputera, na którym dany algorytm ma być wykonany. Klasa złożoności problemy, do rozwiązania których potrzebna jest podobna ilość zasobów łączymy w klasy. Przykładowo mówimy o problemach o liniowej złożoności pamięciowej, jeśli ilość potrzebnej pamięci rośnie liniowo względem rozmiaru danych; czy też o problemach o kwadratowej złożoności czasowej, jeśli liczba operacji podstawowych rośnie z kwadratem rozmiaru danych. Podobne określenia stosujemy do algorytmów.

Rzędy złożoności czasowej(obliczeniowej) Złożoność czasowa Opis Szybkość O(1) stała złożoność algorytm wykonuje się w stałej ilości operacji, niezależnie od liczby danych wejściowych. najszybszy O(log2(n)) złożoność logarytmiczna algorytm wykonuje logarytmiczną ilość operacji w stosunku do liczby danych wejściowych. *podstawa logarytmu zazwyczaj wynosi 2, jednak czasami może być większa (np. w B-drzewach). bardzo O(n) O(n*log2(n)) złożoność liniowa algorytm wykonuje wprost proporcjonalną ilość operacji do liczby danych wejściowych. złożoność liniowo-logarytmiczna O(n2) O(nX) O(Xn) złożoność kwadratowa ilość operacji algorytmu jest wprost proporcjonalna do liczby danych wejściowych podniesionej do potęgi drugiej. złożoność wielomianowa ilość operacji algorytmu jest wprost proporcjonalna do liczby danych wejściowych podniesionej do potęgi X. *X jest stałą o dowolnej wartości. Uwaga! Pamiętaj, że zarówno funkcja liniowa jak i funkcja kwadratowa są również wielomianami. W informatyce posługując się terminem złożoności wielomianowej zazwyczaj mamy na myśli algorytmy, których złożoność obliczeniowa (lub pamięciowa) jest co najmniej kwadratowa. złożoność wykładnicza ilość operacji algorytmu jest wprost proporcjonalna do stałej X większej lub równej 2, podniesionej do potęgi równej liczbie danych wejściowych. *X jest stałą większą niż 2. niezbyt wolny bardzo wolny

Narzędzia programistyczne. Podstawowe narzędzia programistyczne to: Edytor Debugger. Zintegrowane środowisko programistyczne (IDE) Edytor programistyczny do tworzenia programu można użyć dowolny edytor tekstu np. Notatnik w Winows. Vi, Nano Pico w Linux Text w Macintosch. Jednakże pisząc program należy kontrolować składnię języka itd. więc często wykorzystuje się wyspecjalizowane edytory kodu źródłowego. Edytor kodu źródłowego to program komputerowy wspomagający pisanie kodu źródłowego. Rozpoznaje i wyróżnia składnie (np. poprzez nadawanie koloru czy kroju czcionki) i zapisuje w odpowiednim formacie. Często ma dodatkowe funkcję jak: auto uzupełnianie kodu, możliwość pisania makr, itp. Może stanowić samodzielny program lub być częścią zintegrowanego środowiska programistycznego. Przykładowy edytor dla Windows to Notepad++ pozwalający na pracę w C,C++,Java, C# JavaScript, VB, ASP Debug tool, Debugger (po polsku - program do usuwania błędów, czytaj dibager - z ang. odpluskwiacz) program komputerowy służący do analizy innych programów, w celu odnalezienia i identyfikacji zawartych w nich błędów, zwanych z angielskiego bugami (robakami). Proces nadzorowania wykonania programu za pomocą debuggera określa się mianem debugowania. Podstawowym zadaniem debuggera jest sprawowanie kontroli nad wykonaniem kodu, co umożliwia zlokalizowanie instrukcji odpowiedzialnych za wadliwe działanie programu. Współczesne debuggery pozwalają na efektywne śledzenie wartości poszczególnych zmiennych, wykonywanie instrukcji krok po kroku czy wstrzymywanie działania programu w określonych miejscach. Debugger jest standardowym wyposażeniem większości współczesnych środowisk programistycznych. Wadą debuggera jest to że jest wstanie tylko wykryć wadliwe działanie programu nie wykrywa natomiast błędów wynikłych z powodu niewłaściwego zrozumienia problemu przez programistę (program nie robi to co powinien, ale robi to co programista żeby robił). Zintegrowane środowisko programistyczne (ang. Integrated Development Environment, IDE) aplikacja lub zespół aplikacji (środowisko) służących do tworzenia, modyfikowania, testowania i konserwacji oprogramowania. Charakteryzują się tym, że udostępniają złożoną, wieloraką funkcjonalność obejmującą edycję kodu źródłowego, kompilowanie kodu źródłowego, tworzenie zasobów programu (tzn. formatek / ekranów / okien dialogowych, menu, raportów, elementów graficznych takich jak ikony, obrazy itp.), tworzenie baz danych, komponentów i innych, debugowanie itd.

1. Określanie wymagań (specyfikacja), 2. Wybór języka programowania, 3. Tworzenie algorytmu, 4. Projektowanie systemu, 5. Implementacja, 6. Scalanie systemu, 7. Testy końcowe, 8. Tworzenie dokumentacji użytkowej, 9. Konserwacja systemu. Fazy powstawania programu komputerowego: Określanie wymagań służy do sprecyzowania potrzeb. Na tym etapie formułuje się wyobrażenia o programie i jego działaniu oraz precyzuje wymagania. Na podstawie wymagań tworzona jest tzw. specyfikacja projektu, czyli zakres czynności, jaki dany program ma wykonywać. Jeżeli program jest tworzony na zamówienie, należy w pewnym momencie zażądać zamrożenia specyfikacji w przeciwnym razie klient może zażądać zmian (nawet po napisaniu programu), a wykonawca będzie to musiał zrobić nieodpłatnie. Czasami nawet mała zmiana wymagań może w decydujący sposób wpłynąć na sposób realizacji zamówienia, co może nawet doprowadzić do konieczności rozpoczęcia praktycznie od nowa. Określanie wymagań należy przeprowadzić razem z osoba zamawiająca program tak długo aż obie strony nie będą zgodne że program robi to co chcemy i w tym momencie zamrażamy projekt. Z fazy określenia należy przegotować dokumentacje zawracającą: zakres systemu, opis ewolucji systemu, specyfikację wymagań funkcjonalnych i niefunkcjonalnych, modelu systemu, opis wymagań sprzętowych, słownik pojęć fachowych i informatycznych. Jeżeli program komputerowy powstaje na użytek programisty, faza określania wymagań może zostać skrócona do minimum. 2. Wybór języka programowania zależy głównie od przeznaczenia aplikacji. Przeważnie istnieje przynajmniej kilka języków programowania nadających się budowy systemu spełniającego wymagania. Wybór języka programowania może być dokonany przed lub po stworzeniu algorytmu. Jeżeli wybór jeżyka nie jest narzucony przez zamawiającego to jest on podyktowany najczęściej preferencjami zespołu programistycznego. 3. Tworzenie algorytmu - jest to jeden z najważniejszych etapów projektowania, wymaga on od programisty (bądź projektanta) starannego przemyślenia i przygotowania. Nie należy przystępować do pisania programu nie mając wyobrażenia o jego budowie. 4. Projektowanie systemu służy do stworzenia szkieletu kodu źródłowego (systemu). Może być to projektowanie strukturalne lub obiektowe. 5. Implementacja jest to właściwa faza budowy programu. Małe systemy informatyczne mogą być realizowane przez jednego programistę. Systemy większe wymagają utworzenia zespołu bądź też grupy zespołów programistycznych. 6. Scalanie systemu w przypadku tworzenia aplikacji przez zespół programistów należy połączyć wszystkie moduły w jedną całość. Rozróżnia się trzy podstawowe techniki integracji systemu informatycznego: metoda zstępująca najpierw integrowane są moduły sterujące, a później moduły wykonawcze,

nazywana inaczej od ogółu do szczegółu metoda wstępująca najpierw integrowane są moduły wykonawcze a później sterujące, nazywana inaczej od szczegółu do ogółu. metoda mieszana moduły sterujące integrowane są metodą zstępującą, a wykonawcze wstępującą. 7. Testy końcowe służą do ostatecznego potwierdzenia poprawności systemu. Rozróżnia się następujące etapy testów:, testowanie przez Dział Kontroli Jakości, alfa-testy przez wybraną (najczęściej małą) grupę użytkowników, beta-testy przez wybraną (większą) grupę użytkowników, testy akceptacji (na rzeczywistych danych), wykonywane przez odbiorcę. 8. Dokumentacja użytkowa powinna zawierać następujące elementy: opis funkcjonalny, podręcznik użytkownika, kompletny opis systemu. 9. Konserwacja systemu zawiera zespół czynności, dokonywanych po stworzeniu aplikacji, obejmujących: poprawianie błędów, udoskonalanie produktu, dostosowywanie do nowych warunków.