免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: xiaozhu2007
打印 上一主题 下一主题

[算法] 算法题一道,欢迎讨论 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2008-09-02 10:07 |只看该作者
哎,还是我老婆聪明
f(n)=1+f(n/2+n%2)

论坛徽章:
0
22 [报告]
发表于 2008-09-02 10:13 |只看该作者
不要结果要思路!

论坛徽章:
0
23 [报告]
发表于 2008-09-02 10:20 |只看该作者

回复 #16 kkndmammoth 的帖子

y=z=1 x=0得时候还是应该+1
进位可能对高位有帮助,考虑111011就知道了

补充:但是对11而言还是应该-1

[ 本帖最后由 bood 于 2008-9-2 10:26 编辑 ]

论坛徽章:
0
24 [报告]
发表于 2008-09-02 10:25 |只看该作者

回复 #22 xiaozhu2007 的帖子

思路就是搞清楚末尾有几个1得时候才值得+1,不然就是浪费操作
不过目前结论都有小问题……(包括我刚发的)

论坛徽章:
0
25 [报告]
发表于 2008-09-02 10:39 |只看该作者
原帖由 kkndmammoth 于 2008-9-1 20:21 发表
n的二进制表示1xxxxxxxx,设为k位。

题目的意思是用加减和移位消除最高位的1以外的所有的1。
若x都是零,显然只需要k-1次。

当x不全为零,下面的算法应该是最少
设最低三位位为xyz
z=0     则下一步操 ...


修改一下:
x=0, y=z=1的时候+1(此时必须n>3,否则-1)
这样应该没问题了

结论就是:
n%2=0,则f(n)=f(n/2)+1
(n+1)%4=0 && n>3,则f(n)=f(n+1)+1=f((n+1)/4)+3
其他情况,则f(n)=f(n-1)+1=f((n-1)/2)+2
最后,f(1)=0

论坛徽章:
0
26 [报告]
发表于 2008-09-02 10:44 |只看该作者
原帖由 bood 于 2008-9-1 18:39 发表


修改一下:
x=0, y=z=1的时候+1(此时必须n>3,否则-1)
这样应该没问题了

结论就是:
n%2=0,则f(n)=f(n/2)+1
(n+1)%4=0 && n>3,则f(n)=f(n+1)+1=f((n+1)/4)+3
其他情况,则f(n)=f(n-1)+1=f((n-1 ...


这个应该是正解了,呵呵。

论坛徽章:
0
27 [报告]
发表于 2008-09-02 11:48 |只看该作者
设这个数为i,作如下循环
int cnt=0;
while (i!=1) {
  cnt += i & 1 + 1;
  i>>1;
}

要优化的话,汇编的移位指令正合适。

[ 本帖最后由 jronald 于 2008-9-2 14:16 编辑 ]

论坛徽章:
0
28 [报告]
发表于 2008-09-02 11:51 |只看该作者
原帖由 jronald 于 2008-9-1 19:48 发表
设这个数为i,作如下循环
int cnt=0;
while (i!=1) {
  if (bit0==1)
    ++cnt;
  i>>1;
  ++cnt
}

要优化的话,汇编的移位指令正合适。


这不是死循环么。

嗯,楼上的改掉了。。。
主要还是要考虑 +1 还是 -1, 楼上的代码不是始终是 -1 么。

论坛徽章:
0
29 [报告]
发表于 2008-09-02 13:25 |只看该作者
原帖由 emacsnw 于 2008-9-2 11:51 发表


这不是死循环么。

嗯,楼上的改掉了。。。
主要还是要考虑 +1 还是 -1, 楼上的代码不是始终是 -1 么。


正整数,-1就可以啊。

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
30 [报告]
发表于 2008-09-02 13:26 |只看该作者
没有一个人严格证明了自己的算法,所以即便步骤对,也不完整。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP