124
LOG Time LOG Space PTIME NPTIME NPC co-NPTIME PSPACE EXPTIME EXPSPACE . . . ELEMENTARY . . . EXPTIME R Zlożoność obliczeniowa. „Trudne” zadania wer. z drobnymi modykacjami! Wojciech Myszka -- :: +

Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

LOGTime

LOGSpace

PTIME NPTIME

NPC

co-NPTIM

E

PSPACEEXPTIMEEXPSPACE

...ELEMENTARY...2EXPTIME

R

Złożoność obliczeniowa.„Trudne” zadaniawer. 14 z drobnymi modyfikacjami!

Wojciech Myszka

2021-01-04 18:07:04 +0100

Page 2: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Część IPoprawność algorytmów

Page 3: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Błędy

I Każdy program ma błędy.I Tak długo, jak używany jest jedynie do zabawy — nie odgrywa to większej roli.I Programy komercyjne. . .

Page 4: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

LicencjaGwarancja. Produkt jest zaprojektowany i oferowany jako produkt ogólnego zastosowania, a nie dla określonego celujakiegokolwiek użytkownika. Licencjobiorca uznaje, ze Produkty mogą być wadliwe. W związku z powyższymzdecydowanie zaleca się Licencjobiorcy systematyczną archiwizację plików.[...]Produkt będzie działał zasadniczo zgodnie z załączonymi do Produktu materiałami drukowanymi, oraz (b) usługi pomocytechnicznej świadczone przez firmę XXX będą zasadniczo zgodne z opisem zamieszczonym w odpowiednich materiałachdrukowanych dostarczonych Licencjobiorcy przez firmę XXX, a pracownicy pomocy technicznej firmy XXX podejmąuzasadnione działania i wysiłki w celu rozwiązania ewentualnych problemów.[...]Ograniczenie Odpowiedzialności . W maksymalnym zakresie dozwolonym przez prawo właściwe i z wyjątkiempostanowień gwarancji firmy XXX, firma XXX oraz jej dostawcy nie będą ponosić odpowiedzialności za żadne szkody[...]W każdym przypadku, całkowita odpowiedzialność firmy XXX na podstawie niniejszej Umowy jest ograniczona do kwotyrzeczywiście zapłaconej przez Licencjobiorcę za Produkt. [...]

Page 5: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Bug

Błędy, w żargonie informatyków zwykło się nazywać „pluskwami” (czy może, raczejrobalami?). Po angielsku — bug.Anegdota mówi, że w 1947 roku Grace Murray Hopper (autorkaCobola) korzystała z komputera (działającego na przekaźnikach— Harvard Mark II). Pojawiły się problemy z jego pracą. Pobadaniach, okazało się, że jakiś „robaczek latający” wpadłmiędzy styki przekaźnika. Sporządzono raport, który zachowałsię do dziś. . .

Page 6: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Section 3Czy są programy wolne od błędów?

Page 7: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Czy są programy wolne od błędów?I Dobre pytanie.

I Właściwie nie ma. . .I . . . ale

Page 8: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Czy są programy wolne od błędów?I Dobre pytanie.I Właściwie nie ma. . .

I . . . ale

Page 9: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Czy są programy wolne od błędów?I Dobre pytanie.I Właściwie nie ma. . .I . . . ale

Page 10: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Czy są programy wolne od błędów?I Dobre pytanie.I Właściwie nie ma. . .I . . . ale

Page 11: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Donald Knuth i TEXWięcej na temat tego w jaki sposób efekt ten osiągnął Donald Knuth poczytać można nastronach Wikipedii: http://en.wikipedia.org/wiki/Knuth_reward_check,a przyklady czeków wystawionych przez Knutha polskim użytkownikom TEXa na stronachGUST: http://www.gust.org.pl/dek-checks/index_html

Page 12: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Uruchamianie programów i badanie ich poprawności

I Szacuje się, że ponad 70% nakładów na opracowanie złożonych systemówoprogramowania pochłania usuwanie błędów.I Komputery — zasadniczo — są nieomylne. Psują się, ale przypadki, że generująbłędne obliczenia są tak rzadkie, że spokojnie mówimy iż są nieomylne. . .I Mylą się ludzie:

I na etapie opracowania algorytmu,I na etapie jego programowania,I podczas przygotowania danych,I podczas obsługi programu,I podczas interpretacji wyników.

Page 13: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

O nieomylności komputerów II Czerwiec 1994: Testerzy firmy Intel zauważyli, że procesor „źle liczy” (błąd w instrukcjidzielenia). Kierownictwo uznało, że problem nie dotknie zbyt wielu użytkowników.I 19 października: Jeden z użytkowników zauważa błąd i nabiera pewności, że toprocesor (Pentium).

4195835.0/3145727.0 = 1.333 820 449 136 241 002 (Correct value)4195835.0/3145727.0 = 1.333 739 068 902 037 589 (Flawed Pentium)

I 24 października: zgłasza błąd do Intela, osoba odpowiedzialna za kontakt z klientempotwierdza błąd (odtwarza go), i mówi, że nikt jeszcze go nie zgłosił.I 30 października „odkrywca” sprawę upublicznia (kilku swoim znajomym).I 3 listopada informacja o błędzie pojawia się na grupie dyskusyjnej.I 7 listopada Intel przyznaje się publicznie do błędu i ogłasza, że kolejne wydaniaprocesora były już od niego wolne.I 23 listopada pierwszy z producentów oprogramowania matematycznego(Mathworks) wypuszcza wersję Matlaba z modyfikacjami niwelującymi błąd.

Page 14: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

O nieomylności komputerów III 24 listopada okazuje się, że Intel ciągle sprzedaje błędne procesory.I 30 listopada Intel przedstawia dokładny raport opisujący problem (i potencjalne jegokonsekwencje) [1]. Za późno!I 12 grudnia IBM publikuje swój własny raport oceniający znacznie poważniejkonsekwencje błędu i ogłasza, że wstrzymuje sprzedaż komputerów PC z procesoremIntela.I 16 grudnia — akcje Intela spadają o 3,25$ (ok. 5%)I 20 grudnia: Intel przeprasza i obiecuje bezpłatnie wymienić wadliwe procesory nażądanie.

(Na podstawie [2])

Page 15: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Przyczyny problemów Intela I1. Niechęć Intela do poinformowania o problemie swoich najważniejszych klientów.2. Niepoinformowanie swojej pomocy technicznej, co uniemożliwiło traktowaniezgłaszających błąd w sposób specjalny.3. Pierwsze informacje Intela na temat problemu były odbierane przez wszystkich (pozafirmą) jako niezadowalające i zdawkowe.4. Nowy procesor Intela (Pentium) był przedmiotem bardzo intensywnej kampaniireklamowej.5. Błąd dotyczył bardzo podstawowej operacji, którą łatwo było zademonstrowaćniefachowcom.6. Błąd został wykryty na bardzo późnym etapie testowania procesora (po tym jakbardzo wiele procesorów zostało już sprzedanych).7. Internet i sposób jego funkcjonowania.8. Poważny konkurent firmy (IBM) zdecydował się na opublikowanie własnych analizprzedstawiających w innym świetle problem.

Page 16: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Znaczenie błęduFailure category and systemcomponent HardorSoft

FIT rate(per 109devicehours)

MTBF(1 in xyears)Rate of significant failure seenby user

16 4-Mbit DRAM parts in a 60MhzPentium TM processor systemwithout ECCSoft 16 7years Depends upon where defectoccurs and how propagated

Particle defects in PentiumTMprocessor Hard 400-500 200-250yearsDepends upon where defectoccurs and how propagated

16 4-Mbit DRAM parts in a 60MhzPentium TM processor system withECCSoft 160 700years Depends upon where defectoccurs and how propagated

PC user on spreadsheet running1,000 independent divides a day onthe PentiumTM processor aHard 3.3 27,000years Less frequent than 1 in 27,000years. Depends upon the wayinaccurate result gets used

Na podstawie [1]

Page 17: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Znaczenie błęduClass Applications MTBF Impact of failurein div/rem/tranWordprocessing Microsoft Word, Wordperfect, etc. Never NoneSpreadsheets(basic user) 123, Excel, QuattroPro (basic user runs fewer than1000 div/day) 27,000years UnnoticeablePublishing,Graphics Print Shop, Adobe Acrobat viewers 270years Impact only onViewingPersonalMoneyManagement

