To jeden z tych algorytmów, które wyglądają na czysto polityczne, a w gruncie rzeczy są bardzo matematyczne. Poniżej rozkładam na czynniki pierwsze metodę d’Hondta: pokazuję, jak liczy się mandaty, dlaczego wynik nie zawsze jest „idealnie proporcjonalny” i jak zapisać cały mechanizm w prostym modelu informatycznym. Przy okazji wyjaśniam, czemu jedne listy zyskują na tym systemie więcej, a inne mniej.
Najkrócej rzecz ujmując, to algorytm zamieniający głosy na mandaty
- Polega na dzieleniu liczby głosów przez kolejne liczby naturalne i wybieraniu największych ilorazów.
- Każdy wybrany iloraz oznacza jeden mandat dla danej listy.
- W Polsce przy wyborach do Sejmu liczą się też progi 5% dla komitetów partyjnych i 8% dla koalicyjnych.
- System zwykle premiuje większe ugrupowania, więc nie daje wyniku „1 do 1” z samym procentem poparcia.
- W informatyce można go opisać jako prosty, deterministyczny algorytm rankingowy.
- Najłatwiej zrozumieć go na małej tabeli ilorazów, a nie na samej definicji.
Na czym polega metoda d’Hondta i dlaczego traktuję ją jak algorytm
W swojej istocie to metoda najwyższych ilorazów. Najpierw bierze się liczbę ważnych głosów oddanych na każdą listę, potem dzieli ją przez 1, 2, 3, 4 i kolejne liczby naturalne, a następnie wybiera się tyle największych ilorazów, ile mandatów trzeba rozdzielić. Brzmi politycznie, ale logicznie działa jak zwykły algorytm sortowania i selekcji.
Przeczytaj również: Jak pomnożyć w Excelu - proste metody i najczęstsze błędy do uniknięcia
Dlaczego patrzę na nią jak na algorytm
Bo ma jasno określone wejście, regułę przetwarzania i wynik. Wejściem są głosy i liczba mandatów, regułą jest dzielenie oraz ranking ilorazów, a wyjściem jest lista mandatów przypisana do konkretnych komitetów. To ważne z perspektywy informatyki, bo taki model da się łatwo zakodować, przetestować i porównać z innymi metodami.
Najważniejsza cecha tego mechanizmu jest prosta: nie porównuje się samych procentów poparcia, tylko kolejne „średnie” uzyskane po dzieleniu głosów. Z tego powodu dwa komitety z podobnym wynikiem mogą dostać zupełnie inną liczbę mandatów, jeśli działają w różnych okręgach albo konkurują o inną liczbę miejsc. Najlepiej zobaczyć to na konkretnym przykładzie.
W praktyce ta logika jest bardzo czytelna, gdy zapisze się ją w tabeli. A właśnie taki zapis zwykle najbardziej pomaga uczniom i osobom, które chcą zrozumieć mechanizm bez politycznego szumu.
Jak policzyć mandaty krok po kroku
Załóżmy, że w okręgu są do rozdania 3 mandaty, a trzy listy uzyskały odpowiednio 10 100, 6 700 i 4 000 głosów. Dzielimy każdą z tych liczb przez kolejne dzielniki i porównujemy powstałe ilorazy. W praktyce nie trzeba od razu liczyć wszystkiego do końca świata, tylko tyle wartości, ile może wejść do czołówki wyników.
| Lista | Głosy | /1 | /2 | /3 |
|---|---|---|---|---|
| A | 10 100 | 10 100 | 5 050 | 3 366,67 |
| B | 6 700 | 6 700 | 3 350 | 2 233,33 |
| C | 4 000 | 4 000 | 2 000 | 1 333,33 |
Największe ilorazy w kolejności to: 10 100, 6 700, 5 050, 4 000 i 3 366,67. Gdybyśmy mieli 3 mandaty, trafiają one odpowiednio do list A, B i A. W efekcie lista A dostaje 2 mandaty, lista B 1 mandat, a lista C nie zdobywa żadnego miejsca.
To dobry moment, żeby zauważyć jedną rzecz: mandat nie trafia do listy „za jeden dobry wynik”, tylko za to, że jej kolejne ilorazy nadal mieszczą się w czołówce całego rankingu. Jeśli ostatni mandat przypada przy remisie ilorazów, polskie przepisy przewidują dodatkowe reguły rozstrzygania, więc nie zostawia się tego przypadkowi.
Gdy mam tłumaczyć ten mechanizm komuś pierwszy raz, zawsze zaczynam od takiego mini-przykładu. Dopiero potem przechodzę do tego, gdzie ta metoda jest używana w praktyce i czemu jej skutki bywają politycznie odczuwalne.
Gdzie w Polsce ta metoda ma realne znaczenie
W polskim systemie wyborczym ten algorytm ma największe znaczenie przy podziale mandatów w wyborach proporcjonalnych do Sejmu. Dopuszczone do podziału są tylko listy, które spełniają ustawowe warunki wejścia do gry, a więc przede wszystkim próg wyborczy.
- 5% ważnych głosów w skali kraju dla komitetu partyjnego.
- 8% ważnych głosów w skali kraju dla komitetu koalicyjnego.
- Wyjątek dla mniejszości narodowych - po spełnieniu formalnych warunków ich listy mogą być zwolnione z progu 5%.
- Wariant szczególny - gdy standardowe progi nie zostaną spełnione przez żadną listę albo tylko przez jedną, przepisy przewidują niższe minimum 3% dla komitetów partyjnych i 5% dla koalicyjnych.
To właśnie te warunki sprawiają, że wynik bywa inny, niż sugerowałby sam procent poparcia. Komitet z 4,9% głosów może zostać całkowicie poza podziałem mandatów, a komitet z 5,1% wejść do gry i zacząć zbierać mandaty w okręgach. Matematycznie różnica wygląda na niewielką, ale politycznie potrafi zmienić bardzo dużo.
Warto też pamiętać, że w wyborach proporcjonalnych nie liczy się wyłącznie skala kraju. Ostateczny efekt zależy od wyników w poszczególnych okręgach, ich wielkości i tego, jak rozkładają się głosy między listami. To prowadzi już wprost do pytania, dlaczego niektóre ugrupowania zyskują więcej niż inne.
Dlaczego wynik faworyzuje większe ugrupowania
To nie jest wada programu, tylko konsekwencja reguły. Metoda d’Hondta premiuje listy, które od początku mają wysoki wynik, bo ich ilorazy przez 2, 3 czy 4 nadal pozostają konkurencyjne wobec ilorazów słabszych list. W praktyce oznacza to, że większe ugrupowania częściej „zabierają” kolejne mandaty jeszcze zanim mniejsze listy zdążą wejść do czołówki rankingu.
Najmocniej wpływają na to cztery rzeczy:
- Wielkość okręgu - im mniej mandatów do rozdania, tym ostrzej działa mechanizm i tym trudniej o pełną proporcjonalność.
- Rozproszenie głosów - gdy poparcie jest rozbite na wiele średnich list, największe ugrupowania łatwiej przebijają się do czołówki ilorazów.
- Próg wyborczy - odcina listy, które mogłyby wejść do podziału mandatów przy innym systemie.
- Remis na granicy ostatniego mandatu - przy identycznych ilorazach wchodzą dodatkowe reguły, więc wynik nie zawsze wynika wyłącznie z gołego dzielenia.
Właśnie dlatego w małym okręgu mandat potrafi pójść do listy, która ma wyraźnie mniej głosów niż lider, ale nadal utrzymuje jeden z najwyższych ilorazów. W dużym okręgu ta asymetria jest zwykle słabsza, bo ranking ilorazów ma więcej miejsc do obsadzenia i wynik robi się bliższy proporcji głosów.
Jeśli patrzysz na to jak na proces decyzyjny, warto zapamiętać prostą zasadę: im większa liczba mandatów do rozdania, tym metoda zachowuje się łagodniej. To prowadzi do bardzo praktycznego pytania informatycznego: jak taki mechanizm zapisać w kodzie bez błędów zaokrągleń i bez niepotrzebnej złożoności?
Jak zapisać ten mechanizm w kodzie lub arkuszu
To dobry temat na zadanie z informatyki, bo algorytm jest prosty, ale wymaga porządku. Najpierw trzeba ustalić dane wejściowe, potem wygenerować ilorazy, następnie je posortować i na końcu przypisać mandaty. W arkuszu kalkulacyjnym wystarczy kilka kolumn, a w kodzie lepiej od razu myśleć o strukturze danych, która nie wymusza liczenia wszystkiego od zera po każdym mandacie.
- Wczytaj liczby głosów dla wszystkich list.
- Ustal liczbę mandatów do rozdania.
- Dla każdej listy oblicz kolejne ilorazy przez 1, 2, 3, 4 i tak dalej.
- Wybierz najwyższe ilorazy aż do wyczerpania mandatów.
- Zlicz, ile razy dana lista pojawiła się w czołówce.
wejście: votes[1..P], seats
dla każdej listy i:
push do kolejki (votes[i] / 1, i, 1)
powtórz seats razy:
(q, lista, dzielnik) = zdejmij_największy_element()
seatsWon[lista] += 1
push do kolejki (votes[lista] / (dzielnik + 1), lista, dzielnik + 1)
W wersji szkolnej można po prostu rozwinąć tabelę i posortować wszystkie ilorazy malejąco. W wersji bardziej technicznej lepiej użyć kolejki priorytetowej, czyli struktury danych, która zawsze zwraca największy aktualny wynik. Dzięki temu nie trzeba generować pełnej macierzy wszystkich dzielników dla każdej listy.
Jeśli chodzi o złożoność, wariant naiwny daje zwykle wynik rzędu O(P × S log(P × S)), gdzie P to liczba list, a S liczba mandatów. Wersja z kolejką priorytetową jest wygodniejsza przy większych danych i w praktyce schodzi do O(S log P). Dla zwykłej lekcji to może brzmieć jak detal, ale właśnie takie detale odróżniają „liczenie na piechotę” od sensownej implementacji.
Jedna uwaga praktyczna: przy dużych liczbach głosów lepiej nie opierać porównania na przypadkowych zaokrągleniach typu float. Bezpieczniej jest porównywać ułamki przez mnożenie krzyżowe albo przechowywać dodatkowo licznik i mianownik. Dopiero wtedy algorytm zachowuje się naprawdę deterministycznie.
Gdy już widać, jak to zakodować, naturalnie pojawia się pytanie o konkurencyjne metody. I tu różnice zaczynają być naprawdę czytelne.
D’Hondt a inne metody podziału mandatów
Najczęściej porównuję ten system z metodą Sainte-Laguë i z metodą największych reszt. Dopiero obok nich widać, że nie ma jednej „neutralnej” drogi przeliczania głosów na mandaty - każda metoda premiuje nieco inny rozkład poparcia.
| Metoda | Jak działa | Kogo zwykle faworyzuje | Co warto zapamiętać |
|---|---|---|---|
| d’Hondta | Dzielniki 1, 2, 3, 4... | Większe listy | Stabilna, prosta i mniej korzystna dla małych ugrupowań |
| Sainte-Laguë | Dzielniki 1, 3, 5, 7... | Małe i średnie listy | Bliższa czystej proporcjonalności, łagodniejsza w podziale mandatów |
| Największych reszt | Najpierw quota, potem reszty | Zależnie od kwoty i zaokrągleń | Wynik mocno zależy od przyjętej normy przedstawicielstwa |
Jeżeli zależy ci na zrozumieniu polskiej praktyki wyborczej, d’Hondt jest pierwszym wyborem do nauki. Jeżeli chcesz zobaczyć, skąd biorą się różnice między „większościowym” a „bardziej proporcjonalnym” efektem, porównanie z Sainte-Laguë daje bardzo dużo. Ja traktuję takie zestawienie jak test porównawczy dla samego algorytmu: od razu widać, czy celem jest wzmocnienie największych list, czy możliwie wierne odwzorowanie rozkładu głosów.
To prowadzi do najczęstszej pułapki, którą widzę u osób uczących się tego tematu po raz pierwszy: błędnego czytania wyników.
Najczęstsze błędy przy interpretacji wyników
W praktyce problem rzadko polega na samym liczeniu. Częściej ktoś dobrze liczy, ale źle rozumie, co z tego wynika. Dlatego warto od razu wyłapać kilka typowych pomyłek.
- Mylenie procentów z mandatami - 10% głosów nie musi oznaczać 10% miejsc, bo działa ranking ilorazów i próg wyborczy.
- Pomijanie wielkości okręgu - w okręgach z małą liczbą mandatów wynik bywa dużo mniej proporcjonalny niż w dużych.
- Zaokrąglanie zbyt wcześnie - wcześniejsze obcięcie liczb potrafi zmienić kolejność ilorazów i dać błędny rezultat.
- Patrzenie tylko na wynik ogólnokrajowy - mandaty rozdziela się okręgami, więc suma kraju nie oddaje całej dynamiki.
- Ignorowanie remisu na granicy ostatniego mandatu - przy równej wartości ilorazów trzeba zastosować dodatkową regułę, a nie zgadywać.
Najważniejszy wniosek jest prosty: ten algorytm nie premiuje samej przewagi, tylko przewagę utrzymaną w kolejnych rundach dzielenia. Dlatego niewielka różnica w głosach może przełożyć się na dużą różnicę w mandatach, zwłaszcza gdy okręg jest mały albo scena polityczna mocno rozdrobniona.
Jeśli masz tę różnicę z tyłu głowy, łatwiej wykorzystasz ten temat zarówno na lekcji, jak i w zadaniu z programowania. Zostaje już tylko krótka rzecz, która domyka całość i pomaga utrwalić temat bez dublowania wszystkiego od nowa.
Co warto zapamiętać przy nauce tego algorytmu
Gdy tłumaczę ten temat, zawsze zaczynam od jednej prostej tabeli ilorazów. To lepsze niż sucha definicja, bo od razu widać, że algorytm nie „przelicza polityki”, tylko porządkuje głosy według jasno zdefiniowanej reguły.
- Najpierw sprawdź, które listy w ogóle mogą brać udział w podziale mandatów.
- Potem policz kolejne ilorazy i ustaw je malejąco.
- Na końcu policz, ile razy dana lista pojawia się w czołówce rankingu.
Jeżeli chcesz naprawdę zrozumieć ten temat, policz go ręcznie na trzech listach i pięciu mandatach, a dopiero później przejdź do większych przykładów albo do implementacji w kodzie. To daje lepszy efekt niż wkuwanie definicji, bo pokazuje logikę działania całego systemu, a nie tylko jego nazwę.
