Drzewo Sterna-Brocota jest drzewo binarne, w którym każdy z frakcji frakcji uzyskuje się przez dodanie licznik i mianownik dwóch frakcji sąsiednich ją w ilości powyżej.
Jest generowany przez rozpoczynanie od 0/1
i 1/0
jako „ułamki punktu końcowego”, a następnie iterowanie przez umieszczenie jednej frakcji między każdą kolejną parą ułamków przez dodanie razem liczników i mianowników tych ułamków, w następujący sposób:
0. 0/1 1/0
1. 0/1 1/1 1/0
2. 0/1 1/2 1/1 2/1 1/0
3. 0/1 1/3 1/2 2/3 1/1 3/2 2/1 3/1 1/0
4. 0/1 1/4 1/3 2/5 1/2 3/5 2/3 3/4 1/1 4/3 3/2 5/3 2/1 5/2 3/1 4/1 1/0
W każdej iteracji drzewa Sterna-Brocota ( n
iteracja) 2^n + 1
w sekwencji znajdują się elementy, którym możemy przypisać ułamek od 0/2^n
do 2^n/2^n
. Każda nowa iteracja po prostu wstawia jedną frakcję „w połowie” między każdą parą kolejnych frakcji.
To sprawia, że drzewo Sterna-Brocota jest mapowaniem jeden na jeden między dodatnimi liczbami wymiernymi a ułamkami binarnymi między 0 a 1, tym samym służąc również jako dowód, że oba zestawy mają tę samą liczność.
Twoim zadaniem jest napisanie programu lub funkcji, która, biorąc pod uwagę licznik i mianownik dodatniej liczby wymiernej w najniższych kategoriach, określa ułamek binarny, który odpowiada pozycji tej frakcji w drzewie Sterna-Brocota.
Przykłady wejść i wyjść podano poniżej:
2/3 -> 3/8 (4th number in iteration 3)
4/7 -> 9/32 (between 1/2 and 3/5 in the chart above)
1/1 -> 1/2 (middle number in the first iteration)
Dane wejściowe, których nie potrzebujesz obsługiwać, ale zostały uwzględnione w celach informacyjnych:
0/1 -> 0/1 (0/1 is considered the left number)
1/0 -> 1/1 (1/0 is considered the rightmost number)
Zwycięża najkrótszy program w dowolnym języku, aby osiągnąć ten cel.
1/1 => 1
, 1/2 => 2
, 2/1 => 3
, 1/3 => 4
, itd.). Jeśli liczba wygenerowana w ten sposób dla węzła wynosi n
, wówczas 2^lg n
(log binarny) jest najwyższym ustawionym bitem n
, a pożądana część binarna to (2*(n - 2^lg n) + 1) / 2^(lg n + 1)
. (Każdy, kto spróbuje asemblera w zestawie instrukcji z bitem najwyższego zestawu, prawdopodobnie będzie chciał skorzystać z tego podejścia).