Дерево Штерна-Броко является бинарным деревом фракций , где каждая фракция приобретается путем добавления числителе и знаменателя двух фракций соседних его в указанных выше уровнях.
Он генерируется, начиная с 0/1
и 1/0
как «фракции конечной точки», и оттуда, итерируя, помещая одну дробь между каждой последовательной парой дробей, добавляя вместе числители и знаменатели этих дробей, например, так:
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
В каждой итерации дерева Штерна-Броко ( n
итерация) 2^n + 1
в последовательности присутствуют элементы, которым мы можем приписать дробь от 0/2^n
до 2^n/2^n
. Каждая новая итерация просто вставляет одну дробь «наполовину» между каждой парой последовательных дробей.
Это делает дерево Штерна-Броко взаимно однозначным отображением между положительными рациональными числами и двоичными дробями между 0 и 1, что также служит доказательством того, что два набора имеют одинаковую мощность.
Ваша задача - написать программу или функцию, которая, учитывая числитель и знаменатель положительного рационального числа в самых низких терминах, определяет двоичную дробь, которая соответствует позиции этой дроби в дереве Штерна-Броко.
Примеры входов и выходов приведены ниже:
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)
Входы, которые вам не нужно поддерживать, но включены для справки:
0/1 -> 0/1 (0/1 is considered the left number)
1/0 -> 1/1 (1/0 is considered the rightmost number)
Самая короткая программа на любом языке для достижения этой цели побеждает.
1/1 => 1
, 1/2 => 2
, 2/1 => 3
, 1/3 => 4
и т.д.). Если число, сгенерированное таким образом для узла, равно n
, то 2^lg n
(двоичный журнал) - это самый высокий установленный бит n
, и желаемая двоичная дробь равна (2*(n - 2^lg n) + 1) / 2^(lg n + 1)
. (Любой, кто пытается использовать ассемблерное решение в наборе команд с битом-наивысшего набора, вероятно, захочет использовать этот подход).