Trzecia część cyklu o algorytmach sortowania. Skąd bierze się granica n log n dla wszystkich algorytmów porównawczych, dlaczego jest nieprzekraczalna i jak sortowanie przez zliczanie, pozycyjne i kubełkowe przechodzą pod nią suchą stopą, nie porównując ani razu dwóch elementów. Implementacje w Pythonie, animacje z licznikiem porównań ustawionym na zero oraz uczciwy rachunek kosztów: pamięć, zakres kluczy i rozkład danych.
W kieszeni nosisz babiloński kalkulator sprzed czterech tysięcy lat. Skąd wziął się system sześćdziesiątkowy i liczenie na paliczkach, czemu 60 i 12 wygrywają z 10 liczbą dzielników, jak Egipcjanie podzielili noc na 12 godzin, skąd pochodzą słowa minuta i sekunda – i dlaczego rewolucyjna Francja przegrała z 10-godzinną dobą, choć jej dziesiętny czas przeżył w uniksowym timestampie.
Ostatnia cyfra PESEL-u, NIP-u, numeru karty płatniczej i dwie cyfry w IBAN-ie nie są losowe – to sumy kontrolne oparte na arytmetyce modularnej. Jakie błędy człowiek robi najczęściej, dlaczego wagi i moduł pierwszy łapią przestawione cyfry, algorytm Luhna w 15 linijkach oraz implementacje walidacji PESEL, NIP i IBAN w Pythonie, PHP i JavaScript.
Dlaczego Wielkanoc skacze po kalendarzu między 22 marca a 25 kwietnia? Computus – najstarszy algorytm świata: reguła paschalna, cykl Metona i kościelna pełnia Księżyca, algorytmy Gaussa i Meeusa z implementacjami w Pythonie i JavaScript, wyliczanie ruchomych świąt oraz wbudowane funkcje PHP easter_date i easter_days.
Pół historii, pół kodu: dlaczego mamy lata przestępne (reguła 4/100/400), jak Europa gubiła dni przy reformie gregoriańskiej – 10 dni w 1582, 11 dni w Anglii w 1752, szwedzki 30 lutego 1712 – oraz algorytmy wiecznego kalendarza: kongruencja Zellera, metoda Sakamoto i Doomsday, z implementacjami i wbudowanymi funkcjami języków.
Zamiana liczb dziesiętnych na binarne – z częścią całkowitą i (rzadko porządnie tłumaczoną) częścią ułamkową. Algorytm mnożenia przez 2, kiedy ułamek jest skończony, a kiedy nieskończony, wykrywanie okresu oraz implementacje w Pythonie, JavaScript, PHP i C++. Plus most do niedokładności liczb zmiennoprzecinkowych.
Jak zamienić liczbę binarną na dziesiętną: algorytm dla części całkowitej i ułamkowej oraz gotowy kod w Pythonie, JavaScripcie, PHP i C++. Krok po kroku.