• Nie Znaleziono Wyników

Algorytmika praktyczna - Piotr Stańczyk - pdf, ebook – Ibuk.pl

N/A
N/A
Protected

Academic year: 2022

Share "Algorytmika praktyczna - Piotr Stańczyk - pdf, ebook – Ibuk.pl"

Copied!
15
0
0

Pełen tekst

(1)

Piotr Stańczyk

Algorytmika praktyczna

Nie tylko dla mistrzów

Piotr Stańczyk

• prezentacja wszystkich ważniejszych z punktu widzenia konkursów działów algorytmiki;

• intuicyjne podejście do przedstawianych zagadnień algorytmicznych;

• zwięzła, efektywna implementacja omawianych algorytmów w języku C++;

• liczne przykładowe zadania konkursowe wraz ze wskazówkami stopniowo nakierowującymi na właściwe rozwiązanie zadania, a także z adresem strony internetowej, na której można znaleźć pro- gramy stanowiące rozwiązania tych zadań;

• tematyczne wykazy zadań z całego świata z możliwością testowania ich rozwiązań na stronach internetowych konkursów;

odsyłacze do literatury umożliwiającej szczegó- łowe poznanie opisywanych zagadnień od strony teoretycznej;

cenne rady dotyczące strategii uczestnictwa w kon- kursach.

Po pracę tę powinna sięgnąć każda osoba pragnąca doskonalić swoje umiejętności algorytmiczne i programistyczne.

Książka ta różni się od znanych na polskim rynku pozycji poświęconych algorytmice, dotyczy bowiem jej strony praktycznej. Taki sposób potraktowania tego działu informa- tyki wynika z coraz większego zainteresowania zarówno uczniów, jak i studentów udziałem w różnego rodzaju konkursach programistycznych.

Czytelnik znajdzie w niej przegląd implementacji podstawowych algorytmów i struk- tur danych, które można zastosować bezpośrednio bądź zaadaptować w prosty spo- sób przy rozwiązywaniu zadań konkursowych. Fundamentem książki jest biblioteczka algorytmiczna, która była tworzona i rozbudowywana podczas przygotowań zespołu Warsaw Predators z Uniwersytetu Warszawskiego do reprezentowania tej uczelni na międzynarodowych zawodach.

Piotr Stańczyk

Algorytmika praktyczna

Nie tylko dla mistrzów

Algorytmika praktyczna

Nie tylko dla mistrzów

Na niepowtarzalny charakter książki składają się następujące elementy:

Książka powinna znaleźć się na półce wszystkich zainteresowanych doskonaleniem swoich umiejętności algorytmiczno-programistycznych.

prof. Krzysztof Diks, Uniwersytet Warszawski

Piotr Stańczyk

jest doktorantem w Instytucie Informatyki Uniwersytetu Warszawskiego oraz kiero- wnikiem warszawskiego oddziału Grupy Badawczo-Rozwojowej firmy ADB. Bogate doświadczenie związane z kon- kursami informatycznymi zdobył nie tylko jako wieloletni uczestnik i reprezentant Polski na konkursach i olimpiadach informatycznych, lecz także jako członek Jury Olimpiady Informatycznej czy koordynator ogólnopolskiego konkursu Potyczki Algorytmiczne. Rozległą wiedzę akademicką autora wspiera praktyka nabyta w takich firmach, jak:

Microsoft, Google i Nvidia.

Bez algorytmiki nie ma informatyki!

(2)

ALGORYTMIKA PRAKTYCZNA

NIE TYLKO DLA MISTRZÓW

(3)
(4)

PIOTR STAŃCZYK

ALGORYTMIKA PRAKTYCZNA

NIE TYLKO DLA MISTRZÓW

(5)

Projekt okładki: Anna Kozłowska KA PROJEKT Redakcja: Ewa Zdanowicz

Skład komputerowy: Piotr Stańczyk

Zastrzeżonych nazw firm i produktów użyto w książce wyłącznie w celu identyfikacji.