Quicken, Money, Managing Your Money, SimplyMoney, TurboTax (fewer than 14,000 divides per day) 2,000years Unnoticeable

Games X-Wing, Falcon (flight simulator), Strategy Games 270years Impact is benign,(since game)

Na podstawie [1]

Page 18: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Znaczenie błęduUsage Examples Divisionintensive ImpactStandardspreadsheetanalysis

Corporate finance,budget or marketinganalysis,No None

Basic financialcalculations Present value, yield tomaturity Some Significant only in the extremecircumstance of > 10 million divisionsper dayComplexmathematicalmodelsBlack-Scholes model,Binomial model Some Could be significant on continuous use

Path basedmodels andsimulationsMonte Carlo risk analysis,non recombining paths Yes Significant unless there is a low P2factor.

Na podstawie [1]

Page 19: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Meltdown & Spectre

Page 20: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Section 5Formalne badanie poprawności algorytmów

Page 21: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Jeszcze jedna definicja algorytmu

Zadanie algorytmiczne można scharakteryzować zwięźle jako złożone z:1. zbioru I dopuszczalnych danych wejściowych2. zależności Rmiędzy danymi a żądanymi wynikami O

R : I → O

Page 22: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Poprawność częściowa i całkowita

Algorytm A jest częściowo poprawny względem I i R, gdy dla każdego zestawu danych X zI, jeżeli A uruchomiony dla X zatrzyma się, to relacja Rmiędzy X a otrzymanym zestawemwyników jest spełniona.Częściowo poprawny algorytm sortowania mógłby zatrzymywać się nie dla wszystkich listdopuszczalnych, ale zatrzymując się, zawsze da w wyniku listę uporządkowaną poprawnie.Algorytm całkowicie poprawny— poprawnie rozwiązuje zadanie dla każdego zestawudanych X z I: zawsze się zatrzymuje dając poprawne wyniki.

Page 23: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Poprawność częściowa i całkowita

Page 24: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Czy trzeba udowadniać poprawność algorytmów?

I Systemy bankowe. . .I Systemy sterowania rakietami (balistycznymi)I Pojazdy „kosmiczne”I Systemy nadzoru chorychI System ABSI . . .

A praktyka jest taka (wedle powiedzonek): oprogramowanie udostępnia się użytkownikomnie wtedy, kiedy jego poprawność staje się pewna, ale wtedy, gdy szybkość odkrywanianowych błędów spada do poziomu, który może być zaakceptowany. . .

Page 25: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Jak to się robi?

I Ba!

I Dla każdego poprawnego algorytmu można ściśle wykazać, że jest on poprawny.I Inna sprawa, czy to łatwo zrobić. . .

Page 26: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Jak to się robi?

I Ba!I Dla każdego poprawnego algorytmu można ściśle wykazać, że jest on poprawny.

I Inna sprawa, czy to łatwo zrobić. . .

Page 27: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Jak to się robi?

I Ba!I Dla każdego poprawnego algorytmu można ściśle wykazać, że jest on poprawny.I Inna sprawa, czy to łatwo zrobić. . .

Page 28: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Jak to się robi? cd

Obowiązują ogólne zasady:I Z tego, że program działa poprawnie dla każdego zestawu danych, który„wypróbowaliśmy” nie wynika wcale, że działa dobrze dla innych zestawów.

I Jeżeli uda się nam znaleźć jeden jedyny dopuszczalny zestaw danych, dla któregoprogram działa źle — to jest zły.Idealna sytuacja dla osób, które potrafią być tylko destrukcyjne!

Page 29: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Jak to się robi? cd

Obowiązują ogólne zasady:I Z tego, że program działa poprawnie dla każdego zestawu danych, który„wypróbowaliśmy” nie wynika wcale, że działa dobrze dla innych zestawów.I Jeżeli uda się nam znaleźć jeden jedyny dopuszczalny zestaw danych, dla któregoprogram działa źle — to jest zły.

Idealna sytuacja dla osób, które potrafią być tylko destrukcyjne!

Page 30: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Jak to się robi? cd

Obowiązują ogólne zasady:I Z tego, że program działa poprawnie dla każdego zestawu danych, który„wypróbowaliśmy” nie wynika wcale, że działa dobrze dla innych zestawów.I Jeżeli uda się nam znaleźć jeden jedyny dopuszczalny zestaw danych, dla któregoprogram działa źle — to jest zły.

Idealna sytuacja dla osób, które potrafią być tylko destrukcyjne!

Page 31: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Jak to się robi? cdcd

I Zazwyczaj zależy nam, żeby algorytm kiedyś się zatrzymał.

I Aby wykazać, że algorytm kiedyś się zatrzyma można wybrać jakąś wielkość zależnąod zmiennych i struktur danych algorytmu i wykazać, że wielkość ta jest zbieżna.I Jest mi bardzo przykro, że przypomina to Analizę Matematyczną. . .

Page 32: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Jak to się robi? cdcd

I Zazwyczaj zależy nam, żeby algorytm kiedyś się zatrzymał.I Aby wykazać, że algorytm kiedyś się zatrzyma można wybrać jakąś wielkość zależnąod zmiennych i struktur danych algorytmu i wykazać, że wielkość ta jest zbieżna.

I Jest mi bardzo przykro, że przypomina to Analizę Matematyczną. . .

Page 33: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Jak to się robi? cdcd

I Zazwyczaj zależy nam, żeby algorytm kiedyś się zatrzymał.I Aby wykazać, że algorytm kiedyś się zatrzyma można wybrać jakąś wielkość zależnąod zmiennych i struktur danych algorytmu i wykazać, że wielkość ta jest zbieżna.I Jest mi bardzo przykro, że przypomina to Analizę Matematyczną. . .

Page 34: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Prosty przykładOdwracanie napisu

I Mamy pewien napis S zbudowany z ciągu symboli (na przykład zdanie językanaturalnego).I Zadanie polega na stworzeniu procedury odwrócone(S) zwracającej symbolew kolejności odwrotnej.I odwrócone("Ala ma kota")→ "atok am alA"

Page 35: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Odwracanie napisuSchemat blokowy

I λ to pusty napisI głowa(X) to funkcja zwracająca pierwszy symbol znapisu X; głowa("Ala ma kota")="A"I „·” to operator konkatenacji (łączenia napisów); "Ala"·"ma kota"="Ala ma kota"I ogon(X) to funkcja zwracająca napis X „bez głowy”;

ogon("Ala ma kota")="la ma kota"

Page 36: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Odwracanie napisuSchemat blokowy

I λ to pusty napisI głowa(X) to funkcja zwracająca pierwszy symbol znapisu X; głowa("Ala ma kota")="A"I „·” to operator konkatenacji (łączenia napisów); "Ala"·"ma kota"="Ala ma kota"I ogon(X) to funkcja zwracająca napis X „bez głowy”;

ogon("Ala ma kota")="la ma kota"

Start

X ← S

Y ← λ

X = λ?

drukuj Y

Koniec

Y ← glowa(X) · Y

X ← ogon(X)

NIETAK

.

Page 37: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Odwracanie napisuSchemat blokowy

I λ to pusty napis

I głowa(X) to funkcja zwracająca pierwszy symbol znapisu X; głowa("Ala ma kota")="A"I „·” to operator konkatenacji (łączenia napisów); "Ala"·"ma kota"="Ala ma kota"I ogon(X) to funkcja zwracająca napis X „bez głowy”;

ogon("Ala ma kota")="la ma kota"

Start

X ← S

Y ← λ

X = λ?

drukuj Y

Koniec

Y ← glowa(X) · Y

X ← ogon(X)

NIETAK

.

Page 38: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Odwracanie napisuSchemat blokowy

I λ to pusty napisI głowa(X) to funkcja zwracająca pierwszy symbol znapisu X; głowa("Ala ma kota")="A"

I „·” to operator konkatenacji (łączenia napisów); "Ala"·"ma kota"="Ala ma kota"I ogon(X) to funkcja zwracająca napis X „bez głowy”;

ogon("Ala ma kota")="la ma kota"

