2016-01-13 2 views
2

Задайте целое число X, где X может быть отрицательным или положительным. найти кратчайшую последовательность бит, которая представляет X в системе base -2.Создать кратчайшую последовательность бит-бит -2

В базовой системе -2, учитывая массив А N битов, представляемое целое число: сумма А [я] * (- 2 мощности я) для г = 0..N-1

пример:

[1,0,1] = 5 
[1,0,0,1] = -7 
[1,0,0,1,0,1] = -39 

так, учитывая Х = 18, алгоритм должен возвращать [0, 1, 1, 0, 1]

любую идею о том, как реализовать такой алгоритм .. таким образом, что дано integer X возвращает кратчайшую последовательность бит, которая представляет это целое число?

Единственное, что я придумал, это поиск грубой силы .. начиная с бит 0 и вычисляя все возможные суммы, пока одна из сумм не будет равна X .., которая не выглядит красивой!

+3

Разве вы не должны самостоятельно решать свою домашнюю работу/соревнование? –

+0

@ СалвадорДали, который сказал вам, что это домашнее задание? – Johny

+0

Кажется, вы спрашиваете, что такое двоичное представление целого? В этом случае «кратчайшая последовательность бит» не имеет смысла, для каждого номера существует одна и только одна битовая последовательность. – Svea

ответ

3

Это не полное решение, но оно, вероятно, даст хорошее представление о том, как действовать.

Предположим, что ваше базовое отрицательное-2 представление содержит не более N номеров. Каким будет диапазон чисел, которые он представляет?

Несколько примеров:

  • длина 0 или меньше: 0
  • длина 1 или меньше: 0 ... 1
  • длина 2 или менее: 1 -2 ...
  • длина 3 или меньше: -2 ... 5
  • длина 4 или менее: -10 ... 5

Вы, вероятно, заметили, что рекурсивная правило, которое определяет выше; что-то вроде этого:

Расширение диапазона путем сложения или вычитания 2 п-1 к соответствующему концу ранее диапазона

Вам не нужно даже «закрытой» (в математический смысл) формула для этого, просто рекурсивная реализация. Расширьте диапазон, пока ваши целевые номера не попадут внутрь; затем сгенерируйте ваше представление.

BTW это также описано в Wikipedia.

+0

+1 для ссылки в Википедии - особенно полезен раздел [Расчет] (https://en.wikipedia.org/wiki/Negative_base#Calculation). – Gan

Смежные вопросы