Wszelkie uwagi na temat książki prosimy kierować pod adresem poczty elektronicznej Autora:

stanczyk@mimuw.edu.pl

Zadania z Olimpiady Informatycznej oraz Olimpiady Informatycznej Krajów Bałtyckich zostały opublikowane za zgodą Komitetu Głównego Olimpiady Informatycznej. Zadania z konkursu Potyczki Algorytmiczne zostały opublikowane za zgodą Wydziału Matematyki, Informatyki i Mechaniki Uniwersytetu Warszawskiego – współorganizatora tego konkursu.

Copyright © by Wydawnictwo Naukowe PWN SA Warszawa 2009

ISBN 978-83-01-15821-7

Wydanie I – 2 dodruk Warszawa 2019

Wydawnictwo Naukowe PWN SA

02-460 Warszawa, ul. Gottlieba Daimlera 2 tel. 22 69 54 321, faks 22 69 54 288 infolinia 801 33 33 88

e-mail: pwn@pwn.com.pl; reklama@pwn.pl www.pwn.pl

Druk i oprawa: OSDW Azymut Sp. z o.o.

(6)

Sªowowst¦pne 9

Przedmowa 11

1. Algorytmygrafowe 15

1.1. Reprezentacjagrafu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

1.2. Przeszukiwaniegrafuwszerz. . . . . . . . . . . . . . . . . . . . . . . . . . 20

1.3. Przeszukiwaniegrafuwgª¡b. . . . . . . . . . . . . . . . . . . . . . . . . . 25

1.4. Silniespójneskªadowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

1.5. Sortowanietopologiczne . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

1.6. Acykliczno±¢ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

1.7. Mosty,punktyartykulacjii dwuspójneskªadowe . . . . . . . . . . . . . . 44

1.8. ‘cie»kaicyklEulera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

1.9. Minimalne drzeworozpinaj¡ce. . . . . . . . . . . . . . . . . . . . . . . . . 57

1.10.Algorytm Dijkstry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

1.11.Algorytm Bellmana-Forda . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

1.12.Maksymalnyprzepªyw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

1.12.1.Maksymalnyprzepªywwyznaczanymetod¡Dinica . . . . . . . . . 68

1.12.2.Maksymalnyprzepªywdlakraw¦dzijednostkowych . . . . . . . . . 72

1.12.3.Najta«szymaksymalnyprzepªywdlakraw¦dzijednostkowych . . . 74

1.13.Maksymalneskojarzeniewgraedwudzielnym . . . . . . . . . . . . . . . 77

1.13.1.Dwudzielno±¢grafu. . . . . . . . . . . . . . . . . . . . . . . . . . . 78

1.13.2.MaksymalneskojarzeniewgraedwudzielnymwczasieO(n (n + m)) 81 1.13.3.Maksymalneskojarzeniewgraedwudzielnym wczasieO((n + m)√n) . . . . . . . . . . . . . . . . . . . . . . . . 83

1.13.4.Najdro»szeskojarzeniewgraedwudzielnym . . . . . . . . . . . . 86

2. Geometria obliczeniowa na pªaszczy¹nie 91 2.1. Odlegªo±¢punktuod prostej. . . . . . . . . . . . . . . . . . . . . . . . . . 95

2.2. Polewielok¡ta. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

2.3. Przynale»no±¢punktudogury . . . . . . . . . . . . . . . . . . . . . . . . 98

2.4. Punktyprzeci¦cia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

2.5. Trzypunktyokr¡g . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114

2.6. Sortowaniek¡towe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116

2.7. Otoczkawypukªa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120

(7)

3. Kombinatoryka 128

3.1. Permutacje wkolejno±ciantyleksykogracznej . . . . . . . . . . . . . . . . 128

3.2. Permutacje minimalnaliczba transpozycji . . . . . . . . . . . . . . . . 130

3.3. Permutacje minimalnaliczba transpozycjis¡siednich . . . . . . . . . . 132

