免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
11 [报告]
发表于 2008-09-01 17:08 |只看该作者

回复 #8 cjaizss 的帖子

nod,/2其实就是移位
记n的二进制位数为f(n),其中1的个数为g(n)
那么次数就是f(n)+g(n)-2
于是最快的做法就是建索引表了

论坛徽章:
0
12 [报告]
发表于 2008-09-01 17:22 |只看该作者
哎回去了,晚上接着想,做这种题好累啊!

论坛徽章:
0
13 [报告]
发表于 2008-09-01 19:48 |只看该作者
原帖由 bood 于 2008-9-1 17:08 发表
nod,/2其实就是移位
记n的二进制位数为f(n),其中1的个数为g(n)
那么次数就是f(n)+g(n)-2
于是最快的做法就是建索引表了

比如有个数的二进制是:
111111.......111(总之很多个了,比如100个)
则f(n)+g(n)-2=198

实际上,先加1,变成:
10000...0000000( 100个0)
除100次2就可以了。
于是需要101次。

并不是你的198次。。。

论坛徽章:
0
14 [报告]
发表于 2008-09-01 20:06 |只看该作者

回复 #13 gtkmm 的帖子

有道理,我错了,那应该是这样:
记f(n)为n需要的最少次数,则
如果n是偶数,f(n)=f(n/2)+1
如果n是奇数,则考虑n二进制表示的末尾1得个数,至少有3个1的时候+1才不会造成多余的次数,即n+1可以被8整除
因此,如果(n+1) mod 8=0,f(n)=f(n+1)+1=f((n+1)/8 )+4
否则,f(n)=f(n-1)+1=f(n/2)+2

复杂度log(n)

[ 本帖最后由 bood 于 2008-9-1 20:28 编辑 ]
hll 该用户已被删除
15 [报告]
发表于 2008-09-01 20:18 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
16 [报告]
发表于 2008-09-01 20:21 |只看该作者
n的二进制表示1xxxxxxxx,设为k位。

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

当x不全为零,下面的算法应该是最少
设最低三位位为xyz
z=0     则下一步操作是移位 (除2)
z=1 且 y=0  则下两步操作是 减1 再 移位
z=1 且 y=1  且 x=0  则下一步 减1 或 加1 都一样
z=1 且 y=1  且 x=1  则下一步加1

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

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

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


恩,跟我得差不多了,但是其实应该是
x=y=z=1的时候,+1 -1才是一样的
比如7,两种办法得到的结果都是4

论坛徽章:
0
18 [报告]
发表于 2008-09-01 22:06 |只看该作者
显然要用位移操作最高效

论坛徽章:
1
技术图书徽章
日期:2014-03-06 15:32:30
19 [报告]
发表于 2008-09-01 22:06 |只看该作者
位操作,复杂度log(log(n))

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

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

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

能否解释下为什么要这么算?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP