给定整数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 ..这看起来不太好!
答案 0 :(得分:2)
这不是一个完整的解决方案,但它可能会对如何继续提供一个好主意。
假设您的base-negative-2表示最多包含N个数字。它代表的数字范围是多少?
一些例子:
你可能会注意到决定上述情况的递归规则;像这样的东西:
通过在早期范围的适当末尾添加或减去2 n-1 来扩展范围
你甚至不需要关闭" (在数学意义上)这个公式,只是一个递归实现。扩展范围,直到目标数字落入其中;然后生成你的代表。
BTW它也在Wikipedia中描述。