3.4. Wszystkiepodzbioryzbioru . . . . . . . . . . . . . . . . . . . . . . . . . . 135

3.5. Podzbioryk-elementowewkolejno±cileksykogracznej . . . . . . . . . . . 137

3.6. Podziaªyzbioruzu»yciemminimalnejliczbyzmian . . . . . . . . . . . . . 138

3.7. Podziaªyliczbywkolejno±ciantyleksykogracznej. . . . . . . . . . . . . . 140

4. Teorialiczb 142 4.1. Wspóªczynnik dwumianowy . . . . . . . . . . . . . . . . . . . . . . . . . . 142

4.2. Najwi¦kszywspólnydzielnik. . . . . . . . . . . . . . . . . . . . . . . . . . 144

4.3. Odwrotno±¢modularna . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147

4.4. Kongruencje. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149

4.5. Szybkiepot¦gowaniemodularne. . . . . . . . . . . . . . . . . . . . . . . . 152

4.6. SitoEratostenesa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154

4.7. Listaliczbpierwszych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155

4.8. Test pierwszo±ci. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157

4.9. Arytmetykawielkich liczb . . . . . . . . . . . . . . . . . . . . . . . . . . . 160

5. Struktury danych 178 5.1. Strukturadanychdoreprezentacjizbiorówrozª¡cznych. . . . . . . . . . . 178

5.2. Drzewawyszukiwa«binarnych . . . . . . . . . . . . . . . . . . . . . . . . 182

5.2.1. Drzewamaksimów . . . . . . . . . . . . . . . . . . . . . . . . . . . 185

5.2.2. Drzewalicznikowe . . . . . . . . . . . . . . . . . . . . . . . . . . . 187

5.2.3. Drzewapozycyjne . . . . . . . . . . . . . . . . . . . . . . . . . . . 189

5.2.4. Drzewapokryciowe. . . . . . . . . . . . . . . . . . . . . . . . . . . 192

5.3. Binarnedrzewastatycznedynamiczniealokowane. . . . . . . . . . . . . . 195

5.4. Wzbogacanedrzewabinarne . . . . . . . . . . . . . . . . . . . . . . . . . . 200

6. Algorytmy tekstowe 212 6.1. AlgorytmKMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212

6.2. Minimalnyokressªowa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216

6.3. KMPdlawieluwzorców(algorytmAho-Corasick) . . . . . . . . . . . . . 217

6.4. Promieniepalindromówwsªowie . . . . . . . . . . . . . . . . . . . . . . . 223

6.5. Drzewasuksowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226

6.5.1. Liczbawyst¡pie« wzorcawtek±cie . . . . . . . . . . . . . . . . . . 230

6.5.2. Liczbaró»nychpodsªówsªowa. . . . . . . . . . . . . . . . . . . . . 232

6.5.3. Najdªu»szepodsªowowyst¦puj¡cen razy . . . . . . . . . . . . . . 233

6.6. Maksymalnyleksykograczniesuks . . . . . . . . . . . . . . . . . . . . . 234

6.7. Równowa»no±¢cykliczna. . . . . . . . . . . . . . . . . . . . . . . . . . . . 235

(8)

7. Algebra liniowa 240

7.1. Eliminacja Gaussa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240

7.1.1. Eliminacja GaussawZ2 . . . . . . . . . . . . . . . . . . . . . . . . 241

7.1.2. Eliminacja GaussawZ p . . . . . . . . . . . . . . . . . . . . . . . . 244

7.2. Programowanieliniowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248

8. Elementystrategiipodczaszawodów 253 8.1. Szacowanieoczekiwanejzªo»ono±ciczasowej . . . . . . . . . . . . . . . . . 253

8.2. Strategiapracywdru»ynie . . . . . . . . . . . . . . . . . . . . . . . . . . 255

8.3. Szablon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258

8.4. Plik Makefile. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259

8.5. Parametrykompilacjiprogramów . . . . . . . . . . . . . . . . . . . . . . . 259

