找回密码
 欢迎注册
查看: 14171|回复: 11

[求助] 一个特殊反序数列的实现

[复制链接]
发表于 2010-3-9 11:27:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
给定一个正整数$n$,令$v=n$,进行如下步骤:
1、若$v$为偶数,则$v=v/2$;
2、若$v$为奇数,则$v=(v+1)/2$;
经过有限次上述步骤(即$v=|__(v+1)/2__|$),该$v$逐渐减小,直到等于$1$时停止操作。
比如:如果$n=100$,则$v$依次可取到:100、50、25、13、7、4、2、1
反向后的序列为:1→2→4→7→13→25→50→100

现在的问题是:不用数组记录,如何巧妙得到上述反向序列?
比如说上面的例子,已知$n=100$,在得到$v=4$时,如何直接确定出其后续数是$v=7$,然后是$13$、$25$、。。。

最好是通过简单的二进制运算实现。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-3-9 14:11:45 | 显示全部楼层
$v="ceiling"(n/2^(("int"(log(n,2))-"int"(log(v,2)))))$
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-3-9 14:13:36 | 显示全部楼层
n=100 二进制7位
v=4 二进制3位
v=n/2^(7-3)=6.25 向上取整7
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-3-9 14:24:57 | 显示全部楼层
3# northwolves

可是7的二进制仍为3位啊,怎么得到下一个后续数13的呢?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-3-9 16:09:54 | 显示全部楼层
3# northwolves

可是7的二进制仍为3位啊,怎么得到下一个后续数13的呢?
gxqcn 发表于 2010-3-9 14:24

这种算法没有意义
就像以前用异或代替temp交换变量
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-3-9 16:17:46 | 显示全部楼层
3# northwolves

可是7的二进制仍为3位啊,怎么得到下一个后续数13的呢?
gxqcn 发表于 2010-3-9 14:24

northwolves 的意思是
100/2^6=1.5=2
100/2^5=3.1=4
100/2^4=6.2=7
100/2^3=12.5=13
100/2^2=25
100/2^1=50
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-3-9 16:21:01 | 显示全部楼层
如果是129,northwolves 的公式能算出来吗
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-3-9 16:22:30 | 显示全部楼层
(1 << 7)=128 >=100
(2 << 6)=128 >=100
(4 << 5)=128 >=100
(7 << 4)=112 >=100
(13 << 3)=108 >=100
(25 << 2)=100 >=100
(50 << 1)=100 >=100
(100 << 0)=100 >=100

已知 n,例子中n=100

初始值:
  e= log2(n) 向上取整,
  $v_0=1$
迭代
  e--;
  $V_{i} = V_{i-1} ** 2 - 1$
  if (  ($v_i < < e$)  <n )
     $v_i$++;

评分

参与人数 1威望 +3 收起 理由
gxqcn + 3 观点精辟

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-3-9 16:36:09 | 显示全部楼层
8# liangbch

这个算法很好,估计就是问题的解决思路了。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-3-9 16:58:58 | 显示全部楼层
6# qianyb

估计 northwolves 的本意也是这样的吧。
这倒也是一种比较好的方法。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-5-20 04:35 , Processed in 0.046424 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表