Есть ли способ математически рассчитать предзаказ-наследник узла по его метке? - PullRequest
0 голосов
/ 26 марта 2019

Есть побитовая функция, которая вычисляет преемника любого узла этого (помеченного) полного двоичного дерева глубины k ?

Метки битовые строки . Для каждого уровня l , с 0> l k , имеется 2 l меток l бит , На иллюстрации k = 3. Порядок меток лексикографический (такой же, как предзаказ в терминологии двоичного дерева).

Можно , а не использовать структуру данных bynary-tree *1027*, функция должна использовать только метку (!). Функция-преемник также использует параметр k , поэтому он равен s ( x , k ). Некоторые примеры результатов функции:

  • 00 == s (0, 3)
  • 001 == с (000, 3)
  • 1 == s (011, 3)
  • 10 == s (1, 3)
  • null == s (111, 3)

Это логический вывод, основанный на правилах синтаксиса меток, а не на структуре данных.

Цель - побитовая функция для двоичного представления.

PS: решением может быть ссылка на библиотеку ... на любом языке. Может использовать внутренний двоичный буфер или обычное целое число (например, 64 бита) для меток; можно использовать Javascript, C или любой другой язык ...


Нет проблем с отображением на другое представление метки, если существует простое биективное отношение. Например, мы можем представить метки парой целых чисел (размер, значение)

(size,value)    BitString representation
(1,0)           0
(2,0)           00
(3,0)           000
(4,0)           0000
(4,1)           0001
(3,1)           001
(4,2)           0010
(4,3)           0011
(2,1)           01
...             ...

Для строк ASCII, конечно, есть «визуальное решение». Экспресс с использованием Javascript:

function s(x,k) {
   let l = x.length
   if (l<k) 
     return x+'0';
   l--;
   if (x[l]=='0')
     return x.slice(0,l)+'1'
   else 
     return (x=='1'.padEnd(k,'1'))? null: x.slice(1)
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...