Z doby do kilku minut, czyli sortowanie i szukanie binarne
Utworzono: 10 kwietnia 2001 Zaktualizowano: 1 października 2026
Dobór respondentów liczył się całą noc i jeszcze kawałek dnia, a wystarczyły dwa algorytmy ze studiów.
Jak przyszedłem, rządził Pascal i skrypty do doboru prób do badań. Skrypty były napisane na pascalowych kolekcjach i przeszukiwane liniowo, czyli jak coś miało się znaleźć w czymś, to dla każdego elementu leciało się po całej drugiej liście, O(n²).
Przy małych próbach nikt tego nie zauważał, przy dużych mój szef przychodził rano do pracy z laptopem jak z pizzą, bo dobór respondentów nadal się kręcił od poprzedniego dnia.
Byłem świeżo po algorytmach i znałem dwie rzeczy, które tu pasowały idealnie: sortowanie i przeszukiwanie binarne. Listę sortuję raz, a potem zamiast przechodzić ją za każdym razem od początku, szukam w niej, dzieląc na pół, więc przy każdym wyszukiwaniu zamiast n porównań jest log n.
{ było: dla każdego respondenta cała lista od początku } for i := 1 to RespCount do for j := 1 to UsedCount do if Resp[i].Id = Used[j] then Skip(i); { jest: sortuję raz, potem szukam binarnie } SortIds(Used, UsedCount); for i := 1 to RespCount do if BinarySearch(Used, UsedCount, Resp[i].Id) then Skip(i);
Coś, co liczyło się dobę, liczy się teraz kilka minut, szef przestał nosić laptopa jak pizzę, a ja zdobyłem u niego uznanie.