生成最短位序列基-2

时间:2016-01-13 20:21:24

标签: algorithm shortest-path

给定整数X,其中X可以是负数或正数。在基-2系统中找到代表X的最短位序列。

在基-2系统中,给定N位数组A,所表示的整数为:i = 0..N-1

的A [i] *( - 2幂i)之和

示例:

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

因此,假设X = 18,算法应该返回[0,1,1,0,1]

关于如何实现这样一个算法的任何想法..这样,给定一个整数X,它返回表示该整数的最短位序列?

我想出的唯一的事情就是强力搜索..从第0位开始并计算所有可能的总和,直到其中一个总和等于X ..这看起来不太好!

1 个答案:

答案 0 :(得分:2)

这不是一个完整的解决方案,但它可能会对如何继续提供一个好主意。

假设您的base-negative-2表示最多包含N个数字。它代表的数字范围是多少?

一些例子:

  • 长度0或更少:0
  • 长度1或更少:0 ... 1
  • 长度2或更少:-2 ... 1
  • 长度3或更短:-2 ... 5
  • 长度4或更短:-10 ... 5

你可能会注意到决定上述情况的递归规则;像这样的东西:

  

通过在早期范围的适当末尾添加或减去2 n-1 来扩展范围

你甚至不需要关闭" (在数学意义上)这个公式,只是一个递归实现。扩展范围,直到目标数字落入其中;然后生成你的代表。

BTW它也在Wikipedia中描述。