Start

X ← S

Y ← λ

X = λ?

drukuj Y

Koniec

Y ← glowa(X) · Y

X ← ogon(X)

NIETAK

.

Page 39: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Odwracanie napisuSchemat blokowy

I λ to pusty napisI głowa(X) to funkcja zwracająca pierwszy symbol znapisu X; głowa("Ala ma kota")="A"I „·” to operator konkatenacji (łączenia napisów); "Ala"·"ma kota"="Ala ma kota"

I ogon(X) to funkcja zwracająca napis X „bez głowy”;ogon("Ala ma kota")="la ma kota"

Start

X ← S

Y ← λ

X = λ?

drukuj Y

Koniec

Y ← glowa(X) · Y

X ← ogon(X)

NIETAK

.

Page 40: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Odwracanie napisuSchemat blokowy

I λ to pusty napisI głowa(X) to funkcja zwracająca pierwszy symbol znapisu X; głowa("Ala ma kota")="A"I „·” to operator konkatenacji (łączenia napisów); "Ala"·"ma kota"="Ala ma kota"I ogon(X) to funkcja zwracająca napis X „bez głowy”;

ogon("Ala ma kota")="la ma kota"

Start

X ← S

Y ← λ

X = λ?

drukuj Y

Koniec

Y ← glowa(X) · Y

X ← ogon(X)

NIETAK

.

Page 41: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Działanie algorytmu

Algorytm działa w kółko, kolejno „odrywając” symbole z końca S i dołączając je napoczątku nowo tworzonego napisu Y. Początkowo napis rozpoczyna jako pusty. Procedurakończy się, kiedy nic już nic nie zostanie do oderwania z S. Odrywania dokonuje sięużywając zmiennej X, której początkowo nadaje się wartość S, tak aby nie niszczyćoryginalnej wartości S.

Page 42: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Badanie poprawności

Idea postępowania:I Tworzymy „punkty kontrolne” (asercje).I Pierwsza z nich „kontroluje” dane wejściowe (czy zgodne z założeniami).I Ostatnia — „sprawdza” wynik.I Najistotniejsza jest jednak druga. Nadzoruje ona sytuację przedpodjęciem decyzji czy potrzebne jest jest jeszcze jedno wykonanie pętliczy należy już kończyć. Stwierdza ona, że w punkcie kontrolnym (2)połączone wartości X i Y tworzą początkowy napis (przy czym Y jestodwrócony!)

Pokazać powinniśmy, że wszystkie asercje są niezmiennikami, to znaczy, że podczaskażdego wykonania algorytmu są prawdziwe (dla danych dopuszczalnych!)

Page 43: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Badanie poprawności, cdI Sztuczka polega na tym, że rozpatruje się wszystkie możliwe drogipodążania procesora z jednego punktu kontrolnego do następnego.

I W przypadku tego algorytmu możliwe są trzy drogi: z (1) do (2), z(2) do (3) i z (2) do (2)I Pierwsza z nich przechodzona jest tylko jeden raz — na samympoczątkuI Druga z nich co najwyżej jeden raz gdy algorytm się zatrzymuje.I Trzecia przechodzona będzie wiele razy (ile?)

Zauważmy, że w żadnym odcinku nie występują już pętle. Instrukcje sądosyć proste. . .Idea postępowania polega na pokazaniu, że jeśli asercja na początkuodcinka jest prawdziwa i rzeczywiście przejdziemy ten odcinek to asercjana końcu odcinka również będzie prawdziwa kiedy do niej dotrzemy.

Page 44: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Badanie poprawności, cd

I Sztuczka polega na tym, że rozpatruje się wszystkie możliwe drogipodążania procesora z jednego punktu kontrolnego do następnego.

I W przypadku tego algorytmu możliwe są trzy drogi: z (1) do (2), z(2) do (3) i z (2) do (2)I Pierwsza z nich przechodzona jest tylko jeden raz — na samympoczątkuI Druga z nich co najwyżej jeden raz gdy algorytm się zatrzymuje.I Trzecia przechodzona będzie wiele razy (ile?)

Zauważmy, że w żadnym odcinku nie występują już pętle. Instrukcje sądosyć proste. . .Idea postępowania polega na pokazaniu, że jeśli asercja na początkuodcinka jest prawdziwa i rzeczywiście przejdziemy ten odcinek to asercjana końcu odcinka również będzie prawdziwa kiedy do niej dotrzemy.

Page 45: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Badanie poprawności, cd

I Sztuczka polega na tym, że rozpatruje się wszystkie możliwe drogipodążania procesora z jednego punktu kontrolnego do następnego.I W przypadku tego algorytmu możliwe są trzy drogi: z (1) do (2), z(2) do (3) i z (2) do (2)

I Pierwsza z nich przechodzona jest tylko jeden raz — na samympoczątkuI Druga z nich co najwyżej jeden raz gdy algorytm się zatrzymuje.I Trzecia przechodzona będzie wiele razy (ile?)

Zauważmy, że w żadnym odcinku nie występują już pętle. Instrukcje sądosyć proste. . .Idea postępowania polega na pokazaniu, że jeśli asercja na początkuodcinka jest prawdziwa i rzeczywiście przejdziemy ten odcinek to asercjana końcu odcinka również będzie prawdziwa kiedy do niej dotrzemy.

Page 46: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Badanie poprawności, cd

I Sztuczka polega na tym, że rozpatruje się wszystkie możliwe drogipodążania procesora z jednego punktu kontrolnego do następnego.I W przypadku tego algorytmu możliwe są trzy drogi: z (1) do (2), z(2) do (3) i z (2) do (2)I Pierwsza z nich przechodzona jest tylko jeden raz — na samympoczątku

I Druga z nich co najwyżej jeden raz gdy algorytm się zatrzymuje.I Trzecia przechodzona będzie wiele razy (ile?)

Zauważmy, że w żadnym odcinku nie występują już pętle. Instrukcje sądosyć proste. . .Idea postępowania polega na pokazaniu, że jeśli asercja na początkuodcinka jest prawdziwa i rzeczywiście przejdziemy ten odcinek to asercjana końcu odcinka również będzie prawdziwa kiedy do niej dotrzemy.

Page 47: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Badanie poprawności, cd

I Sztuczka polega na tym, że rozpatruje się wszystkie możliwe drogipodążania procesora z jednego punktu kontrolnego do następnego.I W przypadku tego algorytmu możliwe są trzy drogi: z (1) do (2), z(2) do (3) i z (2) do (2)I Pierwsza z nich przechodzona jest tylko jeden raz — na samympoczątkuI Druga z nich co najwyżej jeden raz gdy algorytm się zatrzymuje.

I Trzecia przechodzona będzie wiele razy (ile?)Zauważmy, że w żadnym odcinku nie występują już pętle. Instrukcje sądosyć proste. . .Idea postępowania polega na pokazaniu, że jeśli asercja na początkuodcinka jest prawdziwa i rzeczywiście przejdziemy ten odcinek to asercjana końcu odcinka również będzie prawdziwa kiedy do niej dotrzemy.

Page 48: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Badanie poprawności, cd

I Sztuczka polega na tym, że rozpatruje się wszystkie możliwe drogipodążania procesora z jednego punktu kontrolnego do następnego.I W przypadku tego algorytmu możliwe są trzy drogi: z (1) do (2), z(2) do (3) i z (2) do (2)I Pierwsza z nich przechodzona jest tylko jeden raz — na samympoczątkuI Druga z nich co najwyżej jeden raz gdy algorytm się zatrzymuje.I Trzecia przechodzona będzie wiele razy (ile?)

Zauważmy, że w żadnym odcinku nie występują już pętle. Instrukcje sądosyć proste. . .Idea postępowania polega na pokazaniu, że jeśli asercja na początkuodcinka jest prawdziwa i rzeczywiście przejdziemy ten odcinek to asercjana końcu odcinka również będzie prawdziwa kiedy do niej dotrzemy.

Page 49: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Badanie poprawności, cd

