• Nie Znaleziono Wyników

Proste rachunki wykonywane za pomoca komputera

N/A
N/A
Protected

Academic year: 2021

Share "Proste rachunki wykonywane za pomoca komputera"

Copied!
32
0
0

Pełen tekst

(1)
(2)

PROSTE RACHUNKI WYKONYWANE

ZA POMOCĄ KOMPUTERA

WPROWADZENIE DO ALGORYTMIKI

Maciej M. Sysło

Uniwersytet Wrocławski Uniwersytet UMK w Toruniu

syslo@ii.uni.wroc.pl

2

informatyka +

(3)

Algorytm, algorytmika

Algorytm

– opis rozwiązania krok po kroku postawionego

problemu lub sposobu osiągnięcia jakiegoś celu

Pierwszy algorytm –

algorytm Euklidesa

300 p.n.e

algorytm

od

Muhammad

ibn Musa al-Chorezmi

IX w.

Algorytmika

– dziedzina zajmująca się algorytmami i ich

własnościami

(4)

Algorytmy a informatyka

Informatyka –

jedna z definicji:

dziedzina wiedzy i działalności

zajmująca się algorytmami

Czy zajmuje się też

algorytmami kulinarnymi?

Donald E. Knuth:

Mówi się często, że człowiek dotąd nie zrozumie czegoś,

zanim nie nauczy tego – kogoś innego.

W rzeczywistości,

człowiek nie zrozumie czegoś (

algorytmu

) naprawdę,

zanim nie zdoła nauczyć tego – komputera.

Ralf Gomory (IBM):

Najlepszym sposobem przyspieszania komputerów

jest obarczanie ich mniejszą liczbą działań (

szybszymi algorytmami

)

informatyka +

4

Będziemy uczyć komputery, czyli programować je !

(5)

Algorytmiczne rozwiązywanie problemu

Dla problemu – chcemy otrzymać rozwiązanie

komputerowe, które jest:

zrozumiałe

dla każdego, kto zna problemu

• poprawne

, czyli spełnia specyfikację (opis) problemu

• efektywne

, czyli nie marnuje czasu i pamięci komputera

Metoda rozwiązywania:

analiza

sytuacji problemowej

sporządzenie

specyfikacji

: wykaz danych, wyników i relacji

• projekt

rozwiązania

komputerowa realizacja rozwiązania –

implementacja

• testowanie poprawności

rozwiązania

dokumentacja

i

prezentacja

rozwiązania

(6)

Rozwiązywanie problemów z pomocą komputerów

Objaśnienie dwóch terminów:

Problem

:

•problem, gdy nie podano nam, jak należy go rozwiązać, ale wiemy wystarczająco, by poradzić sobie z nim

•a więc, problem jest dla każdego nie tylko dla orłów

Programowanie

:

•komputery wykonują tylko programy

•cokolwiek uruchamiamy na komputerze: Google, dokument w Word, arkusz w Excel, naciśnięcie klawisza – jest programem

•każdy widoczny i niewidoczny efekt działania komputera to wynik działania jakiegoś programu

Konkluzja:

powinniśmy

lepiej poznać programowanie

komputerów

(7)

Myślenie algorytmiczne

Myślenie komputacyjne

(ang. computational thinking)

informatyka +

7

Reklama firmy IBM z 1924 roku

Komputer to maszyna do myślenia !!!

(8)

Problemy, algorytmy

i ich komputerowe realizacje (implementacje)

Plan:

• Obliczenia w komputerze – czy komputer może

wszystko policzyć?

– trasę dla Premiera – kryptogram RSA

• Liczby dziesiętne, binarne, … – system pozycyjny,

zamiana liczb między systemami

• Obliczanie wartości wielomianu – Schemat Hornera

• Podnoszenie do potęgi – szybko!

• Algorytm Euklidesa – rekurencja, jako przedsmak

informatyki

(9)

Czy komputer może wszystko obliczyć , 1

Problem:

Znajdź najkrótszą trasę dla Premiera przez wszystkie

miasta wojewódzkie.

informatyka +

9

Rozwiązanie:

Premier zaczyna w Stolicy a inne miasta może

odwiedzać w dowolnej kolejności. Tych możliwości jest:

15*14*13*12*11*…*2*1 = 15! (

15 silnia

)

W 1990 roku było: 48*47*46*…*2*1 = 48! (

48 silnia

)

