Strategie ataku
🎯 Po co Ci to?
Wiesz już, że problemy się kroi (1.4) i że przepisy mają cenę (1.5). Ale skąd wiadomo, od czego zacząć? Zawodowcy nie zaczynają od kodu ani nawet od schematu — zaczynają od wyboru strategii: budować od fundamentów czy od wizji całości? co pominąć, a co jest istotą problemu? a może dokładne rozwiązanie w ogóle nie jest osiągalne i trzeba się zadowolić „wystarczająco dobrym"? Te decyzje mają swoje nazwy i swoją rzemieślniczą tradycję. W zakresie rozszerzonym — czyli między innymi na maturze — wymaga się ich świadomego używania.
✅ Czego się nauczysz
Po tej jednostce potrafisz:
- rozróżnić metodę zstępującą i wstępującą oraz dobrać właściwą do problemu;
- wyjaśnić rolę abstrakcji i redukcji w projektowaniu rozwiązań;
- wskazać, kiedy sięga się po heurystykę — i jaką cenę się za nią płaci.
📘 Wyjaśnienie
Zstępująco czy wstępująco? To dwa przeciwne kierunki marszu po drzewie dekompozycji z jednostki 1.4.
Metoda zstępująca (z góry w dół) zaczyna od całości: „system obsługi biblioteki szkolnej składa się z katalogu, wypożyczeń i czytelników". Każdy element traktujesz na razie jak czarną skrzynkę — wiesz, co robi, nie wiesz jeszcze jak — i schodzisz poziom niżej dopiero, gdy szkielet całości stoi. Tak projektuje architekt: najpierw bryła budynku, potem piętra, na końcu klamki.
Metoda wstępująca (z dołu do góry) zaczyna od klocków, które już masz lub łatwo zrobisz: „umiem wczytać listę książek z pliku; umiem sprawdzić, czy książka jest wypożyczona; umiem…". Z małych, przetestowanych kawałków składasz coraz większe. Tak buduje się z klocków: nie wiadomo jeszcze, czy powstanie zamek czy statek, ale każdy klocek trzyma się mocno.
💭 Pomyśl: Piszesz z zespołem grę: postać skacze po platformach, zbiera monety, są trzy poziomy trudności. Które fragmenty pracy naturalnie pójdą zstępująco, a które wstępująco?
Sprawdź odpowiedź
Zstępująco: ogólny projekt — z czego składa się gra (świat, postać, punktacja, menu), jak te części się komunikują. Wstępująco: konkretne umiejętności — „narysuj postać w punkcie $(x, y)$", „sprawdź, czy postać dotyka platformy" — które testuje się osobno, zanim złoży się z nich całość. W praktyce zawodowej niemal zawsze pracuje się obiema naraz: szkielet z góry, klocki z dołu, spotkanie w połowie.
Abstrakcja: sztuka pomijania. Spójrz na schemat metra. Nie zgadza się w nim prawie nic: odległości przekłamane, linie wyprostowane, zakręty zniknęły. I właśnie dlatego jest genialny — pokazuje wyłącznie to, co ważne dla pasażera: kolejność stacji i przesiadki. Mapa wierna terenowi byłaby bezużyteczna.
📐 DEFINICJA — abstrakcja: świadome pominięcie szczegółów nieistotnych dla rozwiązywanego problemu i zatrzymanie tylko cech istotnych.
Po ludzku: schemat metra zamiast zdjęcia satelitarnego. Czym NIE jest: kłamstwem ani uproszczeniem „bo się nie chciało". Abstrakcja jest dobra lub zła względem celu: schemat metra jest świetną abstrakcją dla pasażera i fatalną dla ekipy kopiącej tunel.
Cała informatyka jest wieżą abstrakcji: zmienna (dział 3) to abstrakcja komórki pamięci, lista to abstrakcja wielu komórek, graf (dział 9) to abstrakcja dowolnej sieci połączeń — miast, ludzi, stron internetowych. Modelując problem (etap 2 myślenia komputacyjnego!), wykonujesz właśnie akt abstrakcji: z całej złożoności świata zostawiasz to, co algorytm musi widzieć.
Redukcja: podepnij się pod znane. Drugi zawodowy odruch: zanim zaczniesz wymyślać, sprawdź, czy Twój problem nie jest starym problemem w przebraniu. „Znajdź parę uczniów o tej samej dacie urodzin" — to po posortowaniu listy dat problem „czy sąsiednie elementy są równe", trywialny. „Ułóż plan przesiadek" — to szukanie drogi w grafie, rozwiązane pół wieku temu. Sprowadzenie nowego problemu do znanego nazywamy redukcją; duża część zawodowej biegłości to bogaty katalog problemów-wzorców, do których umie się redukować. Ta książka taki katalog systematycznie buduje.
Heurystyka: wystarczająco dobrze. Czasem dokładne rozwiązanie jest osiągalne, ale nieopłacalne — kosztowałoby lata obliczeń. Kurier z 20 paczkami, szukający najkrótszej trasy, ma do wyboru więcej kolejności odwiedzin, niż jest sekund w historii wszechświata; przejrzenie wszystkich odpada. Co robi nawigacja? Stosuje heurystykę — regułę, która zwykle daje dobrą (niekoniecznie najlepszą) odpowiedź w rozsądnym czasie: na przykład „jedź zawsze do najbliższego nieodwiedzonego punktu" (znajoma zachłanność w nowej roli!), a potem lokalnie poprawiaj trasę. Cena: tracisz gwarancję optymalności. Umowa jest uczciwa, o ile zawiera się ją świadomie — heurystyka to narzędzie, nie wymówka.
⚠️ Uwaga, pułapka
Nie myl heurystyki z algorytmem przybliżonym „bo się pomyliłem". Heurystykę wybiera się świadomie, znając jej ograniczenia i umiejąc ocenić jakość wyniku. Odpowiedź maturalna „użyję heurystyki" bez słowa o tym, co tracimy, jest warta tyle, co „jakoś to będzie".
🌍 Powiązania
Abstrakcja to chleb powszedni wszystkich nauk: fizyk liczy rzut ukośny „bez oporu powietrza" (i wie, kiedy wolno), ekonomista rysuje popyt i podaż bez miliona czynników, a mapa PKP jest abstrakcją torów. Heurystyki zaś stosujesz codziennie: „na sprawdzianie rób najpierw zadania, które umiesz" nie gwarantuje maksimum punktów — ale zwykle się opłaca.
🛠️ Teraz Ty
Problem: „ułóż grafik dyżurów klasowych na semestr, uwzględniając nieobecności i sprawiedliwość". Zapisz w punktach: (1) jak zaatakujesz go zstępująco — jakie moduły widzisz z lotu ptaka; (2) jakie klocki zbudowałbyś wstępująco w pierwszej kolejności; (3) co pominiesz w modelu (abstrakcja) i (4) do jakiego znanego Ci problemu daje się to zredukować (podpowiedź: jednostka 1.1, zadanie 3). Bez komputera — to ćwiczenie z projektowania.
📐 Definicje tej lekcji
- Metoda zstępująca — projektowanie od całości do szczegółów; elementy najpierw jako czarne skrzynki.
- Metoda wstępująca — budowanie od małych, przetestowanych elementów ku całości.
- Abstrakcja — pominięcie szczegółów nieistotnych dla celu; zatrzymanie istoty.
- Redukcja — sprowadzenie nowego problemu do problemu już rozwiązanego.
- Heurystyka — reguła dająca zwykle dobre rozwiązanie w rozsądnym czasie, bez gwarancji optymalności.
📌 Najważniejsze w pigułce
- Zstępująco: od wizji do klamek; wstępująco: od klocków do zamku; w praktyce — oba naraz.
- Abstrakcja i redukcja to dwa najczęstsze ruchy zawodowca: pomiń nieistotne, podepnij pod znane.
- Heurystyka wymienia gwarancję optymalności na czas — i trzeba tę umowę zawierać świadomie.
🎒 Zadania
- Dla problemu „system zapisów na szkolne kółka" wypisz dekompozycję zstępującą (dwa poziomy) oraz trzy klocki, od których zacząłbyś wstępująco.
Wskazówka i odpowiedź
Zstępująco np.: (I) konta i logowanie, (II) katalog kółek z limitami, (III) zapisy i rezygnacje, (IV) raporty dla opiekunów; poziom niżej dla (III): sprawdzenie limitu → wpis na listę → potwierdzenie → lista rezerwowa. Wstępująco np.: „wczytaj listę kółek z pliku", „sprawdź, czy uczeń jest już zapisany", „policz wolne miejsca". Dobre klocki są małe i testowalne w pojedynkę.
- Schemat metra jest dobrą abstrakcją dla pasażera. Podaj dwa inne „widoki" tej samej sieci metra, które byłyby właściwą abstrakcją dla: (a) ekipy serwisującej tory nocą, (b) firmy planującej reklamy na stacjach.
Wskazówka i odpowiedź
(a) mapa z rzeczywistą geometrią torów, rozjazdami, dostępem technicznym i odległościami w metrach — kolejność stacji dla pasażera jest tu drugorzędna. (b) stacje z liczbą przechodzących osób w godzinach szczytu i powierzchniami reklamowymi — tory w ogóle nieistotne. Ten sam obiekt, trzy abstrakcje; „dobra abstrakcja" zawsze znaczy „dobra do czegoś".
- Nawigacja proponuje trasę przez miasto w ułamku sekundy, choć możliwych tras są miliardy. Wyjaśnij w 3–4 zdaniach, jakie strategie z tej jednostki musi łączyć — i dlaczego wynik bywa nieidealny.
Wskazówka i odpowiedź
Abstrakcja: miasto staje się grafem skrzyżowań i odcinków z czasami przejazdu (znikają krawężniki, witryny, kałuże). Redukcja: „dojedź najszybciej" to znany problem najkrótszej drogi w grafie. Heurystyki: przy ogromnych mapach i zmiennym ruchu algorytm przycina przeszukiwanie (np. preferuje kierunek „ku celowi") i korzysta z prognoz korków — dlatego trasa jest zwykle świetna, ale nie ma gwarancji, że absolutnie najlepsza; czasem lokalny kierowca zna sprytniejszy skrót.
🔍 Sprawdź, czy umiesz
- Dobrać metodę (zstępująca/wstępująca) do opisanego projektu i uzasadnić wybór.
- Wskazać abstrakcję i redukcję w rozwiązaniu, które ktoś Ci pokazał.
- Wyjaśnić, co zyskuje i co traci algorytm heurystyczny.