8.5.1. ParametrWec++ . . . . . . . . . . . . . . . . . . . . . . . . . . 260

8.5.2. ParametrWformat . . . . . . . . . . . . . . . . . . . . . . . . . . 262

8.5.3. ParametrWshadow . . . . . . . . . . . . . . . . . . . . . . . . . . 263

8.5.4. ParametrWsequence-point . . . . . . . . . . . . . . . . . . . . . . 264

8.5.5. ParametrWunused . . . . . . . . . . . . . . . . . . . . . . . . . . 267

8.5.6. ParametrWuninitialized . . . . . . . . . . . . . . . . . . . . . . . 268

8.5.7. ParametrWoat-equal . . . . . . . . . . . . . . . . . . . . . . . . 269

8.6. Nieustannytime-limit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270

8.6.1. Eliminacja dzielenia . . . . . . . . . . . . . . . . . . . . . . . . . . 271

8.6.2. Wczytywaniedanych wej±ciowych. . . . . . . . . . . . . . . . . . . 271

8.6.3. Wstawkiasembleroweikompilacjazoptymalizacjami . . . . . . . 273

8.6.4. Lepszewykorzystaniepami¦cipodr¦cznej . . . . . . . . . . . . . . 274

8.6.5. Przetwarzaniewst¦pne . . . . . . . . . . . . . . . . . . . . . . . . . 275

Wskazówki do zada« 278

Dodatki

A.Nagªówki stosowanew programach 292

B.Nagªówki Eryka Kopczy«skiegonakonkursTopCoder 295

C.Sposobyna sukces w zawodach 299

D.Wykaz zada« na programowaniedynamiczne 304

E. Wykaz zada« na programowaniezachªanne 305

F. Wykaz przykªadowych zada« 306

Literatura 307

(9)
(10)

Bez algorytmiki nie ma informatyki. Ka»dy, kto chce zosta¢ rasowym informatykiem,

powinien po±wi¦ci¢ du»o czasu na projektowanie, analizowanie i programowanie algo-

rytmów. Oddawana wªa±nie do r¡k czytelników ksi¡»ka Piotra Sta«czyka Algorytmika

praktyczna. Nie tylko dla mistrzów mo»e pomóc w doskonaleniu sztuki rozwi¡zywa-

nia problemów algorytmicznych i biegªego ich zapisywania w postaci eleganckich, wy-

dajnie dziaªaj¡cych programów. Jest to ksi¡»ka dla osób, które poznaªy ju» podstawy

programowania oraz algorytmiki i chc¡ rozwija¢ swoje umiej¦tno±ci na tym polu po-

przez nauk¦na dobrych, sprawdzonych przykªadach. Znajd¡ one tutajomówieniesze-

regu zagadnie« wspóªczesnej algorytmiki, obejmuj¡cych algorytmy grafowe, geometri¦

obliczeniow¡,kombinatoryk¦,teori¦liczb,strukturydanych, algorytmytekstoweialgo-

rytmy algebry liniowej. Autor podaje minimaln¡liczb¦poj¦¢ i faktów potrzebnych do

zrozumienia prezentowanych technik algorytmicznychi algorytmów,a same algorytmy

itechnikiprzedstawianaprzykªadzie rozwi¡za«wybranychzada« zkonkursówprogra-

mistycznych.Niezwykle cennejestto, »e ka»derozwi¡zaniezadania,to bardzoczytelny

programgotowydouruchomienia.

W niniejszej ksi¡»ce Piotr Sta«czyk dzieli si¦ swoimi i kolegów do±wiadczeniami

zudziaªuw konkursachalgorytmicznych. to do±wiadczeniaosób, które potwierdziªy

swoj¡wiedz¦iumiej¦tno±cialgorytmiczno-programistycznewkonfrontacjizrówie±nika-

mizcaªego±wiata.Piotr todwukrotnylaureatkrajowejOlimpiadyInformatycznejoraz

dwukrotnymedalista Baªtyckiej OlimpiadyInformatycznej. Wrazz kolegami zwyci¦»aª

wAkademickichMistrzostwachPolskiwProgramowaniuZespoªowymizdobywaªmedale

wAkademickich MistrzostwachEuropy ‘rodkowej.Piotra niew¡tpliwie mo»na zaliczy¢

dopolskiejszkoªyinformatykimªodzie»owej, którejprzedstawicieledwukrotnieodnosili

zwyci¦stwow Mi¦dzynarodowejOlimpiadzie Informatycznej(Filip Wolski w2006 roku

orazTomaszKulczy«skiw2007roku)orazzwyci¦»aliwpresti»owychAkademickichMi-

strzostwach‘wiatawProgramowaniuZespoªowym(zespoªyUniwersytetuWarszawskie-

gowskªadach:TomaszCzajka,AndrzejG¡sienica-Samek,KrzysztofOnakzwyci¦stwo

w2003roku;MarekCygan,MarcinPilipczuk,FilipWolskizwyci¦stwow2007roku).

Ksi¡»ka Piotra Sta«czyka powinna znale¹¢ si¦ na póªce ka»dego zainteresowanego

odnoszeniem sukcesów wkonkursach algorytmicznych.Ale nie tylko.Jestem przekona-

ny, »e mo»e ona by¢ wykorzystywana na zaj¦ciach z programowaniaoraz algorytmów

i struktur danych zarówno dla uzdolnionej mªodzie»y szkóª ±rednich, jak i studentów

studiów informatycznych. Czytelnikom »ycz¦ du»o przyjemno±ci z korzystania z Algo-

rytmikipraktycznej, jakte» zach¦camdokrytycznego czytaniai dzieleniasi¦uwagami

zautorem. Piotrowi »ycz¦satysfakcji zwykonanejpracy, ale tak»ewytrwaªo±ciwkon-

taktach z czytelnikami i uwzgl¦dniania wszystkich konstruktywnych uwag w kolejnych

wydaniach.

(11)
(12)

Pierwszapolska Olimpiada Informatyczna dla uczniów szkóª ±rednich zostaªa zorgani-

zowanaw1993 rokuprzez najwi¦kszepolskieuczelnie,takie jakUniwersytetWarszaw-

ski, Uniwersytet Jagiello«ski czy Uniwersytet Wrocªawski. Zwyci¦zcy Olimpiad Infor-

matycznych maj¡mo»liwo±¢reprezentowaniaPolskipodczas takichmi¦dzynarodowych

konkursówjak Olimpiada InformatycznaKrajówBaªtyckich, Olimpiada Informatyczna

CentralnejEuropyi najbardziejpresti»owaMi¦dzynarodowaOlimpiadaInforma-

