| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2055 人关注过本帖, 1 人收藏
标题:求精妙的算法
只看楼主 加入收藏
Windy0Winll
Rank: 2
来 自:走了
等 级:等待验证会员
帖 子:71
专家分:90
注 册:2010-8-26
收藏
得分:0 
-----程序真的要用这个函数多次,那么用我的那种做法应该更合理----
这点我非常非常的赞同

不过你给的那个函数还不如这样:
int fun(int n){ //最高位的符号位1不考虑。
    int s = 0 ;
    if ( 0==(n&=0x7fffffff) ) return 0;
    while( ++s,n&=n-1 )
            ;
    return s;
}
这样的函数要用循环来实现,有可能需要31次循环,每次循环也要比较,位运算,转跳,减法等。对于1的位数比较小的数,确实要快一点。

悄悄地来。。。 然后悄悄地走。。。。。。
2010-08-26 18:29
御坂美琴
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:魔術の禁書目錄
等 级:小飞侠
威 望:9
帖 子:952
专家分:2929
注 册:2010-8-18
收藏
得分:0 
给我选用的话,我会根据情况,但多数情况下我选用孔明的算法,或者用8位的弱化版本,或者最简单的循环,但绝对不使用网上流传的那种看起来很炫的代码,可读性差,并且也不比那个快,御坂回答

永远为正义而奋斗,锄强扶弱的Level 5 超能力者
とある魔術の禁書目錄インデックス__御み坂さか美み琴こと
http://bbs.bccn.net/space.php?action=threads&uid=483997
2010-08-26 18:38
Windy0Winll
Rank: 2
来 自:走了
等 级:等待验证会员
帖 子:71
专家分:90
注 册:2010-8-26
收藏
得分:0 
----你写的那个算法我很早前就见过,但是我从来没用过,就是因为它有一个固定的运算数量,实际并不理想。----
说的也是,不过我还是比较喜欢那个算法。如果要算64位的数,可以运行2次那个函数就可以了。或者重新写一个函数,
把 MASK1  = 0x5555555555555555ULL ,其它也对应改掉,还有 再加一个MASK32 = 0x00000000ffffffffULL;就可以了。
我喜欢的是那个算法,不是那个函数。


----如果你感兴趣可以在matrix67的博客上找一些资料----
 恩,先谢谢了。以前我也学习过一点点位运算,我去学习学习这些资料。




悄悄地来。。。 然后悄悄地走。。。。。。
2010-08-26 18:40
Windy0Winll
Rank: 2
来 自:走了
等 级:等待验证会员
帖 子:71
专家分:90
注 册:2010-8-26
收藏
得分:0 
回复 12楼 御坂美琴
----给我选用的话,我会根据情况,但多数情况下我选用孔明的算法,或者用8位的弱化版本,或者最简单的循环,但绝对不使用网上流传的那种看起来很炫的代码,可读性差,----
  可读性差,我个人觉得这个跟对这个算法的熟悉度有关。如果一个简单的算法,但如果我不懂的话,读起代码来的话,也是很费力的。如果你真正理解了某个算法,一般情况应该也是能读懂代码的吧。

悄悄地来。。。 然后悄悄地走。。。。。。
2010-08-26 18:47
jack10141
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:陕西西安
等 级:小飞侠
威 望:6
帖 子:706
专家分:2271
注 册:2010-8-10
收藏
得分:0 
学习了!!

Coding就像一盒巧克力,你永远不会知道你会遇到什么BUG
别跟我说你是不能的,这让我愤怒,因为这侮辱了你的智慧
2010-08-26 18:51
御坂美琴
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:魔術の禁書目錄
等 级:小飞侠
威 望:9
帖 子:952
专家分:2929
注 册:2010-8-18
收藏
得分:0 
以下是引用Windy0Winll在2010-8-26 18:47:13的发言:

----给我选用的话,我会根据情况,但多数情况下我选用孔明的算法,或者用8位的弱化版本,或者最简单的循环,但绝对不使用网上流传的那种看起来很炫的代码,可读性差,----
  可读性差,我个人觉得这个跟对这个算法的熟悉度有关。如果一个简单的算法,但如果我不懂的话,读起代码来的话,也是很费力的。如果你真正理解了某个算法,一般情况应该也是能读懂代码的吧。

可读性似乎不应该这样理解,不过我不想在这种问题上产生争论,御坂回答

永远为正义而奋斗,锄强扶弱的Level 5 超能力者
とある魔術の禁書目錄インデックス__御み坂さか美み琴こと
http://bbs.bccn.net/space.php?action=threads&uid=483997
2010-08-26 18:56
succubus
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:635
专家分:1080
注 册:2007-10-7
收藏
得分:6 
lz喜欢那个利用位运算的算法的话我给你推荐一本书——hacker's delight
里面类似这种精妙的位运算算法比比皆是。。。

[url=http:///view/aDU1]/image/aDU1.gif" border="0" />[/url]
2010-08-26 19:49
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:6 
贪心
哈希
自由表
计数排序

我感觉是比较有用的算法了, 对于学习代码的简洁性很有帮助吧。


[ 本帖最后由 BlueGuy 于 2010-8-26 20:48 编辑 ]

我就是真命天子,顺我者生,逆我者死!
2010-08-26 20:21
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
那个 12个球的程序  写的不怎么好。

我就是真命天子,顺我者生,逆我者死!
2010-08-26 22:21
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
我觉得可读性也应该包括算法的通用程度。
写程序的时候,应该考虑读者的见识。那些很常用,很普通,一般人都会的的算法才更有可读性;注释只需一个单词的程序段才更有可读性。
如果一段代码,写的人都觉得一般人可能不会,或不熟悉。就应该加注释,至少得指明去查哪些资料能找到相关算法的描述。另外如果这个算法还用处不大,那么不用确实就是可以增加可读性。
2010-08-27 00:25
快速回复:求精妙的算法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023092 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved