免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 4146 | 回复: 22
打印 上一主题 下一主题

[算法] 请教一个算法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-05-24 09:03 |只看该作者 |倒序浏览
我想请教一个算法,有一无符号32位整数,求其右边第一位数起到第一个位为‘1’的0的个数。
如0x21c534a8,则返回3;0x1b94a4c0,则返回6。
用循环好做,但时间复杂度不是常数。有时间复杂度为常数的算法吗,谢谢大家

论坛徽章:
0
2 [报告]
发表于 2007-05-24 09:39 |只看该作者
时间复杂度不是常数?什么是实践复杂度啊

论坛徽章:
0
3 [报告]
发表于 2007-05-24 09:51 |只看该作者
原帖由 疯长的野草 于 2007-5-24 09:39 发表
时间复杂度不是常数?什么是实践复杂度啊

建议你碰到不知道概念先google或看书

论坛徽章:
0
4 [报告]
发表于 2007-05-24 09:58 |只看该作者
原帖由 heavyrain44 于 2007-5-24 09:03 发表
我想请教一个算法,有一无符号32位整数,求其右边第一位数起到第一个位为‘1’的0的个数。
如0x21c534a8,则返回3;0x1b94a4c0,则返回6。
用循环好做,但时间复杂度不是常数。有时间复杂度为常数的算法吗,谢谢 ...


不是常数是什么?
你最多需要检查32位
所以是O(1)

楼主是不是说要对n位的整数进行计算?

[ 本帖最后由 ypxing 于 2007-5-24 10:06 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2007-05-24 10:13 |只看该作者
楼上的那位,您这样说也对,但显然检查0x21c534a8跟检查0x1b94a4c0所需要的时间是不一样的。您所说的时间是常数,只是说最坏的情况下所需要的时间是常数而已。
我希望检查所有数据所需要的时间都是一样的,而且越快越好

[ 本帖最后由 heavyrain44 于 2007-5-24 10:16 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2007-05-24 10:25 |只看该作者
-@- 孩子 好好看书  好好看书 了解下常数的意义

如果你要全部都一样的速度
那么就应该用一个表 然后查表
那肯定是一个常数
就是这个表比较恐怖的大了

论坛徽章:
0
7 [报告]
发表于 2007-05-24 10:26 |只看该作者
一个表 查的话 他的时间就是访问数组里一个元素的时间 很快很快的 不能再快了

论坛徽章:
0
8 [报告]
发表于 2007-05-24 10:31 |只看该作者
原帖由 DraculaW 于 2007-5-24 10:25 发表
-@- 孩子 好好看书  好好看书 了解下常数的意义

如果你要全部都一样的速度
那么就应该用一个表 然后查表
那肯定是一个常数
就是这个表比较恐怖的大了

呵呵,是啊,哈希表,哈哈

论坛徽章:
0
9 [报告]
发表于 2007-05-24 10:36 |只看该作者
那个表大的够恐怖的。查表对8位还有意义。16位,32位还是算了吧。把存储单元浪费在这上面,不值得。明显不实用

论坛徽章:
0
10 [报告]
发表于 2007-05-24 10:38 |只看该作者
还可以把32位拆成4个8位再查表,但我对这个算法也不满意
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP