给定一个整数x,其中x可以是负数或正数。找出在base-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看起来不太好!

最佳答案

这不是一个完整的解决方案,但它可能会给出一个关于如何进行的好主意。
假设您的base-negative-2表示最多包含n个数字。它所代表的数字范围是多少?
举几个例子:
长度0或更小:0
长度1或更小:0…1个
长度小于等于2:-2…一
长度小于等于3:-2五
长度4或以下:-10五
您可能会注意到决定上述内容的递归规则;如下所示:
通过将2n-1相加或相减到先前范围的适当末端来扩展范围
你甚至不需要一个“封闭的”(在数学意义上)公式,只需要一个递归实现。扩展范围,直到目标数字落在范围内;然后生成表示。
顺便说一下,它也在Wikipedia中描述过。

关于algorithm - 生成最短位序列以-2,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34776302/

10-11 04:26