Jak szybko można obliczyć 15!, a 48! Mając komputer, który

wykonuje 10

15

(1 petaflops) operacji na sekundę (superkomputer)?

15! = 1307674368000/10

15

sek. = ok.

0.01 sek.

48! = 1,2413915592536072670862289047373*10

61

/10

15

=

Ile to jest lat?

25! = 15511210043330985984000000/10

15

sek. = 15511210043 sek. =

(10)

Czy komputer może wszystko obliczyć, 2

Kryptografia:

Szyfr RSA, jeden z najpopularniejszych obecnie,

bazuje na podnoszeniu do

dużej

potęgi

dużych

liczb, np.

1234567890987654321234567890987654321123456789987654

3211234567890

123456789098765432112345678909876543211234567890987654321

Jak można szybko obliczać takie potęgi? Demo:

(11)

System dziesiętny, system pozycyjny

Liczba dziesiętna: 357 ma wartość (dziesiętną):

357 = 3*100 + 5*10 + 7*1 = 3*102 + 5*101 + 7*100

a zatem liczba: dn-1 dn-2 … d1 d0 która ma n cyfr

ma wartość:

dn-1*10n-1 + dn-2*10n-2 + … + d1*101 + d0*100

10 – podstawa systemu {0, 1, 2, 3, …, 8, 9} – cyfry 2, 8, 16 – podstawy systemów używanych w komputerach

podstawa cyfry 2 0, 1 system binarny 8 0, 1, 2, 3, 4, 5, 6, 7 16 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F 60 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, G, …

informatyka +

11

(12)

System binarny

Liczba binarna: 10101 = (10101)2 ma wartość (dziesiętną):

1*24 + 0*23 + 1*22 + 0*21 + 1*20 = 24 + 22 + 1 = 16 + 4 + 1 = 21

a zatem liczba binarna: (bn-1 bn-2 … b1 b0)2 która ma n cyfr

ma wartość:

a = bn-1*2n-1 + bn-2*2n-2 + … + b1*21 + b0*20 (*)

Jak szybko obliczać wartość dziesiętną binarnego rozwinięcia? We wzorze (*) zastępujemy 2 przez x i otrzymujemy:

a = bn-1*xn-1 + bn-2*xn-2 + … + b1*x1 + b0*x0

Jest to wielomian zmiennej x o współczynnikach 0 lub 1, czyli:

Pytanie: Jak szybko obliczać wartość wielomianu?

informatyka +

12

Binarne rozwinięcie liczby a Najbardziej znaczący bit Najmniej znaczący bit

(13)

Obliczanie wartości wielomianu

Obliczanie wartości wielomianu jest bardzo ważną operacją w

komputerze, bo wartość każdej funkcji jest liczona jako wartość

wielomianu, np.

cos x = 1 – 0.49670x

2

+ 0.03705x

4

.

Wielomian stopnia 2:

w(x) = ax

2

+ bx + c = a*x*x + b*x + c 3 mnożenia 2 dodawania

w(x) = ax

2

+ bx + c = (a*x + b)*x + c

2

mnożenia 2 dodawania

Wielomian stopnia 3:

w(x) = ax

3

+ bx

2

+ cx + d = ((a*x + b)*x + c)*x + d 3 mnoż. 3 dod.

Wielomian stopnia n:

w

n

(x) = a

0

*x

n

+ a

1

*x

n-1

+ … + a

n-1

*x + a

n

=

= (a

0

*x

n-1

+ a

1

*x

n-2

+ … + a

n-1

)*x + a

n

= … =

= ((…((a

0

*x + a

1

)*x + a

2

)*x + … + a

n-2

)*x + a

n-1

)*x + a

n

(14)

Obliczanie wartości wielomianu

specyfikacja, algorytm

Problem Wielomian – Obliczanie wartości wielomianu

Dane: n – nieujemna liczba całkowita

a0, a1, a2, ..., an – n + 1 współczynników wielomianu

z – wartość argumentu – obliczamy wn(z).

Wynik: wn(z) – czyli wartość wielomianu wn(x) w punkcie x = z

Algorytm do obliczania wartości wielomianu:

wn(z) = ((…((a0*z + a1)*z + a2)*z + … + an-2)*z + an-1)*z + an Schemat Hornera: y := a0 y := y*z + a1 y := y*z + a2 ….. y := y*z + an-1 y := y*z + an

informatyka +

14

