mathe 发表于 2008-10-28 16:50:37

在来一个改善,对于具有公共前缀的二进制数据,余下部分如果交替添加01,最后位为0的,直接将0改为1就可以得到最优数据,而不需要拆分分析了.

mathe 发表于 2008-10-28 16:58:28

现在以616作为例子,其二进制表示为$(1001101000)_b$
二进制表示是10位数,由于它比$(1101010101)_b$小,我们需要继续分析
首先第一个候选数为9位数$(101010101)_b$,
然后我们看模板$(1000******)_b$,根据前面规则,结果最大的数据为$(1000101011)_b$
然后看模版$(10010*****)_b$,根据前面规则,结果最大的数据为$(1001010101)_b$
再看模版$(1001100***)_b$,同样去最大结果的为$(1001100101)_b$
而最后一个余下的是数据本身,如果奇数需要检查,这里是偶数,就不用检查了.
所以最终我们只需要检查集合
${(101010101)_b,(1000101011)_b,(1001010101)_b,(1001100101)_b}$

mathe 发表于 2008-10-29 08:00:41

前面还是有错误,对于所有偶数位二进制数,取到最大值的应该是最低两位是1,其它位01交替的数而不是最高两位是1的数
页: 1 [2]
查看完整版本: 三星面试题