找回密码
 欢迎注册
楼主: litaoye

[求助] 关于一个运算优化的问题

[复制链接]
 楼主| 发表于 2009-3-27 04:14:33 | 显示全部楼层
可能应该说是24位以内的吧,反正大概意思就是这样。

btw.我还盗用了无心人(其实是位热心人,估计是注册时输入法出了问题)同志的表。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-3-27 09:08:42 | 显示全部楼层
不知道有没有搜索某1位以后第一个1的?比如32位的,搜索8位以后的?
=====================================================
你可以用循环移位指令
但不比&节约指令
不过能节约寄存器
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-3-27 14:32:06 | 显示全部楼层
换了1个方法,把这部分也避开了,现在效率已经让我满意了,
用了你提供的pow10的表,没有自己算,C++代码缩短到了200行,
目前还没有想到什么可以继续改进的地方,估计现在的瓶颈就是排序和输入处理了。
进一步提高只能交给诸位高手了,我自己能想到的都做进去了。

原帖由 无心人 于 2009-3-27 09:08 发表
不知道有没有搜索某1位以后第一个1的?比如32位的,搜索8位以后的?
=====================================================
你可以用循环移位指令
但不比&节约指令
不过能节约寄存器
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-3-27 14:59:28 | 显示全部楼层
呵呵,还可以这么快呀!!
能给个代码学习一下吗?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-3-27 15:40:02 | 显示全部楼层
诸位都是高手,我只是花的时间多,况且我这个程序都是在大家给的代码的基础上改出来的。

设个阅读权限,只让论坛里的人看,否则确实容易破坏公平性
游客,本帖隐藏的内容需要积分高于 100 才可浏览,您当前积分为 0
原帖由 shshsh_0510 于 2009-3-27 14:59 发表
呵呵,还可以这么快呀!!
能给个代码学习一下吗?


[ 本帖最后由 litaoye 于 2009-3-27 15:50 编辑 ]
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-3-27 15:52:46 | 显示全部楼层
不会设权限!编辑了好几次未果!算了!
相信几位汇编高手可以弄得更快!
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-3-27 17:51:22 | 显示全部楼层
185楼的代码在acm的成绩是多少?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-3-28 00:38:03 | 显示全部楼层
原帖由 liangbch 于 2009-3-27 17:51 发表
185楼的代码在acm的成绩是多少?


是0.031,呵呵其实是大家的成绩,又优化了好几次,一直都是这个成绩,反正我到此算是才尽了
0.015就看各位了!
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-3-28 10:31:07 | 显示全部楼层
再汇编化可能就好点
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-3-28 14:02:26 | 显示全部楼层
bool bitbool(UINT128 *Item,int index)
{
DWORD * cItem = (DWORD *)Item;
int bit = index >> 5;
int current = index & 0x1F;
return (*(cItem + bit) >> current) & 1;
}

这个可以改成:
__declspec(naked)
int __fastcall bitbool(UINT128 * Item, int index)
{
  __asm
  {
  bt  dword ptr [ecx],  edx
  sbb eax, eax
  neg eax
  ret
  }
}
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

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

GMT+8, 2024-5-5 09:46 , Processed in 0.045844 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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