y := a0 y := y*z + ai dla i = 1, 2, …, n Specyfikacja problemu – dokładny opis problemu

n mnożeń i n dodawań Nie ma szybszego algorytmu!!!

(15)

Schemat blokowy algorytmu Hornera

informatyka +

15

Instrukcja iteracyjna Instrukcja warunkowa: rozgałęzienia algorytmu

Ada Augusta, córka Byrona, uznawana powszechnie za pierwszą programistkę komputerów, przełomowe znaczenie

maszyny analitycznej Ch. Babbage’a, pierwowzoru dzisiejszych komputerów, upatrywała właśnie „w możliwości

wielokrotnego wykonywania przez nią danego ciągu instrukcji, z liczbą powtórzeń z góry zadaną lub zależną od wyników obliczeń”, a więc w iteracji.

i := 0; y := a0 Początkowe wartości

Czy i = n

Czyli, czy wyczerpano wszystkie współczynniki Nie Tak i := i + 1 y := y*z + ai Wyprowadź wartość y Koniec algorytmu

(16)

Pełny

schemat

blokowy

algorytmu

Hornera

informatyka +

16

(17)

Algorytm Hornera w postaci programu (Pascal)

program Horner;

var i,n :integer; a,y,z :real;

begin

read(n); read(z); read(a);

y:=a;

for i:=1 to n do begin read(a); y:=y*z+a end; write(y) end.

informatyka +

17

nazwa programu

deklaracje, typy zmiennych blok programu – początek czytaj n, czytaj z

czytaj pierwszy współczynnik początkowa wartość wyniku pętla od 1 do n

czytaj kolejny współczynnik powiększenie wyniku

iteracja – koniec pisz wynik

(18)

Warsztaty

Algorytm, język programowania, komputer

informatyka +

18

Proces komputerowej realizacji algorytmu:

•Opis algorytmu

•Zapis w języku programowania (Pascal, C++)

•Przetłumaczenie na język zrozumiały przez komputer

•Wykonanie •Testowanie

(19)

Algorytm Hornera – współczynniki w tablicy (Pascal)

Program Horner_tablica;

var i,n :integer; y,z:real;

a:array[0..100] of real {Co najwyzej 100 wspolczynnikow}

begin

read(n);

for i:=0 to n do read(a[i]); writeln(' z y');

read(z);

while z <> 0 do begin y:=a[0];

for i:=1 to n do y:=y*z+a[i]; write(' ',y:2:5); writeln; read(z) end end.

informatyka +

19

Deklaracja tablicy Czytanie współczynników

Instrukcja iteracyjna z warunkiem:

Obliczanie wartości tego samego wielomianu tak długo, jak długo argument jest różny od zera, czyli z <> 0.

(20)

Zastosowania Algorytmu Hornera

1. Obliczanie wartości wielomianów.

2. Obliczanie wartości dziesiętnej liczb danych w systemie o podstawie różnej od 10, np. liczb binarnych.

Uwaga: jest to bardzo prosta metoda, np. dla obliczeń na kalkulatorze bez pamięci.

3. Szybkie potęgowanie (w dalszej części)

(21)

Otrzymywanie postaci binarnej liczb

Szkolna metoda: dzielimy przez dwa tak długo, jak długo iloraz jest większy od zera – słupki:

dzielenie iloraz reszta

187|2 93 1 93|2 46 1 46|2 23 0 23|2 11 1 11|2 5 1 5|2 2 1 2|2 1 0 1|2 0 1

Reprezentacja od końca reszt:

187 = (10111011)2

informatyka +

21

Program Rozwiniecie_binarne; var a:integer; begin read(a); while a <> 0 do begin write(a mod 2,' '); a:=a div 2 end end.

Ciekawe pytanie: jaka jest długość

rozwinięcia binarnego liczby n? Bardzo prosty program

(22)

Podnoszenie do potęgi, 1

Dane: m – liczba naturalna,

x – liczba rzeczywista

Wynik: y = xm

Algorytmy: korzystają ze spostrzeżenia:

jeśli m jest parzyste, to xm = (xm/2)2

jeśli m jest nieparzyste, to xm = (xm –1)x (m – 1 staje się parzyste).

Faktycznie, korzysta się z postaci binarnej wykładnika m.

Przykład: m = 22

Sposób 1.

Rozłóż m na sumę potęg liczby 2 mamy: 22 = 2 + 4 + 16

