W trakcie ostatnich wyborów samorządowych miałem okazję głosować w większym mieście, co oznaczało, że otrzymałem 3 karty do głosowania: na prezydenta miasta, do rady miasta i do sejmiku wojewódzkiego. Oznaczmy te karty jako KP, KR oraz KS. Wrzucając wypełnione karty do urny, podobnie jak pozostali głosujący, spowodowałem, że w urnie znalazły się karty do głosowania, które miały zadecydować nie tylko o prezydencie miasta, ale także o składzie rady i sejmiku. Z punktu widzenia całości głosowania, po zamknięciu dnia interesujące są pytania:
- ile głosów jest ważnych, a ile nieważnych?
- ile głosów zostało oddanych na poszczególne partie (nazwijmy jest A, B, …., Z) w ramach poszczególnych kart (KP, KR, KS)?
- ile głosów otrzymali poszczególni kandydaci z danej partii (A1, A2…, Z1, Z2,…ZN) lub poszczególni kandydaci z karty KP (KP1, KP2….KPN)?
Poniższy diagram pokazuje drzewko decyzyjne do zliczania głosów – przydział danej karty do odpowiedniego grupy. Zastosowano pewne uproszczenia. Oznaczenia „(…)” wskazują, że pominięto pewne elementy (w szczególności jeżeli są analogiczne jak już zaprezentowane).
Opierając się na tym drzewku, można powiedzieć, że podział na głosy ważne i nieważne wykonywany jest ręcznie, podobnie podział kart na ich typy (KP, KR, KS). Pozostałe elementy mogą już być określane, dzielone przez aplikację, zakładając, że dane osoby wprowadzają karty danego typu do aplikacji, a inne osoby karty osobnego typu. Można byłoby też to wprowadzać, na zasadzie, najpierw wybierać rodzaj głosowania, a potem dopiero wskazywać poszczególne elementy wymagane przez aplikację.
Najszybciej znana jest odpowiedź na liczbę ważnych kart. A potem na liczbę poprawnie wypełnionych głosów w ramach poszczególnych rodzajów głosowania (KP, KR, KS). Liczby te są później używane do określenia poszczególnych udziałów liczby głosów KP1/KP, KP2/KP…. KPN/KP w zależności od kandydatów. Podobnie głosy oddane na poszczególne partie – np. głosy na partię A oddane na karcie KR to KRA, czyli wtedy udział tej partii to KRA/KR.