background image

 

 

Niero

Niero

z

z

strzygalnoś

strzygalnoś

ć

ć

 

 

i złożoność 

i złożoność 

algorytmiczna

algorytmiczna

background image

 

 

Algorytm

Komputery przetwarzają przekazywane im informacje 
z wykorzystaniem pewnych algorytmów. Program jest 

algorytmem zapisanym w języku zrozumiałym dla maszyny 

Jeżeli dany algorytm da się wykonać na maszynie o 

dostępnej mocy obliczeniowej i pamięci oraz 

akceptowalnym czasie, 
to mówi się że jest 

obliczalny

obliczalny

Poprawne działanie większości algorytmów 

implementowanych w komputerach opiera się na kolejnej 

realizacji pewnego zestawu warunków. Jeżeli, któryś z nich 

nie zostanie spełniony, to program kończy się 

komunikatem 

błędu

błędu

background image

 

 

Struktura danych

(ang. data structure) - sposób uporządkowania informacji 

w komputerze. Na strukturach danych operują algorytmy
Przykładowe struktury danych to:

  * tablica

lista

  * stos       

kolejka

  * graf
    * drzewo
 i jego liczne odmiany (np. drzewo binarne)
  * rekord, zwany w niektórych językach po prostu  

strukturą (ang. struct, record), logiczny odpowiednik 

to krotk

background image

 

 

Rozmiar zadania

Rozmiar zadania (problemu) to rozmiar tych 
danych wejsciowych, których
ilość wpływa na czas wykonania algorytmu, 
tzn. im większa jest ilość tych
danych tym dłużej realizuje się algorytm.

background image

 

 

Operacja elementarna

Operacja elementarna (inaczej operacja 
dominujaca) to operacja
charakterystyczna dla danego algorytmu. 

To taka operacja, której łączna liczba
wykonań jest proporcjonalna do rozmiaru 
zadania, tzn. im większy rozmiar
zadania tym więcej razy realizuje się 
operacja elementarna.

background image

 

 

Nierozstrzygalność 

algorytmów

Problem stopu- nazywamy nim taką sytuację, 

gdy dla danego algorytmu i danych wejściowych 

należy stwierdzić, czy program realizujący dany 

algorytm zatrzyma się
Algorytm ma własność stopu, gdy dla każdych 

danych początkowych wykonane obliczenia są 

poprawne i skończone 
Nie zawsze jest możliwe rozstrzygnięcie. Na 

przykład nie istnieje algorytm, który rozstrzyga, 

czy dwa λ-wyrażenia są równoważne lub czy 

maszyna Turinga dla danego wejścia się zatrzyma  

background image

 

 

Dowód poprawności 

algorytmu

Dowód poprawności algorytmu jest 
rozumowaniem matematycznym 
prowadzącym do formalnego 
wykazania, że dany algorytm przy 
poprawnych danych wejściowych 
da nam wynik spełniający 
wymagania

background image

 

 

Dowód poprawności 

algorytmu

Dowód poprawności algorytmu 
zawsze składa się z dwóch części:

    * dowód, że jeśli algorytm się  

zakończy, to da poprawny wynik

    * dowód, że przy poprawnych 

danych 

wejściowych algorytm 

zawsze się  zakończy

background image

 

 

Dowód poprawności 

algorytmu

W ogólnym przypadku pytanie Czy dany 

algorytm jest poprawny? jest nierozstrzygalne 
Dla większości języków opisu algorytmów 

nierozstrzygalne są nawet pytania:

    * 

C

C

zy dane dwa algorytmy dają taki sam wynik

zy dane dwa algorytmy dają taki sam wynik

?

?

    * 

C

C

zy dany algorytm dla poprawnych danych 

zy dany algorytm dla poprawnych danych 

wejściowych się kończy

wejściowych się kończy

?

? (nawet przy 

założeniu, że zawsze jesteśmy w stanie 

zweryfikować poprawność danych 

wejściowych)

background image

 

 

Teoria obliczeń

Dział informatyki teoretycznej 
Dzieli się na dwie główne części:

–  

teorię obliczalności

teorię obliczalności (zajmuje się 

odpowiedzią na pytanie, które problemy 
dają się rozwiązać przy pomocy 
komputera) 

– oraz 

złożoność obliczeniową

złożoność obliczeniową (zajmuje 

się tym jak szybko da się rozwiązać 
problem)

background image

 

 

Teoria złożoności 

obliczeniowej 