tyczna (strona konkursu http://www.ioinformatics.org/). Coraz wi¦kszaz roku narok

liczba uczestników tych olimpiad ±wiadczy o rosn¡cej popularno±ci nauki algorytmiki

w±róduczniówszkóª±rednich.W 2006rokurozpocz¦to organizowanieOlimpiadyInfor-

matycznejGimnazjalistów. Swego rodzajuolimpiad¡ informatyczn¡ dla studentów

Akademickie Mistrzostwa Polski w Programowaniu Zespoªowym. Bior¡ w nich udziaª

reprezentacjepolskichuczelni,wyªanianewlokalnychkonkursacheliminacyjnych.

MistrzostwaPolskiotwieraj¡drog¦kunajbardziejpresti»owemuiciesz¡cemusi¦dªu-

tradycj¡konkursowi,jakimjestInternationalCollegiateProgrammingContestorga-

nizowanyprzezAssociationforComputingMachinery(wskrócieACM;ocjalnastrona

konkursu http://icpc.baylor.edu/icpc/). Pierwsze zawody naªowe odbyªy si¦ 2 lutego

1977 rokuw Atlancie, w Stanach Zjednoczonych. Na pocz¡tku lat dziewi¦¢dziesi¡tych

weliminacjachdotegokonkursubraªoudziaªokoªo400dru»yn,zktórych25kwaliko-

waªosi¦corokudonaªu.Obecnieo7080miejscwnaªachwalczyponad4000dru»yn

z1600uczelnicaªego±wiata.

Oprócztych ciesz¡cychsi¦ wieloletni¡tradycj¡konkursówjestwymy±lanych iorga-

nizowanych wiele nowych  zarównopolskich, takich jak Potyczki Algorytmiczneczy

InternetowyTurniejProgramówWalcz¡cych,jakimi¦dzynarodowych,doktórychnale»¡

TopCoder,GoogleCodeJamczyMicrosoftImagineCup. Branieudziaªuwkonkursach

jestzarównodlauczniów,jakistudentówwa»nymelementemnaukialgorytmiki.

Poziomkonkursównieustanniesi¦podwy»sza.Opracowywanekolejnemetodyprzy-

gotowywaniasi¦dozawodówispecjalnetechnikipisaniaprogramów.Ichcelemjestzmi-

nimalizowanieczasu potrzebnegona rozwi¡zanie zadania, przy jednoczesnym unikaniu

mo»liwiedu»ej liczby bª¦dów. Ze wzgl¦du na ograniczony czas trwaniakonkursów ich

uczestnicynie mog¡rozwi¡zywa¢wszystkich zada«od zera.W wielu przypadkachmu-

sz¡ wykorzystywa¢ pomysªy zastosowanew podobnych zadaniach rozwi¡zywanych ju»

wcze±niej,copozwalaimzaoszcz¦dzi¢troch¦czasu.

Ksi¡»katamasªu»y¢donaukialgorytmiki,niejestjednaktypowympodr¦cznikiem.

Niezawiera wnikliwegoopisu algorytmówwraz zich analiz¡zªo»ono±ci oraz dowodem

poprawno±ci.Zamiasttegoobejmujekolekcj¦implementacjiró»nychalgorytmówbardzo

przydatnych podczas zawodówizbiórzada« umo»liwiaj¡cyprze¢wiczenieich wykorzy-

staniawpraktyce.

Znacz¡c¡cz¦±¢gronaczytelnikówstanowi¢b¦d¡zapewneosobyzainteresowanezwi¦k-

szeniem swoich umiej¦tno±ci w zakresie szybkiego implementowania rozwi¡za« zada«

algorytmicznych wj¦zyku C++. Lektura ksi¡»ki napewno pozwoli naszybsze rozwi¡-

Cytaty

Powiązane dokumenty

w sprawie szczegółowych wymagaƒ, jakie powinny spełniaç wnioski o przyznanie płatnoÊci z tytułu realizacji przedsi´wzi´ç rolnoÊrodowiskowych i poprawy dobrostanu zwierzàt,

Miara  zadania do samodzielnego

Czy funkcja f jest mierzalna wzgl¦dem σ-algebry generowanej przez

Caªkowanie ci¡gów i szeregów funkcyjnych  zadania do samodzielnego

Najwygodniej jest sklei´c płytki jedn ˛a kraw˛edzi ˛ a przy pomocy ta´smy klej ˛ acej, bardzo wa˙zne.. jest zapewnienie dobrego styku

Stwierdzono, ˙ze gdy temperatura powietrza ro´ snie wraz z wysoko´ sci a nad powierzchni , a Ziemi (np.. Jak wyt lumaczy´ c

(11) Napisz program, który pobiera od u»ytkownika liczb¦ naturaln¡ n, nast¦pnie wczy- tuje n liczb caªkowitych, i wypisuje: ±redni¡, najwi¦ksz¡ i najmniejsz¡.. (12) Napisz

Stwierdzono, e nieschłodzone (po uboju zwierz t) mi so wieprzowe, mro one przy u yciu ciekłego azotu po 2 tygodniach przechowywania charakteryzowało si wy sz warto ci pH