wiele 46

Transkrypt

wiele 46
Algorytm Euklidesa
• Danymi są dwie nieujemne liczby całkowite m i n. Liczba k jest
największym wspólnym dzielnikiem m i n, jeśli dzieli m oraz n i jest
największą liczbą o tej własności - oznaczamy ją przez NWD(m, n).
• Algorytm Euklidesa znajduje największy wspólny dzielnik dwóch liczb. Jest
to jeden z algorytmów najczęściej przytaczanych w książkach
informatycznych i matematycznych. Powodem tego jest nie tylko szacunek
dla jego ''wieku'', ale to, że:
– ma wiele zastosowań w rozwiązywaniu problemów rachunkowych
– można na jego przykładzie zilustrować wiele podstawowych pojęć i własności
informatycznych (algorytm rekurencyjny i dowodzenie poprawności algorytmów)
– Algorytm ten Euklidesa zamieścił w swoim wiekopomnym dziele Elementy. Było
to około 300 roku p.n.e., a więc na długo przed pojawieniem się określenia
algorytm. Przypuszcza się, że ten algorytm był znany jeszcze wcześniej. Wiele
innych przepisów rachunkowych stosowano już w Babilonie blisko 1800 roku
p.n.e. Jednak nie nadaje się im takiego znaczenia, jak algorytmowi Euklidesa,
gdyż nie zawierają w sobie iteracji i wiele z nich zostało wypartych przez
współczesne metody.
Luty 2001
Algorytmy (8) 2000/2001
[email protected]
1
• Załóżmy, że n > m. Gdy podzielimy n przez m, otrzymamy równość
n = qm + r,
gdzie 0 < r <m
• Wielkości q i r są odpowiednio ilorazem i resztą z dzielenia n przez m.
• Jeśli r = 0, to NWD (m,n) = m, czyli jeśli jedna z liczb dzieli drugą bez
reszty, to mniejsza z tych liczb jest ich największym wspólnym dzielnikiem.
• Jeśli r = 0, to równość można zapisać w postaci r = n - qm; stąd wynika,że
każda liczba dzieląca n i m dzieli całe wyrażenie po prawej stronie tej
równości, a więc dzieli również r; zatem, największy wspólny dzielnik m i n
dzieli również resztę r.
• Te dwa wnioski można zapisać w postaci następującej równości:
NWD(m,n) = NWD(r,m)
w której przyjęliśmy, że NWD(0,m) = m, gdyż 0 jest podzielne przez każdą
liczbę różną od zera.
• Ponieważ r<m pierwszy element w parze argumentów w funkcji NWD
maleje. Ponieważ w obliczeniach występują jedynie liczby naturalne ten
malejący ciąg reszt musi być skończony (ostatecznie reszta jest równa zeru).
• 48=1*46+2 46=23*2+0
NWD(46,48)=NWD(2,46)=2
Luty 2001
Algorytmy (8) 2000/2001
[email protected]
2
• W algorytmie Euklidesa generujemy pary liczb o tym samym największym
wspólnym dzielniku, elementy tych par tworzą malejący ciąg liczb
naturalnych, a więc ten ciąg jest skończony i na jego końcu otrzymujemy
szukany dzielnik. UWAGA: iloraz q nie występuje w kolejnych iteracjach,
nie trzeba go zatem wyznaczać.
Algorytm Euklidesa z dzieleniem wyznaczania NWD
Dane: Dwie liczby naturalne m i n.
Wynik: NWD(m i n) - największy wspólny dzielnik m i n.
• Krok 1.
Jeśli m = 0, to n jest szukanym dzielnikiem. Zakończ algorytm.
• Krok 2.
r:=n mod m, n:= r. Wróć do kroku 1.
• Resztę r w kroku 2 można znaleźć przez kolejne odejmowanie m od n, co jest
źródłem dość popularnej realizacji algorytmu Euklidesa z odejmowaniem.
Porównajmy obie wersie algorytmu na parze danych 48 i 46.
• Pierwszy z algorytmów kończy on działanie po dwóch iteracjach kroku 2.
– Jeśli zastosujemy odejmowanie zamiast obliczenia wartości funkcji mod, w
pierszym kroku - wynik 48 mod 46 otrzymamy po wykonaniu jednego
odejmowania 46 od 48; Natomiast w drugiej iteracji kroku 2, wynik 46 mod 2
otrzymamy po wykonaniu dwudziestu trzech odejmowań.
Luty 2001
Algorytmy (8) 2000/2001
[email protected]
3
•
•
•
•
•
Przelewanie wody
Dysponując dwoma czerpakami o pojemności m=4 i n=6 litrów, pustym
pojemnikiem o nieograniczonej pojemności i nieograniczoną ilością wody
napełnij pojemnik k=14 litrami wody przy założeniu, że wodę można wlewać
lub wylewać z pojemnika tylko pełnymi czerpakami.
Oznaczmy przez x i y liczby „ruchów”czerpaków - przez ruch rozumiemy
różnicę „wlań” i wylań”. Aby zadanie miało rozwiązanie musi być:
mx + ny = k
Równanie to dla danych m, n i k ma rozwiązanie x i y gdy k jest równe
NWD(m,n) - k może być również wielokrotnością NWD(m,n).
Aby to zadanie rozwiązać należy zastosować algorytm Euklidesa niejako od
tyłu. Prowadzi to do tzw. rozszerzonej wersji algorytmu Euklidesa.
Przedstawiane równanie jest szczególnym przypadkiem równania
diofantycznego, w którym współczynniki są liczbami całkowitymi i
rozwiązanie również składa się z liczb całkowitych.
Luty 2001
Algorytmy (8) 2000/2001
[email protected]
4
•
•
•
•
Operacje na ułamkach zwykłych
Obliczanie największego wspólnego dzielnika dwóch liczb (NWD) ma
zastosowanie w obliczeniach, w których posługujemy się ułamkami
zwykłymi. Liczbę mającą postać p/q nazywamy ułamkiem zwykłym, gdy p i
q są liczbami względnie pierwszymi, tj. gdy ułamka nie można skrócić.
Jeśli ułamek nie jest zwykły, np. 12/16, to aby sprowadzić go do postaci
zwykłej, należy licznik i mianownik podzielić przez ich największy wspólny
dzielnik.
Aby wynik działań na ułamkach zwykłych był również ułamkiem zwykłym,
należy skrócić ułamki będące wynikami. występujące po prawej stronie tych
tożsamości, gdy jest to możliwe.
W obliczeniach komputerowych skracanie nie powinno być odkładane na
koniec obliczeń, by w obliczeniach nie pojawiały się niepotrzebne zbyt duże
liczby gdyż zakres liczb całkowitych jest niewielki.
Luty 2001
Algorytmy (8) 2000/2001
[email protected]
5
• Najmniejszą wspólną wielokrotnością liczb naturalnych m i n jest
najmniejsza liczba naturalna, która dzieli sie przez m i n - oznaczamy ją
przez NWW(m,n). Prawdziwy jest wzór:
NWW(m,n)•NWD(m,n)=mn
• NWD(m,n) występuje w iloczynie mn dwukrotnie: raz w m, raz w n.
• Ponieważ wielkość NWD(m,n) może być duża NWW wyznaczamy z:
NWW(m,n)=m•n/NWD(m,n)
Algorytm wyznaczania NWW
Dane: Dwie liczby naturalne m i n, m<=n.
Wynik: NWW(m,n) - najmniejsza wspólna wielokrotność m i n.
• Krok 1:
Oblicz NWD(m,n) {Zastosuj algorytm Euklidesa}
• Krok 2:
NWW(m,n) jest równa m(n div NWD(m,n))
Luty 2001
Algorytmy (8) 2000/2001
[email protected]
6
• Liczba naturalna jest pierwsza, jeśli dzieli się tylko przez 1 i przez siebie.
• Jest wiele słuszności w powiedzeniu, że wśród liczb naturalnych, liczby
pierwsze odgrywają rolę podobną do roli pierwiastków w chemii.
• Liczbę naturalną, która nie jest pierwszą, nazywa się liczbą złożoną.
• Liczba złożona ma więc dzielniki, które są różne od 1 i od niej samej.
• Czynnikiem liczby złożonej jest jej dzielnik, który jest liczbą pierwszą.
• Rozkładem liczby na czynniki (pierwsze) lub jej faktoryzacją nazywamy
przedstawienie liczby w postaci iloczynu jej czynników pierwszych z
uwzględnieniem ich krotności.
• Matematycy od dawna starali się podać wzór na liczby pierwsze. Pierre de
Frmat (1601-1655) twierdził, że dla każdego k, liczba 22^k +1 jest liczbą
pierwszą. Niestety mylił się dla k=5 nie jest to liczba pierwsza. Najczęściej
stosowanym wzorem na liczby pierwsze jest 2p -1, gdzie p jest liczbą
pierwszą. Na przykład dla p= 2, 3, 5, 7, 17, 31, 89 liczby tej postaci są
pierwsze. Ten wzór zasugerował ojciec Marin Meersenne (1588-1648) w
korespondencji z P. Fermatem i liczba pierwsza o tej postaci nazywa się
liczbą Mersenne'a.
Luty 2001
Algorytmy (8) 2000/2001
[email protected]
7
• Najczęściej są rozważane następujące dwa problemy związane z liczbami
pierwszymi:
– Sprawdzić czy dana liczba n jest liczbą pierwszą; jeśli nie jest, to podać jej
rozkład na czynniki.
– Znaleźć wszystkie liczby pierwsze w wybranym przedziale liczb lub znaleźć
dużą liczbę pierwszą.
• Liczby pierwsze są obecnie wykorzystywane w kryptografii do kodowania
wiadomości przesyłanych w sieciach komputerowych.
• Euklidesa (80 rok p.n.e.) już jednak ciekawiło, czy takich liczb jest dużo, i
udowodnił następujące twierdzenie, z którego wynika, że liczb pierwszych
jest nieskończenie wiele:
• Liczb pierwszych jest więcej niż jest ich
w jakimkolwiek skończonym zbiorze złożonym z liczb pierwszych.
• Największa znana liczba pierwsza została znaleziona w listopadzie 1996
roku. Jest ona liczbą Mersenne'a dla p = 1398269. Zawiera 420921 cyfr, a
sprawdzenie, że jest to rzeczywiście liczba pierwsza, trwało 88 godzin pracy
komputera IBM PC z procesorem 90 MHz Pentium.
Luty 2001
Algorytmy (8) 2000/2001
[email protected]
8
Rozkład liczby na czynniki pierwsze
• Dla danej liczby naturalnej n szukamy następującego jej przedstawienia
p1<=p2<=…pl
n=p1p2p3…pl
• Oczywista metoda znajdywania czynników pi polega na dzieleniu n przez
kolejne liczby pierwsze p=2, 3, 5, 7, 11.
• Jeżeli natrafimy na p takie, że n mod p = 0, czyli liczba n jest podzielna przez
p, to p jest najmniejszym dzielnikiem n.
• Postępowanie to powtarzamy dla liczby n równej n/p i dla każdych liczb
pierwszych, począwszy od p - gdyż p wielokrotnie wystąpić w rozkładzie.
• Jeżeli w jakimkolwiek momencie sprawdzania podzielność dla kolejnego p
okaże się, że liczba n nie jest podzielna przez p i część całkowita ilorazu n/p
nie jest większa niż p, to możemy przerwać obliczenia i stwierdzić, że
bieżąca liczba n jest liczbą pierwszą.
Jeżeli n nie jest liczbą pierwszą, to ma czynnik p spełniający warunek p<Sqrt(n).
Ponadto, każda liczba złożona ma w swoim rozkładzie na czynniki co
najwyżej jeden czynnik większy niż Sqrt(n).
Luty 2001
Algorytmy (8) 2000/2001
[email protected]
9
Sito Eratostenesa
• Najprostszym sposobem otrzymania wszystkich liczb pierwszych mniejszych
od danej liczby N jest usunięcie liczb złożonych ze zbioru wszystkich liczb
mniejszych od N. By wykonać to systematycznie usuwamy najpierw liczby
podzielne przez 2, później przez 3, następnie przez 5 aż do osiągnięcia liczby
pierwszej p, która spełnia nierówność p2>N.
• Metodę tę nazywa się sitem, gdyż efekt wykreślania liczb podzielnych przez
wybraną liczbę pierwszą można interpretować jako nastawienie oczek sita na
takie tylko liczby.
• W algorytmie zredukujemy niektóre działania opierając się na następujących
spostrzeżeniach:
– wystarczy rozpatrywać jedynie liczby nieparzyste, gdyż parzyste zostaną
przesiane w pierwszym kroku przez oczka nastawione na 2,
– jeśli p jest kolejną liczbą pierwszą, której mamy użyć do odsiania liczb złożonych
podzielnych przez p to wystarczy wyeliminować liczby postaci: p2, p(p+2),
p(p+4)…
– kolejnym uproszczeniem jest wykonywanie w algorytmie jedynie dodawań w
miejsce mnożeń - kolejna eliminowana liczba jest o 2p większa od poprzedniej.
Luty 2001
Algorytmy (8) 2000/2001
[email protected]
10
Obliczanie wartości pierwiastka kwadratowego
• Zadanie, w którego rozwiązaniu liczba iteracji wykonywanych przez
algorytm dla konkretnych danych zależy od wartości parametru zaliczamy do
działu algorytmiki nazywanego analizą numeryczną.
• Wartość pierwiastka kwadratowego z liczby a można wyznaczyć również za
pomocą metody iteracyjnej, w której rozpoczynając obliczenia od wybranego
rozwiązania początkowego (przybliżenia szukanej wartości pierwiastka)
budujemy ciąg o wartościach zbliżających się do dokładnej wartości.
• Interpretacja geometryczna: przypuśćmy, że znamy pole kwadratu a i chcemy
znaleźć długość jego boku.
– Jako wartość przybliżoną pierwiastka możemy wybrać x, ale wtedy, aby pole
kwadratu nie uległo zmianie drugi bok musi być równy a/x.
– O tym, jak dobrze wybraliśmy przybliżenie świadczy różnica między długościami
boków prostokąta (różnica x i a/x.
– Jeśli wielkości te nie są sobie równe szukana wartość pierwiastka leży między
nimi a za kolejne przybliżenie możemy przyjąć ich średnią arytmetyczną.
– xi+1=0.5(xi+a/xi)
Luty 2001
Algorytmy (8) 2000/2001
[email protected]
11
• Wyróżnia się dwa kryteria zakończenia obliczeń w metodach iteracyjnych:
– gdy wykonano już podaną przez nas liczbę iteracji,
– dwa kolejne przybliżenia leżą dostatecznie blisko siebie - wówczas wśród danych
podajemy wartość parametru Eps, którą można nazywać dokładnością obliczeń i
sprawdzamy warunek | xi+1| < Eps
Algorytm Newtona-Raphsona (metoda Herona)
Dane: Liczba podpierwiastkowa a > 0, początkowe przybliżenie wartości
pierw. p, maksymalna liczba iteracji MaxIter, dokładność obliczeń Eps.
Wynik: Przybliżona wartość pierwiastka kwadratowego z a, otrzymana po
wykonaniu nie więcej niż MaxIter iteracji lub po osiągnięciu
dokładności Eps.
• Krok 1.
Iter : = 0.
• Krok 2.
x: = (p + a/p )/2; Iter := Iter + 1.
• Krok 3.
Jeśli Iter = MaxIter lub |p-x| < Eps, to zakończ algorytm -x jest
szukaną wartością przybliżoną pierwiastka kwadratowego z
liczby a.
• Krok 4.
Przyjmij p := x i wróć do kroku 2.
Luty 2001
Algorytmy (8) 2000/2001
[email protected]
12