Dział teorii obliczeń 
Głównym jej celem jest określanie ilości zasobów 

potrzebnych do rozwiązania problemów 

obliczeniowych 
Rozważanymi zasobami są takie wielkości jak 

czas

czas

pamięć

pamięć lub 

liczba procesorów

liczba procesorów

Za twórców tej teorii uważani są 

Juris 

Juris 

Hartmanis

Hartmanis i 

Richard Stearns

Richard Stearns 

Jako przykłady problemów teorii można podać: 

problem spełnialności, problem najkrótszej 

problem spełnialności, problem najkrótszej 

ścieżki, problem faktoryzacji

ścieżki, problem faktoryzacji 

background image

 

 

Czym jest złożoność 

algorytmu?

Ilość zasobów komputerowych potrzebnych dla 

działania algorytmu może być rozumiana jako 

jego 

złożoność

złożoność 

Zasoby komputerowe

Zasoby komputerowe to czas działania i ilość

zajmowanej pamięci

W zależności od rozważanego zasobu mówimy 

o złożoności 

czasowej

czasowej lub 

pamięciowej

pamięciowej

background image

 

 

Złożoność algorytmu

Im większy rozmiar danych 
wejściowych tym więcej zasobów 
(czasu, procesorów, pamięci) jest 
potrzebnych do rozwiązania 
algorytmu 

Złożoność algorytmu jest więc funkcją 
rozmiaru danych wejściowych 

background image

 

 

Złożoność czasowa 

algorytmu

Złożoność czasowa algorytmu określa „czas” realizacji 

algorytmu
W charakterze czasu wykonania rozpatrujemy zwykle liczbę 

operacji podstawowych (dominujących). Operacjami 

podstawowymi mogą być na przykład: podstawienie, 

porównanie lub prosta operacja arytmetyczna.
Złożoność czasowa musi być niezależna  od:
- szybkości procesora, który wykonuje  algorytm,
- wyboru języka programowania, w którym                            

wykonana jest implementacja algorytmu

background image

 

 

Złożoność czasowa 

algorytmu

Z

Z

łożoność

łożoność

 czasowa pesymistyczna

 czasowa pesymistyczna to 

ilość wykonanych operacji elementarnych
dla danych „najgorszego” przypadku

Złożoność

Złożoność

 czasowa oczekiwana

 czasowa oczekiwana to ilość 

wykonanych operacji elementarnych dla
danych „typowego” przypadku.

background image

 

 

Złożoność pamięciowa 

algorytmu

Złożoność pamięciowa jest miarą ilości 
wykorzystanej pamięci
Jako tę ilość najczęściej przyjmuje się 
użytą pamięć 

maszyny abstakcyjnej

maszyny abstakcyjnej 

(na przykład liczbę komórek pamięci 
maszyny RAM) w funkcji rozmiaru wejścia
Możliwe jest również obliczanie rozmiaru 
potrzebnej pamięci fizycznej wyrażonej w 
bitach lub bajtach

background image

 

 

Klasy złożoności

Klasa złożoności to zbiór problemów 

obliczeniowych o podobnej złożoności 

obliczeniowej - innymi słowy: problemy, 

do których rozwiązania potrzebna jest 

podobna ilość zasobów łączymy w klasy
Stosuje się też szersze pojęcia takie jak 

– klasa P- decyzyjne problemy 

wielomianowe  

– NP- decyzyjne problemy podlegające 

wielomianowej weryfikacji, jeśli 

odpowiedź jest twierdząca  

background image

 

 

ZADANIA

1. Co to znaczy, że algorytm jest obliczalny?
2. Wskaż zdanie fałszywe:

Tablica, rekord, stos to przykładowe struktury 

danych.
Im większa jest ilość danych wejściowych tym 

krócej realizuje się algorytm.

3. Zajmuje się tym, jak szybko da się 

rozwiązać problem:

Teoria obliczalności
Złożoność obliczeniowa

background image

 

 

ZADANIA

4. Podaj nazwiska twórców teorii 

złożoności obliczeniowej.

5. Co to jest złożoność algorytmu?
6. Jakie są rodzaje złożoności 

algorytmu? Uzupełnij schemat:

Złożoność algorytmu

background image

 

 

ZADANIA

7. Co to jest klasa złożoności?
8. Co określa złożoność czasowa 

algorytmu?

9. Na czym polega problem stopu?
10.Czy pytanie „Czy dane dwa 

algorytmy dają taki sam wynik?” 
jest rozstrzygalne?


Document Outline