I Sztuczka polega na tym, że rozpatruje się wszystkie możliwe drogipodążania procesora z jednego punktu kontrolnego do następnego.I W przypadku tego algorytmu możliwe są trzy drogi: z (1) do (2), z(2) do (3) i z (2) do (2)I Pierwsza z nich przechodzona jest tylko jeden raz — na samympoczątkuI Druga z nich co najwyżej jeden raz gdy algorytm się zatrzymuje.I Trzecia przechodzona będzie wiele razy (ile?)

Zauważmy, że w żadnym odcinku nie występują już pętle. Instrukcje sądosyć proste. . .Idea postępowania polega na pokazaniu, że jeśli asercja na początkuodcinka jest prawdziwa i rzeczywiście przejdziemy ten odcinek to asercjana końcu odcinka również będzie prawdziwa kiedy do niej dotrzemy.

Page 50: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Asercje. . .

I Przebieg algorytmu składa się z odcinków oddzielonych punktami kontrolnymi.

I Jeżeli dla każdego odcinka z prawdziwości asercji początkowej wynika prawdziwośćasercji końcowej. . .I I jeśli pierwsza asercja w całym ciągu odpowiada poprawności danych wejściowych (zgóry jest przyjęta za prawdziwą). . .I To prawdziwość asercji propaguje się wzdłuż całego ciągu. . .I Zatem prawdziwa będzie i asercja końcowa. . .I Co gwarantuje częściową poprawność algorytmu.

Page 51: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Asercje. . .

I Przebieg algorytmu składa się z odcinków oddzielonych punktami kontrolnymi.I Jeżeli dla każdego odcinka z prawdziwości asercji początkowej wynika prawdziwośćasercji końcowej. . .

I I jeśli pierwsza asercja w całym ciągu odpowiada poprawności danych wejściowych (zgóry jest przyjęta za prawdziwą). . .I To prawdziwość asercji propaguje się wzdłuż całego ciągu. . .I Zatem prawdziwa będzie i asercja końcowa. . .I Co gwarantuje częściową poprawność algorytmu.

Page 52: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Asercje. . .

I Przebieg algorytmu składa się z odcinków oddzielonych punktami kontrolnymi.I Jeżeli dla każdego odcinka z prawdziwości asercji początkowej wynika prawdziwośćasercji końcowej. . .I I jeśli pierwsza asercja w całym ciągu odpowiada poprawności danych wejściowych (zgóry jest przyjęta za prawdziwą). . .

I To prawdziwość asercji propaguje się wzdłuż całego ciągu. . .I Zatem prawdziwa będzie i asercja końcowa. . .I Co gwarantuje częściową poprawność algorytmu.

Page 53: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Asercje. . .

I Przebieg algorytmu składa się z odcinków oddzielonych punktami kontrolnymi.I Jeżeli dla każdego odcinka z prawdziwości asercji początkowej wynika prawdziwośćasercji końcowej. . .I I jeśli pierwsza asercja w całym ciągu odpowiada poprawności danych wejściowych (zgóry jest przyjęta za prawdziwą). . .I To prawdziwość asercji propaguje się wzdłuż całego ciągu. . .

I Zatem prawdziwa będzie i asercja końcowa. . .I Co gwarantuje częściową poprawność algorytmu.

Page 54: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Asercje. . .

I Przebieg algorytmu składa się z odcinków oddzielonych punktami kontrolnymi.I Jeżeli dla każdego odcinka z prawdziwości asercji początkowej wynika prawdziwośćasercji końcowej. . .I I jeśli pierwsza asercja w całym ciągu odpowiada poprawności danych wejściowych (zgóry jest przyjęta za prawdziwą). . .I To prawdziwość asercji propaguje się wzdłuż całego ciągu. . .I Zatem prawdziwa będzie i asercja końcowa. . .

I Co gwarantuje częściową poprawność algorytmu.

Page 55: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Asercje. . .

I Przebieg algorytmu składa się z odcinków oddzielonych punktami kontrolnymi.I Jeżeli dla każdego odcinka z prawdziwości asercji początkowej wynika prawdziwośćasercji końcowej. . .I I jeśli pierwsza asercja w całym ciągu odpowiada poprawności danych wejściowych (zgóry jest przyjęta za prawdziwą). . .I To prawdziwość asercji propaguje się wzdłuż całego ciągu. . .I Zatem prawdziwa będzie i asercja końcowa. . .I Co gwarantuje częściową poprawność algorytmu.

Page 56: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Co teraz trzeba zrobić?

Udowodnić należy trzy twierdzenia:(1→ 2) Dla każdego napisu S po wykonaniu dwóch instrukcji X ← S; Y ← λ będziespełniona równość S = odwrócone(Y) · X

(2→ 3) Jeśli S = odwrócone(Y) · X i X = λ to Y = odwrócone(S)(2→ 2) Jeśli S = odwrócone(Y) · X i X 6= λ to po wykonaniu instrukcji

Y ← głowa(X) · Y; X ← ogon(X) zachodzi równość S = odwrócone(Y) · Xdla nowych wartości X i Y.

Page 57: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Co teraz trzeba zrobić?

Udowodnić należy trzy twierdzenia:(1→ 2) Dla każdego napisu S po wykonaniu dwóch instrukcji X ← S; Y ← λ będziespełniona równość S = odwrócone(Y) · X(2→ 3) Jeśli S = odwrócone(Y) · X i X = λ to Y = odwrócone(S)

(2→ 2) Jeśli S = odwrócone(Y) · X i X 6= λ to po wykonaniu instrukcjiY ← głowa(X) · Y; X ← ogon(X) zachodzi równość S = odwrócone(Y) · Xdla nowych wartości X i Y.

Page 58: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Co teraz trzeba zrobić?

Udowodnić należy trzy twierdzenia:(1→ 2) Dla każdego napisu S po wykonaniu dwóch instrukcji X ← S; Y ← λ będziespełniona równość S = odwrócone(Y) · X(2→ 3) Jeśli S = odwrócone(Y) · X i X = λ to Y = odwrócone(S)(2→ 2) Jeśli S = odwrócone(Y) · X i X 6= λ to po wykonaniu instrukcji

Y ← głowa(X) · Y; X ← ogon(X) zachodzi równość S = odwrócone(Y) · Xdla nowych wartości X i Y.

Page 59: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Dowód

Zacznijmy od (1→ 2). Po wykonaniu X ← S zmienna X ma wartość S, a po wykonaniujeszcze Y ← λ zmienna Y zawiera napis pusty.Czyli odwrócone(Y) = odwrócone(λ), zatem odwrócone(Y) · X = λ · X = X.Równością, która miała zachodzić po wykonaniu tych dwu instrukcji jest więc po prostuS = X. Co kończy dowód.W analogiczny sposób można pokazać (2→ 3).

Page 60: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Dowód cdPokażemy teraz, że (2→ 2), czyli jeśli spełniona jest asercja 2 i pętla będzie wykonana jeden raz toasercja zostanie spełniona i po tym wykonaniu.Załóżmy, że X 6= λ (czyli w szczególności, że X ma i głową i ogon — puste napisy ich nie mają) i żenapis S jest dokładnie taki sam jak odwrócone(Y) · X.Wykonujemy teraz działania:

Y ← głowa(X) · Y i X ← ogon(X)

zatemodwrócone(Y) · X =

odwrócone(głowa(X) · Y) · ogon(X) =odwrócone(Y) · głowa(X) · ogon(X) =

odwrócone(Y) · X

Page 61: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Wnioski