A stąd: x22 = x2+4+16 = x2 *x4 *x16

Kolejne mnożenia: x2, x4 = (x2)2, x8 = (x4)2, x16 = (x8)2, y = x2 *x4 = x6,

y = y*x16 6 mnożeń (kwadrat to jedno mnożenie)

(23)

 Znajdź rozwinięcie binarne liczby m; mamy: 22 = (10110)2

 Przedstaw wykładnik w postaci schematu Hornera; mamy:

22 = 1*24 + 0*23 + 1*22 + 1*21 + 0*20 = (((2 + 0)2 + 1)2 + 1)2 +0

 Z postaci wykładnika określ kolejność mnożeń:

x(((2+0)2+1)2+1)2+0 = x(((2+0)2+1)2+1)2 = (x(((2+0)2+1)2+1)2 = (x(((2+0)2+1)2 x)2 =

= (x(((2+0)2+1)2 x)2 = (x(((2+0)2x)2 x)2 = (x(((2+0)2x)2x)2 = (((x2)2x)2x)2 = x22

 Kolejne mnożenia:

x2, x4 = (x2)2, x5 = (x4)x, x10 = (x5)2, x10x = x11, (x11)2 = x22

Ten algorytm również wykonał 6 mnożeń, ale liczy inne iloczyny. Obie metody są bardzo efektywne i praktyczne – wykonują co

najwyżej dwa razy więcej mnożeń niż wynosi długość liczby w postaci binarnej

informatyka +

23

(24)

Algorytm Euklidesa, 1

 Uważany za pierwszy algorytm – powstał 300 p.n.e.  Chociaż Chińczycy i Hindusi wcześniej tworzyli przepisy

obliczeniowe.

 Przez długie lata był synonimem algorytmu i od niego zaczynały wszystkie książki akademicki.

 Ma bardzo wiele zastosowań praktycznych i teoretycznych:

 arytmetyka, czyli obliczenia na liczbach całkowitych  kryptografia – RSA

 łamigłówki

 Przykład: Czy za pomocą naczyń 6 i 10 litrowych można napełnić pojemnik 15 litrami wody – wodę można dolewać lub pobierać z pojemnika tylko całymi naczyniami.

(25)

Algorytm Euklidesa, 2

Problem NWD(m,n) – Największy Wspólny Dzielnik

Dane: m, n – liczby naturalne (można przyjąć, że m ≤ n)

Wynik: NWD(m,n) – Największy wspólny dzielnik liczb m i n. Przykłady:

NWD(42,14) = 14 NWD(24,16) = 8

NWD(13,21) = 1 13 i 21 są względnie pierwsze

NWD(0,31) = 31 0 jest podzielne przez każdą liczbę

Zasada, wykorzystana w algorytmie – Twierdzenie o ilorazie i reszcie n = q*m + r, gdzie 0 ≤ r < m

q – iloraz, r – reszta.

(26)

Algorytm Euklidesa, 3

Wnioski:

1.Jeśli r = 0, to m dzieli n, czyli NWD(m,n) = m

2.Jeśli r ≠ 0, to mamy r = n – qm, czyli każda liczba, która dzieli n oraz m dzieli również r, w szczególności największa taka liczba.

Stąd mamy: NWD(m,n) = NWD(r,m) Przykład: NWD(25,70) = NWD(20,25) = NWD(5,20) = NWD(0,5) = 5 NWD(25,70): 70 = 2*25 + 20 NWD(20,25) 25 = 1*20 + 5 NWD(5,20) 20 = 4*5 + 0 r = 0, więc NWD( , ) = 5

Generowane liczby maleją: 70, 25, 20, 5, 0 więc algorytm jest skończony

(27)

Algorytm Euklidesa, 4 – dwie realizacje

program Euklides; var m,n,r:integer; begin read(m,n); while m>0 do begin r:=n mod m; n:=m; m:=r end; write(n) end.

informatyka +

27

Realizacja z funkcją: program Euklides_funkcja; var m,n:integer; function NWD(m,n:integer):integer; var r:integer; begin while m>0 do begin r:=n mod m; n:=m; m:=r end; NWD:=n end; begin read(m,n); writeln(NWD(m,n)) end. Funkcja Wywołanie funkcja

(28)

Algorytm Euklidesa, 5 – realizacja rekurencyjna

program Euklides_rekurencja; var m,n:integer; function NWD_rek(m,n:integer):integer; begin if m>n then NWD_rek:=NWD_rek(n,m) else if m = 0 then NWD_rek:=n

else NWD_rek:=NWD_rek(n mod m,m) end; begin read(m,n); writeln(NWD_rek(m,n)) End.

informatyka +

28

Funkcja rekurencyjna Wywołania rekurencyjne

(29)

Algorytm Euklidesa, 6 – zagadki

Przykład 1. Czy za pomocą naczyń 6 i 10 litrowych można napełnić

pojemnik 15 litrami wody – wodę można dolewać lub pobierać z pojemnika tylko całymi naczyniami.

Jeśli istnieje rozwiązanie, to istnieją takie x i y, że 6x + 10y = 15

Czy istnieją? Uzasadnij odpowiedź.

Rozwiązanie 1. W tym przypadku nie istnieje rozwiązanie. Istnieje, gdy

prawa strona jest wielokrotnością NWD(6,10).

Przykład 2. W jednym pojemniku są klocki o wysokości p, a w drugim – o

wysokości q. Czy zawsze można zbudować wieże z każdego rodzaju klocków, które mają tę samą wysokość? Jeśli jest to możliwe, to jaka jest najmniejsza wysokość takich wież?

Rozwiązanie 2. Zawsze możliwe. Najmniejsza wysokość NWW(p,q).

Pytanie 3. Jaki zachodzi związek między NWD(m,n) i NWW(m,n)?

Mamy NWW(m,n) = (m*n)/NWD(m,n)

(30)

Pokrewne zajęcia w Projekcie Informatyka +

Wykład+Warsztaty (Wszechnica Poranna):

• Wprowadzenie do algorytmiki i programowania – wyszukiwanie i porządkowanie informacji

• Proste rachunki wykonywane za pomocą komputera.

• Techniki algorytmiczne – przybliżone (heurystyczne) i dokładne.

Wykłady (Wszechnica Popołudniowa):

• Czy wszystko można policzyć na komputerze?

• Porządek wśród informacji kluczem do szybkiego wyszukiwania. • Dlaczego możemy się czuć bezpieczni w sieci, czyli o szyfrowaniu

informacji.

• Znajdowanie najkrótszych dróg, najniższych drzew, najlepszych małżeństw

(31)

Pokrewne zajęcia w Projekcie Informatyka +

Kursy (24 godz.) – Wszechnica na Kołach:

• Algorytmy poszukiwania i porządkowania. Elementy języka programowania

• Różnorodne algorytmy obliczeń i ich komputerowe realizacje • Grafy, algorytmy grafowe i ich komputerowe realizacje

Kursy (24 godz.) – Kuźnia Informatycznych Talentów – KIT dla Orłów:

• Przegląd podstawowych algorytmów • Struktury danych i ich wykorzystanie • Zaawansowane algorytmy

Tendencje – Wykłady

• Algorytmy w Internecie, K. Diks

• Czy P = NP, czyli jak wygrać milion dolarów w Sudoku, J. Grytczuk • Między przeszłością a przyszłość informatyki, M.M Sysło

(32)

Cytaty

Powiązane dokumenty

2) Jeśli (eps&lt;1) and (eps&gt;0) to przejdź do kroku 3, w przeciwnym wypadku przejdź do kroku 1 3) Ustaw początkową sumę szeregu: suma=1, numer wyrazu i=2; wartość

Można wykazać, (dowód pomijamy; wymaga on policzenia pewnego wyznacznika typu Vandermon- de’a), że te rozwiązania są istotnie liniowo niezależne, czyli że każde

Zestaw zadań 8: Konstrukcja pierścienia wielomianów jednej zmiennej.. Wartość wielomianu, pierwiastki wielomianu,

Twierdzenie orzekające o tym, że C jest ciałem algebraicznie domkniętym nosi nazwę zasadniczego twierdzenia algebry. Po raz pierwszy

[r]

Na lekcji dokończymy zadania z poprzedniego działu (102 i 103) i przejdziemy od razu do badania przebiegu zmienności funkcji.... Będzie wejściówka z tego

W naszym przykładzie funkcja jest wielomianem, czyli będzie miała pochodną w każdym punkcie.... W tym celu szukamy punktów krytycznych, czyli punktów, w których pochodna jest 0

Maximum gdy funkcja jest najpierw rosnąca, a potem malejąca... Szukamy ekstremów