A árvore Stern-Brocot é uma árvore binária de frações, onde cada fração é adquirida adicionando os numeradores e denominadores das duas frações vizinhas nos níveis acima.
É gerado iniciando com 0/1e 1/0como "frações de ponto final" e, a partir daí, iterando colocando uma fração entre cada par consecutivo de frações adicionando os numeradores e denominadores dessas frações, da seguinte forma:
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
Em cada iteração da árvore Stern-Brocot (a niteração), existem 2^n + 1elementos na sequência aos quais podemos atribuir uma fração de 0/2^npara 2^n/2^n. Cada nova iteração simplesmente insere uma fração "na metade" entre cada par de frações consecutivas.
Isso faz da árvore de Stern-Brocot um mapeamento individual entre os números racionais positivos e as frações binárias entre 0 e 1, servindo também como prova de que os dois conjuntos têm a mesma cardinalidade.
Sua tarefa é escrever um programa ou função que, dado o numerador e o denominador de um número racional positivo em termos mais baixos, determine a fração binária que corresponde à posição dessa fração na árvore Stern-Brocot.
Exemplos de entradas e saídas são fornecidos abaixo:
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)
Entradas que você não precisa oferecer suporte, mas estão incluídas para referência:
0/1 -> 0/1 (0/1 is considered the left number)
1/0 -> 1/1 (1/0 is considered the rightmost number)
O programa mais curto em qualquer idioma para atingir esse objetivo vence.
1/1 => 1, 1/2 => 2, 2/1 => 3, 1/3 => 4, etc.). Se o número assim gerado para um nó for n, então 2^lg n(log binário) será o bit mais alto configurado ne a fração binária desejada será (2*(n - 2^lg n) + 1) / 2^(lg n + 1). (Qualquer pessoa que tente uma solução de assembler em um conjunto de instruções com um bit de maior valor definido provavelmente desejará usar essa abordagem).