Metoda D'Hondta jest stosowana w celu podziału mandatów wyborczych opartych na proporcjonalnej reprezentacji z listami partyjnymi. Stosowana jest ona podczas wyborów parlamentarnych w Polsce i innych krajach. W tym artykule zostanie opisany algorytm, który przeprowadzi wybory na jej podstawie.
Na wejściu dostajemy ile jest komitetów wyborczych, ile dostały głosów oraz ile mandatów jest do przydzielenia. Zakładamy, że każdy komitet wyborczy osiągnął próg wyborczy. Dla każdego komitetu obliczamy ilorazy Ii, gdzie i-ta wartość to liczba oddanych głosów na komitet K podzielona przez i. Następnie tworzymy pary (Ii, k). Następnie sortujemy pary po ilorazie i wybieramy tyle pierwszych par ile jest mandatów. Potem wystarczy policzyć ile par należy do którego komitetu. W przypadku, gdy dwa komitety mają ten sam iloraz to wpierw należy wybrać komitet, który otrzymał więcej głosów.
Przypuścmy, że mamy 3 komitety A, B i C, które otrzymały po 540, 300 i 360 głosów. W tabeli obliczamy kolejne ilorazy. Przykładowo komitet A zdobył 540 głosów, więc I1 = 540, I2 = 270, .., I5 = 108, .. Obliczenia te wykonujemy też dla innych komitetów i najłatwiej je ułożyć w tabelce.
Nazwa | A | B | C |
---|---|---|---|
Głosów | 540 | 300 | 360 |
I1 | 540 | 300 | 360 |
I2 | 270 | 150 | 180 |
I3 | 180 | 100 | 120 |
I4 | 135 | 75 | 90 |
I5 | 108 | 60 | 72 |
Mamy do podziału dokładnie 5 mandatów, więc znajdujemy teraz pięć największych ilorazów. Dodatkowo zostały dopisane dwa kolejne wyniki.
Iloraz | Komitet |
---|---|
540 | A |
360 | C |
300 | B |
270 | A |
180 | A |
Koniec | mandatów |
180 | C |
150 | B |
W tym przypadku 3 mandaty przypadają komitetowi A i po jednym mandacie komitetowi B i C. Jak można zauważyć iloraz 180 otrzymał komitet A i C, ale A miał więcej głosów, dlatego mandat najpierw otrzymał on.
Algorytm realizujacy metodę D'Hondta przyjmuje trzy argumenty. Są to kolejno: ilość komitetów, list zawierająca głosy oddane na każdy komitet oraz ile mandatów jest do przydzielenia.
Początkowo przygotowujemy wyzerowaną tablicę, gdzie na i-tej pozycji będzie ilość mandatów i-tego komitetu. Następnie w pętli dla każdego mandatu wyliczamy iloraz dla każdego komitetu. Iloraz jest zależny od aktualnej ilości mandatów przydzielonych komitetowi. Wybór komitetu, któremu dajemy mandat jest aktualizowany jeśli ma wyższy iloraz, albo jeśli iloraz jest równy, ale dostał więcej głosów ogólnie. Na koniec zwracana jest wyliczona tablica.
Do przetestowania działania algorytmu można skorzystać z poniższej funkcji, która wczyta potrzebne dane, a następnie wypisze wynik.