Witam,
no to ja wrzucę swoje 3 grosze.
Problem:
Znaleźć dla danego tekstu (kilka słów) największy rozmiar czcionki, ale taki żeby tekst mieścił się na podanym regionie. Nie będę się tutaj skupiał na żadnym konkretnym API ani środowisku graficznym. Chodzi tylko o to, żeby przekazać główną myśl. Załóżmy zatem, że mamy funkcję, która zwraca nam wartość logiczną, jeśli zadany tekst mieści się na podanym obszarze.
Zastosowanie:
Akurat z tym problemem miałem do czynienia na telefonach komórkowych, gdzie funkcja zwracająca faktyczną wielkość zajmowanego tekstu była STRASZNIE WOLNA. Pewnie na domowych PCtach nie ma to aż takiego znaczenia - chyba jedyny problem, gdzie może wystapić zauważalny spadek wydajności to rozwiązywanie tego w środowisku javascript na stronie WWW.
Rozwiązanie:
Pierwsze jakie się nasuwa.
int rozm=1;
while( (checkFit("foobar", rozm, 100, 20)) && (rozm<100) ) rozm++;
Jak widać w powyższym kodzie ilość wywołań kosztownej funkcji checkFit będzie wynosić średnio kilkadziesiąt.
Po skojarzeniu, że wyszukiwanie binarne służy nie tylko do wyszukiwania

int rozm=0;
int proba=64;
while(proba){
if (checkFit("foobar", rozm+proba, 100, 20)) rozm+=proba;
proba>>=1;
}
Dzięki temu ilość wywołan kosztownej funkcji checkFit spada do kilku.
Podsumowanie:
Sądzę, że w wielu miejscach, gdzie planujecie, że ma się pojawić coś dużego i na środku (np. ukochany napis 'Game Over'

) i jeszcze nie wiadomo ile będzie miało znaków po przetłumaczeniu przez tłumacza itp. to można śmiało stosować.
W sumie to nie wiem jaki poziom zaawansowania ma prezentować ten dział. Być może dla niektórych rozwiązanie nr 2 jest absolutnie oczywiste. Mnie jednak nie przyszło od razu i bardzo się ucieszyłem gdy gra znowu zaczęła chodzić 'płynnie'.
A w ogóle to fajnie, że powstał taki dział na forum, bo do prowadzenia bloga to osobiście nie mam cierpliwości. A tak to zawsze coś na forum można wrzucić.