Pokazaliśmy, że wszystkie asercje są spełnione. Zatem algorytm jest częściowo poprawny(czyli — jeżeli się zatrzyma to daje poprawne wyniki.Jak pokazać, że zatrzyma się dla każdych poprawnych danych?Jedynie miejsce gdzie algorytm może się „zapętlić” to ścieżka (2→ 2). Ale na tej ścieżceza każdym razem dokonywana jest operacja „odcinania głowy” od X co powoduje, że zakażdym razem X jest krótszy.Gdy X będzie napisem jednoliterowym— odcięcie głowy stworzy pusty ciąg znaków.Zatem algorytm jest poprawny!

Page 62: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

I po co to wszystko?1. Algorytm był prosty, a dowód zagmatwany (i mocno matematyczny).2. Jego istota polega na odpowiednim doborze punktów kontrolnych (początek i koniecalgorytmu, oraz kilka takich innych miejsc między innymi tak dobranych abylikwidować pętle.3. Ważną sprawą jest dobór „niezmienników” (asercji).4. Na koniec należy dobrać „warunek stopu” czyli taki „parametr” o którym możnapowiedzieć że w trakcie wykonywania algorytmu będzie zmierzał do jakiejś wartości(będzie zbieżny).

Niestety, nie da się skonstruować automatu, który będzie służył do dowodzeniapoprawności algorytmów. . .

Page 63: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

(Za https://plus.google.com/u/0/111221966647232053570/posts/cG1RA6aRkQk)

Page 64: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Część IIZłożoność obliczeniowa

Page 65: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Raz jeszcze min/max z liczb. . .Danych jest n elementów X[1], X[2], . . . , X[n]; szukamy takichm i j, żem = X[j] = max1≤i≤n X[i] i j jest największym indeksem spełniającym ten warunek.Algorytm wyglądać będzie tak:1. Inicjowanie Niech j← n, k← n− 1,m← X[n]2. Czy wszystkie? Jeśli k = 0 to koniec3. Porównanie Jeśli X[k] ≤ m to przejdź do 54. Zmianam j← k,m← X[k]5. Zmniejsz k k← k− 1; przejdź do 2

Start inicjowanie Czywszystkie? Porównanie zmiana m Zmniejszeniek

koniec

1 1 n− 1 A

tak

A

nie n− 1− A

Page 66: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Raz jeszcze min/max z liczb. . .Danych jest n elementów X[1], X[2], . . . , X[n]; szukamy takichm i j, żem = X[j] = max1≤i≤n X[i] i j jest największym indeksem spełniającym ten warunek.Algorytm wyglądać będzie tak:1. Inicjowanie Niech j← n, k← n− 1,m← X[n]2. Czy wszystkie? Jeśli k = 0 to koniec3. Porównanie Jeśli X[k] ≤ m to przejdź do 54. Zmianam j← k,m← X[k]5. Zmniejsz k k← k− 1; przejdź do 2

Start inicjowanie Czywszystkie? Porównanie zmiana m Zmniejszeniek

koniec

1 1 n− 1 A

tak

A

nie n− 1− A

Page 67: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Raz jeszcze min/max z liczb. . .Danych jest n elementów X[1], X[2], . . . , X[n]; szukamy takichm i j, żem = X[j] = max1≤i≤n X[i] i j jest największym indeksem spełniającym ten warunek.Algorytm wyglądać będzie tak:1. Inicjowanie Niech j← n, k← n− 1,m← X[n]2. Czy wszystkie? Jeśli k = 0 to koniec3. Porównanie Jeśli X[k] ≤ m to przejdź do 54. Zmianam j← k,m← X[k]5. Zmniejsz k k← k− 1; przejdź do 2

Start inicjowanie Czywszystkie? Porównanie zmiana m Zmniejszeniek

koniec

1 1 n− 1 A

tak

A

nie n− 1− A

Page 68: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Raz jeszcze min/max z liczb. . .Danych jest n elementów X[1], X[2], . . . , X[n]; szukamy takichm i j, żem = X[j] = max1≤i≤n X[i] i j jest największym indeksem spełniającym ten warunek.Algorytm wyglądać będzie tak:1. Inicjowanie Niech j← n, k← n− 1,m← X[n]2. Czy wszystkie? Jeśli k = 0 to koniec3. Porównanie Jeśli X[k] ≤ m to przejdź do 54. Zmianam j← k,m← X[k]5. Zmniejsz k k← k− 1; przejdź do 2

Start inicjowanie Czywszystkie? Porównanie zmiana m Zmniejszeniek

koniec

1 1 n− 1 A

tak

A

nie n− 1− A

Page 69: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Raz jeszcze min/max z liczb. . .Danych jest n elementów X[1], X[2], . . . , X[n]; szukamy takichm i j, żem = X[j] = max1≤i≤n X[i] i j jest największym indeksem spełniającym ten warunek.Algorytm wyglądać będzie tak:1. Inicjowanie Niech j← n, k← n− 1,m← X[n]2. Czy wszystkie? Jeśli k = 0 to koniec3. Porównanie Jeśli X[k] ≤ m to przejdź do 54. Zmianam j← k,m← X[k]5. Zmniejsz k k← k− 1; przejdź do 2

Start inicjowanie Czywszystkie? Porównanie zmiana m Zmniejszeniek

koniec

1 1 n− 1 A

tak

A

nie n− 1− A

Page 70: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Analiza algorytmu

I Zajętość pamięci. W tym przypadku nic ciekawego — zapotrzebowanie na pamięćjest proporcjonalne do liczby danych.

I Dokładność. Praktycznie nie są wykonywane żadne operacje matematyczne zatemnie dotyczy.

I Czas obliczeń. To może być ciekawe.

Page 71: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Analiza algorytmu

I Zajętość pamięci. W tym przypadku nic ciekawego — zapotrzebowanie na pamięćjest proporcjonalne do liczby danych.I Dokładność. Praktycznie nie są wykonywane żadne operacje matematyczne zatem

nie dotyczy.

I Czas obliczeń. To może być ciekawe.

Page 72: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Analiza algorytmu

I Zajętość pamięci. W tym przypadku nic ciekawego — zapotrzebowanie na pamięćjest proporcjonalne do liczby danych.I Dokładność. Praktycznie nie są wykonywane żadne operacje matematyczne zatem

nie dotyczy.I Czas obliczeń. To może być ciekawe.

Page 73: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Czas obliczeń

Start inicjowanie Czywszystkie? Porównanie zmiana m Zmniejszeniek

koniec

1 1 n− 1 A

tak

A

nie n− 1− A

I Krok 1 wykonany będzie 1 raz.

I Krok drugi n razy.I Krok 3 n− 1 razy.I Krok 4 A razy (jego wykonanie zależy od tego jakie są dane).I Krok 5 n− 1 razy.

Zatem zajmiemy się liczbą wykonań kroku 4.

Page 74: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Czas obliczeń

Start inicjowanie Czywszystkie? Porównanie zmiana m Zmniejszeniek

koniec

1 1 n− 1 A

tak

A

nie n− 1− A

I Krok 1 wykonany będzie 1 raz.I Krok drugi n razy.

I Krok 3 n− 1 razy.I Krok 4 A razy (jego wykonanie zależy od tego jakie są dane).I Krok 5 n− 1 razy.

Zatem zajmiemy się liczbą wykonań kroku 4.

Page 75: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Czas obliczeń

Start inicjowanie Czywszystkie? Porównanie zmiana m Zmniejszeniek

koniec

1 1 n− 1 A

tak

A

nie n− 1− A

I Krok 1 wykonany będzie 1 raz.I Krok drugi n razy.I Krok 3 n− 1 razy.

I Krok 4 A razy (jego wykonanie zależy od tego jakie są dane).I Krok 5 n− 1 razy.

Zatem zajmiemy się liczbą wykonań kroku 4.

Page 76: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Czas obliczeń

Start inicjowanie Czywszystkie? Porównanie zmiana m Zmniejszeniek

koniec

1 1 n− 1 A

tak

A

nie n− 1− A

I Krok 1 wykonany będzie 1 raz.I Krok drugi n razy.I Krok 3 n− 1 razy.I Krok 4 A razy (jego wykonanie zależy od tego jakie są dane).

I Krok 5 n− 1 razy.Zatem zajmiemy się liczbą wykonań kroku 4.

Page 77: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Czas obliczeń

Start inicjowanie Czywszystkie? Porównanie zmiana m Zmniejszeniek

koniec

1 1 n− 1 A

tak

A

nie n− 1− A

I Krok 1 wykonany będzie 1 raz.I Krok drugi n razy.I Krok 3 n− 1 razy.I Krok 4 A razy (jego wykonanie zależy od tego jakie są dane).I Krok 5 n− 1 razy.

Zatem zajmiemy się liczbą wykonań kroku 4.

Page 78: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Czas obliczeń

Start inicjowanie Czywszystkie? Porównanie zmiana m Zmniejszeniek

koniec

1 1 n− 1 A

tak

A

nie n− 1− A

I Krok 1 wykonany będzie 1 raz.I Krok drugi n razy.I Krok 3 n− 1 razy.I Krok 4 A razy (jego wykonanie zależy od tego jakie są dane).I Krok 5 n− 1 razy.

Zatem zajmiemy się liczbą wykonań kroku 4.

Page 79: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Krok 4Średnia liczba wykonań

I Gdy dane wejściowe uporządkowane są w kolejności rosnącej A = n− 1 .

I Gdy dane wejściowe uporządkowane są w kolejności malejącej A = 0 .I A jaka będzie średnio?

Page 80: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Krok 4Średnia liczba wykonań

I Gdy dane wejściowe uporządkowane są w kolejności rosnącej A = n− 1 .I Gdy dane wejściowe uporządkowane są w kolejności malejącej A = 0 .

I A jaka będzie średnio?

Page 81: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Krok 4Średnia liczba wykonań

I Gdy dane wejściowe uporządkowane są w kolejności rosnącej A = n− 1 .I Gdy dane wejściowe uporządkowane są w kolejności malejącej A = 0 .I A jaka będzie średnio?

Page 82: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

PrzykładNiech n = 3; załóżmy również, że wszystkie liczby są różne. Wypiszmy wszystkie możliwe układyliczb X[1], X[2], X[3]:

Układ Wartość A

X[1] < X[2] < X[3] 0X[1] < X[3] < X[2] 1X[2] < X[1] < X[3] 0X[2] < X[3] < X[1] 1X[3] < X[1] < X[2] 1X[3] < X[2] < X[1] 2

Jeżeli teraz założymy, że każdy z układów liczb X[1], X[2], X[3] jest jednakowo prawdopodobne, tośrednia wartość A wyniesie (dla n = 3) (0+ 1+ 0+ 1+ 1+ 2)/6 = 5/6.

Page 83: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

PrzykładNiech n = 3; załóżmy również, że wszystkie liczby są różne. Wypiszmy wszystkie możliwe układyliczb X[1], X[2], X[3]:

Układ Wartość AX[1] < X[2] < X[3] 0

X[1] < X[3] < X[2] 1X[2] < X[1] < X[3] 0X[2] < X[3] < X[1] 1X[3] < X[1] < X[2] 1X[3] < X[2] < X[1] 2

Jeżeli teraz założymy, że każdy z układów liczb X[1], X[2], X[3] jest jednakowo prawdopodobne, tośrednia wartość A wyniesie (dla n = 3) (0+ 1+ 0+ 1+ 1+ 2)/6 = 5/6.

Page 84: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

PrzykładNiech n = 3; załóżmy również, że wszystkie liczby są różne. Wypiszmy wszystkie możliwe układyliczb X[1], X[2], X[3]:

Układ Wartość AX[1] < X[2] < X[3] 0X[1] < X[3] < X[2] 1

X[2] < X[1] < X[3] 0X[2] < X[3] < X[1] 1X[3] < X[1] < X[2] 1X[3] < X[2] < X[1] 2

Jeżeli teraz założymy, że każdy z układów liczb X[1], X[2], X[3] jest jednakowo prawdopodobne, tośrednia wartość A wyniesie (dla n = 3) (0+ 1+ 0+ 1+ 1+ 2)/6 = 5/6.

Page 85: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

PrzykładNiech n = 3; załóżmy również, że wszystkie liczby są różne. Wypiszmy wszystkie możliwe układyliczb X[1], X[2], X[3]:

Układ Wartość AX[1] < X[2] < X[3] 0X[1] < X[3] < X[2] 1X[2] < X[1] < X[3] 0

X[2] < X[3] < X[1] 1X[3] < X[1] < X[2] 1X[3] < X[2] < X[1] 2

Jeżeli teraz założymy, że każdy z układów liczb X[1], X[2], X[3] jest jednakowo prawdopodobne, tośrednia wartość A wyniesie (dla n = 3) (0+ 1+ 0+ 1+ 1+ 2)/6 = 5/6.

Page 86: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

PrzykładNiech n = 3; załóżmy również, że wszystkie liczby są różne. Wypiszmy wszystkie możliwe układyliczb X[1], X[2], X[3]:

Układ Wartość AX[1] < X[2] < X[3] 0X[1] < X[3] < X[2] 1X[2] < X[1] < X[3] 0X[2] < X[3] < X[1] 1

X[3] < X[1] < X[2] 1X[3] < X[2] < X[1] 2

Jeżeli teraz założymy, że każdy z układów liczb X[1], X[2], X[3] jest jednakowo prawdopodobne, tośrednia wartość A wyniesie (dla n = 3) (0+ 1+ 0+ 1+ 1+ 2)/6 = 5/6.

Page 87: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

PrzykładNiech n = 3; załóżmy również, że wszystkie liczby są różne. Wypiszmy wszystkie możliwe układyliczb X[1], X[2], X[3]:

Układ Wartość AX[1] < X[2] < X[3] 0X[1] < X[3] < X[2] 1X[2] < X[1] < X[3] 0X[2] < X[3] < X[1] 1X[3] < X[1] < X[2] 1

X[3] < X[2] < X[1] 2

Jeżeli teraz założymy, że każdy z układów liczb X[1], X[2], X[3] jest jednakowo prawdopodobne, tośrednia wartość A wyniesie (dla n = 3) (0+ 1+ 0+ 1+ 1+ 2)/6 = 5/6.

Page 88: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

PrzykładNiech n = 3; załóżmy również, że wszystkie liczby są różne. Wypiszmy wszystkie możliwe układyliczb X[1], X[2], X[3]:

Układ Wartość AX[1] < X[2] < X[3] 0X[1] < X[3] < X[2] 1X[2] < X[1] < X[3] 0X[2] < X[3] < X[1] 1X[3] < X[1] < X[2] 1X[3] < X[2] < X[1] 2

Jeżeli teraz założymy, że każdy z układów liczb X[1], X[2], X[3] jest jednakowo prawdopodobne, tośrednia wartość A wyniesie (dla n = 3) (0+ 1+ 0+ 1+ 1+ 2)/6 = 5/6.

Page 89: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

PrzykładNiech n = 3; załóżmy również, że wszystkie liczby są różne. Wypiszmy wszystkie możliwe układyliczb X[1], X[2], X[3]:

Układ Wartość AX[1] < X[2] < X[3] 0X[1] < X[3] < X[2] 1X[2] < X[1] < X[3] 0X[2] < X[3] < X[1] 1X[3] < X[1] < X[2] 1X[3] < X[2] < X[1] 2

Jeżeli teraz założymy, że każdy z układów liczb X[1], X[2], X[3] jest jednakowo prawdopodobne, tośrednia wartość A wyniesie (dla n = 3) (0+ 1+ 0+ 1+ 1+ 2)/6 = 5/6.

Page 90: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Analiza. . .

Bez starty ogólności, możemy przyjąć, że liczby X[1], X[2], . . . , X[n] to liczby 1, 2, . . . , nw pewnej kolejności. Dodatkowo założymy, że każda z n! permutacji jest jednakowoprawdopodobna.Tu wycinamy bardzo wiele rachunków. . .

Z analizy rachunków wynika, że w przypadku gdy n = 12 średnia dla zmiennej losowej Awynosi około 2,1, a wariancja około 1,54.

Page 91: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Analiza algorytmu min/max. . .

I Algorytm jest bardzo prosty.I Jedyne „operacje” wykonywane to porównanie (krok 2) i zamiana (krok 4).I W zależności od liczby danych (n) liczba porównań jest „stała” — n− 1, a liczba zamian jestjakimś ułamkiem n.

W takim przypadku piszemy że liczba zamian jest proporcjonalna do n, co zapisujemy czasami jako∼ n.W teorii algorytmów częściej mówi się że „złożoność czasowa” algorytmu jest O(n) (co możnaczytać „duże-O od n”) albo „rzędu n”.Nie jest ważny współczynnik proporcjonalności, ważne jest jedynie to, że w raz ze wzrostem nrośnie tak samo szybko czas obliczeń.

Page 92: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

O(n)

Mamy dwa (hipotetyczne) problemy:1. Pierwszy wykonuje się w czasie proporcjonalnym do n2. Drugi w czasie proporcjonalnym do 1

2nZatem drugie zadanie wykonuje się dwa razy szybciej!Oba zadania wykonują się w czasie O(n)! Jest to zatem dosyć „grube” spojrzenie na czasobliczeń.

Page 93: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Liniowe wyszukiwanieMamy „książkę telefoniczną” — czyli listę<nazwisko, numer_telefonu>.Zadanie polega na znalezieniu numeru telefonicznego osoby o zadanym nazwisku.Najprostszy algorytm jest taki1. i← 12. Czy poszukiwane_nazwisko = nazwisko(i)3. Jeżeli tak — Koniec4. W przeciwnym razie i← i+ 15. Jeżeli i > n Koniec: nie znaleziono!6. W przeciwnym razie przejdź do kroku 2

Im dłuższa lista nazwisk tym dłużej pracuje algorytm.

Page 94: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Liniowe wyszukiwanie c. d.

I W najlepszym razie pętla wykonana będzie tylko jeden raz.I W najgorszym razie — n razy.I Średnio? To zależy jaki jest rozkład prawdopodobieństwa zapytań. . .

Page 95: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Liniowe wyszukiwanie — lepszy algorytmI Jeżeli uwzględnić fakt, że dane w książce telefonicznej są posortowane — algorytm możnaistotnie ulepszyć.I Pierwsze porównanie należy wykonać nie z pierwszym (czy ostatnim) nazwiskiem, tylko ześrodkowym (znajdującym się dokładnie na środku listy). Jeżeli szukane nazwisko jest większe— nie należy zajmować się pierwszą połową listy. . .I Takie podejście w każdym kroku redukuje rozmiar zadania o połowę! Każdy kolejny krok jestpodobny — zatem wielkość zadania zmniejsza się za każdym razem.I W przypadku książki telefonicznej o N nazwiskach potrzeba (w najgorszym razie) log2(N)kroków.I Złożoność algorytmu wynosi O(log(N))

Page 96: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Liniowe wyszukiwanie — schemat blokowyStart

Weź całą listęwejściową L

Porównaj Y ześrodkowymelementem listy

Weź pierwszą albodrugą połowęrozważanej listy,zależnie od wynikuporównaniaWypisz „jest!”

czylistajestpusta?wypisz „nie ma!”

Stop

Stop

nie ma jest

taknie

Page 97: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Jak bardzo O(log(N)) jest lepsze od O(N)?

N log2(N)10 4100 71000 10milion 20miliard 30miliard miliardów 60

Page 98: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Pętle zagnieżdżone

1. wykonaj co następuje N− 1 razy. . .1.1 wykonaj co następuje N− 1 razy. . .

Pętla wewnętrzna wykonywana jest N− 1 razy dla każdego z N− 1 wykonań pętlizewnętrznej.Koszt czasowy dwu pętli jest zatem (N− 1)(N− 1) czyli N2 − 2N+ 1. Dla dużych N składnik1− 2N jest nieistotny. Zatem koszt czasowy takiej pętli jest O(N2).

Page 99: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Minimum i maksimum wersja rekurencyjna

Rekurencyjny algorytm wyszukiwania minimum i maksimum w L (znajdź-min-i-max-w L):1. jeśli L składa się z jednego elementu to nadajMIN iMAX właśnie jego wartość; jeśli L składa się z dwuelementów, to nadajMIN wartość mniejszego z nich, aMAX —większego;2. w przeciwnym razie wykonaj co następuje:

2.1 podziel L na połowy L1 i L2;2.2 wywołaj znajdź-min-i-max-w L1, umieszczając otrzymane wartości wMIN1 iMAX1;2.3 wywołaj znajdź-min-i-max-w L2, umieszczając otrzymane wartości wMIN2 iMAX2;2.4 nadajMINmniejszą wartość zMIN1 iMIN2;2.5 nadajMAX większą wartość zMAX1 iMAX2;3. wróć z wartościamiMIN iMAX

Page 100: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Analiza algorytmu rekurencyjnego I1. jeśli N = 1 lub N = 2, wykonuje się dokładnie jedno porównanie — punkt 1procedury.2. jeśli N > 2, to porównania, które się wykonuje, stanowią dokładnie dwa zbioryporównań dla list o długości N/2 i dwa dodatkowe porównania (wiersze 2.4 i 2.5)

Zatem (C(N) oznacza liczbę porównań dla listy N elementowej)C(1) = C(2) = 1 (1)

C(N) = 2C(N/2) + 2 (2)(czemu jest to+2?)Można rozwiązać to równanie.

C(N) = 3N/2− 2 =32N− 2< 2N (3)

Page 101: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Minimum i maksimum— wersja klasyczna (naiwna)

1. MIN← L(1); MAX ← L(1)2. i← 13. jeżeli L(i) > MAX toMAX ← L(i)4. jeżeli L(i) < MIN toMIN← L(i)5. jeżeli i < N to i← i+ 1, przejdź do 36. KONIEC

W tym algorytmie główna operacja to porównania; algorytm potrzebuje 2N porównań.

Page 102: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Wieże Hanoi

Złożoność czasowa podawanego wcześniej algorytmu wynosi 2N − 1 (gdzie N to liczbakrążków).Zatem algorytm jest O(2N)

Page 103: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Wieże HanoiAlternatywny algorytm (nierekurencyjny)

(Zakładamy, że nasze trzy kołki są ustawione w kółko i że — na początku — wszystkie Nkrążków spoczywa na jednym z nich.)1. powtarzaj wykonywanie tego, co następuje, dopóty, dopóki, w chwili poprzedzającejpodjęcie kroku 1.1 wszystkie krążki nie będą poprawnie ułożone na jakimś innymkołku:

1.1 przenieś najmniejszy krążek z kołka, na którym właśnie spoczywa, na kołek następnyw kierunku zgodnym z ruchem wskazówek zegara;1.2 wykonaj jedyne możliwe przeniesienie nie dotyczące najmniejszego krążka.A jaka jest złożoność tego algorytmu?

Page 104: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

„Małpia układanka”Prosta gra, w której do dyspozycji gracza jest kilka (9?) kwadratowych kart, na bokachktórych wydrukowane są górna i dolne połowy kolorowych małp. Zadanie polega naułożeniu kart w postaci kwadratu (3× 3), aby na zetknięciach się krawędzi połowy małppasowały do siebie, a kolory były identyczne. . .

Page 105: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Małpia układanka cdI Najbardziej elementarny komputerowy algorytm „rozwiązywania” tej układankisprowadzi się najprawdopodobniej, do przeglądu wszystkich możliwych układów kart.I Wybieramy jedną z kart, układamy ją na pierwszym miejscu (odpowiednio wszystkiemiejsca ponumerowaliśmy); na drugim miejscu mamy N− 1 kart do wyboru, na kolejnym

N− 2, itd. . .I Następnie sprawdzamy czy spełnione są warunki.I Zatem liczba możliwych do rozpatrzenia kombinacji wynosi:

N× (N− 1)× (N− 2)× · · · × 2× 1 = N! (4)Zatem złożoność tego algorytmu jest rzędu O(N!)

Page 106: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Rozsądny i nierozsądny czas działania

Funkcja / N 10 50 100 300 10005N 50 250 500 1500 5000

N log2(N) 33 282 665 2469 9966N2 100 2500 10000 90000 1 milion (7 cyfr)N3 1000 125000 1 milion (7 cyfr) 27 milionów (8cyfr) 1 miliard (10 cyfr)2N 1024 liczba 16-cyfrowa liczba 31-cyfrowa liczba 91-cyfrowa liczba 302-cyfrowaN! 3,6 miliona (7cyfr) liczba 65-cyfrowa liczba 161-cyfrowa liczba 623-cyfrowa niewyobrażalniedużaNN 10 miliardów (11cyfr) liczba 85-cyfrowa liczba 201-cyfrowa liczba 744-cyfrowa niewyobrażalnieduża

Page 107: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Wykresy różnych funkcji

Page 108: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Tabelka. . .N 10 20 50 100 300N2 1/10 000sekundy 1/2500sekundy 1/400 ssekundy 1/100 sekundy 9/100 sekundyN5 1/10 sekundy 3,2ssekundy 5,2 minuty 2,8 godziny 28,1 dnia2N 1/1000sekundy 1 sekunda 35,7 lat 400 bilionówstuleci 75-cyfrowa liczbastuleciNN 2,8 godziny 3,3 bilionylat 70-cyfrowa liczbastuleci 185-cyfrowa liczbastuleci 728 cyfrowa liczbastuleci

Dla porównania „wielki wybuch” był w przybliżeniu 15 miliardów lat temuZapotrzebowanie na czas dla hipotetycznych rozwiązań małpiej układanki(przy założeniu, że jedna instrukcja trwa jedną milisekundę)

Page 109: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Zadania „łatwe” i „trudne” II Jak widać z wykresów i tabelek — zawsze można znaleźć zadanie którego nie da sięrozwiązać w „rozsądnym czasie”.I Przyjęto dzielić zadania na „łatwe” jeżeli funkcja opisująca czas ich wykonania(złożoność obliczeniową) jest ograniczona jakąś funkcją wielomianową.I Zadania „trudne” to zadania o czasie wykonania ponadwielomianowym lubwykładniczym.

PodsumowanieProblemy trudno rozwiązywalne wymagają niepraktycznie dużo czasu nawet dlawzględnie małych danych wejściowych.Problemy łatwo rozwiązywalne mają algorytmy, które są praktyczne dla zadańo rozsądnych wymiarach.

Page 110: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Wątpliwości

1. Komputery stają się coraz szybsze (ostatnio, w ciągu roku szybkość komputerówwzrastało dziesięciokrotnie). Być może za czas jakiś pojawi się komputerwystarczająco szybki by rozwiązywać „trudne zadania”?

2. Czy fakt, że nie znaleźliśmy lepszego algorytmu nie wskazuje na nasząniekompetencję? Może warto zwiększyć wysiłek aby polepszyć sytuację?3. Być może uda się znaleźć jakiś dowód, że problem nie ma rozsądnego algorytmu?4. Czy „trudny problem” (małpiej układanki) nie jest przypadkiem jedynym takimzadaniem? Jest ono ciekawe, ale jakie ma praktyczne zastosowanie?

Page 111: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Wątpliwości

1. Komputery stają się coraz szybsze (ostatnio, w ciągu roku szybkość komputerówwzrastało dziesięciokrotnie). Być może za czas jakiś pojawi się komputerwystarczająco szybki by rozwiązywać „trudne zadania”?2. Czy fakt, że nie znaleźliśmy lepszego algorytmu nie wskazuje na nasząniekompetencję? Może warto zwiększyć wysiłek aby polepszyć sytuację?

3. Być może uda się znaleźć jakiś dowód, że problem nie ma rozsądnego algorytmu?4. Czy „trudny problem” (małpiej układanki) nie jest przypadkiem jedynym takimzadaniem? Jest ono ciekawe, ale jakie ma praktyczne zastosowanie?

Page 112: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Wątpliwości

1. Komputery stają się coraz szybsze (ostatnio, w ciągu roku szybkość komputerówwzrastało dziesięciokrotnie). Być może za czas jakiś pojawi się komputerwystarczająco szybki by rozwiązywać „trudne zadania”?2. Czy fakt, że nie znaleźliśmy lepszego algorytmu nie wskazuje na nasząniekompetencję? Może warto zwiększyć wysiłek aby polepszyć sytuację?3. Być może uda się znaleźć jakiś dowód, że problem nie ma rozsądnego algorytmu?

4. Czy „trudny problem” (małpiej układanki) nie jest przypadkiem jedynym takimzadaniem? Jest ono ciekawe, ale jakie ma praktyczne zastosowanie?

Page 113: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Wątpliwości

1. Komputery stają się coraz szybsze (ostatnio, w ciągu roku szybkość komputerówwzrastało dziesięciokrotnie). Być może za czas jakiś pojawi się komputerwystarczająco szybki by rozwiązywać „trudne zadania”?2. Czy fakt, że nie znaleźliśmy lepszego algorytmu nie wskazuje na nasząniekompetencję? Może warto zwiększyć wysiłek aby polepszyć sytuację?3. Być może uda się znaleźć jakiś dowód, że problem nie ma rozsądnego algorytmu?4. Czy „trudny problem” (małpiej układanki) nie jest przypadkiem jedynym takimzadaniem? Jest ono ciekawe, ale jakie ma praktyczne zastosowanie?

Page 114: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Szybszy komputer

Maksymalna liczba kart rozwiązywanych w ciągu godzinyO(?) na dzisiejszym na komputerze na komputerzekomputerze 100 razy szybszym 1000 razy szybszymN A 100× A 1000× AN2 B 10× B 31,6× B2N C C + 6,64 C + 9,97

Page 115: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Wymyślony algorytm(o małpiej układance)

I Niestety nie. Znaleziono bardzo wiele (około 1000) problemów, które sprowadzająsię do „przeglądu zupełnego” wszystkich możliwych wariantów (ustawień danych).I Można zaproponować algorytmy „nierozsądne” nie udało się pokazać że może istniećdokładny algorytm lepszy. . .I Źródłem „trudnych” zadań są takie dziedziny jak kombinatoryka, badania operacyjne,ekonomia, teoria grafów i logika.

Page 116: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Jak sobie radzimy z trudnymi zadaniami?

I Zrównoleglenie (zadanie dzielone jest na mniejsze kawałki i wysyłane na wielekomputerów).

I Randomizacja. Zamiast przeglądać wszystkie możliwe rozwiązania w sposób losowywybiera się niektóre z nich. Pozostają te, które w najlepszy sposób spełniają naszeoczekiwania.I Komputery kwantowe. ???I Obliczenia molekularne. ???

Page 117: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Jak sobie radzimy z trudnymi zadaniami?

I Zrównoleglenie (zadanie dzielone jest na mniejsze kawałki i wysyłane na wielekomputerów).I Randomizacja. Zamiast przeglądać wszystkie możliwe rozwiązania w sposób losowywybiera się niektóre z nich. Pozostają te, które w najlepszy sposób spełniają naszeoczekiwania.

I Komputery kwantowe. ???I Obliczenia molekularne. ???

Page 118: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Jak sobie radzimy z trudnymi zadaniami?

I Zrównoleglenie (zadanie dzielone jest na mniejsze kawałki i wysyłane na wielekomputerów).I Randomizacja. Zamiast przeglądać wszystkie możliwe rozwiązania w sposób losowywybiera się niektóre z nich. Pozostają te, które w najlepszy sposób spełniają naszeoczekiwania.I Komputery kwantowe. ???

I Obliczenia molekularne. ???

Page 119: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Jak sobie radzimy z trudnymi zadaniami?

I Zrównoleglenie (zadanie dzielone jest na mniejsze kawałki i wysyłane na wielekomputerów).I Randomizacja. Zamiast przeglądać wszystkie możliwe rozwiązania w sposób losowywybiera się niektóre z nich. Pozostają te, które w najlepszy sposób spełniają naszeoczekiwania.I Komputery kwantowe. ???I Obliczenia molekularne. ???

Page 120: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Do czego może nadać się komputer kwantowy?

Jeżeli mamy zadanie spełniające następujące warunki:1. Jedyna znana metoda rozwiązania go to zgadnięcie i sprawdzenie.2. Do sprawdzenia mamy nmożliwych odpowiedzi.3. Każde sprawdzenie zajmuje tyle samo czasu.4. Nie ma żadnych wskazówek na temat kolejności sprawdzania (każda, nawet losowa,kolejność jest dobra).

Czas rozwiązania takich zadań przez komputer kwantowy będzie proporcjonalny dopierwiastka kwadratowego z n.

Page 121: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Komputer kwantowy?

Page 122: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Komputer kwantowy?

Page 123: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Komputer kwantowy?

Page 124: Złożoność obliczeniowa. „Trudne” zadania · 2019. 12. 12. · Jak to się robi? cd Obowiązują ogólne zasady: I Z tego, że program działa poprawnie dla każdego zestawu

Bibliografia

Intel.White paper: Statistical analysis of floating point flaw.https://web.archive.org/web/20050123064847/http://www.intel.com/support/processors/pentium/fdiv/wp/, 1994.Thomas R. Nicely.Pentium FDIV flaw FAQ.https://web.archive.org/web/20191126144803/http://www.trnicely.net:80/pentbug/pentbug.html, 2008.