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

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

[复制链接]
发表于 2009-3-13 10:08:07 | 显示全部楼层
我把ACM1000想复杂了,随便写了一个,轻易通过。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-3-13 13:54:35 | 显示全部楼层
原帖由 liangbch 于 2009-3-13 09:52 发表
我的一朋友问我一个问题,A+B 怎么回事?见http://acm.timus.ru/problem.aspx?space=1&num=1000
楼主应该是做过A+B的,这个问题中,既没有给出两个数的类型(整数,浮点数),有没有给出数的范围,你能告诉做这个 ...


呵呵,是最简单的int32加法,属于让你熟悉一下ACM环境!

我被那道题弄晕了,昨晚上好不容易修改了一个自己觉得满意的方法,本地测试要比以前的快,没想到放上去一跑,第3个测试就超时了!

搞不清怎么回事儿了!
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-3-13 14:01:00 | 显示全部楼层
我用c#做的排序,10000条大概13毫秒吧!

昨天统计了一下,测试的是1-10000,本应当计算50000000次的,经过优化后,需要算17000000,大概是1/3吧!

看来优化效果不是很明显!

原帖由 无心人 于 2009-3-13 10:04 发表
宝宝,
   用跳转表写
   应该能消除大部分跳转指令
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-3-13 14:41:58 | 显示全部楼层
你有测试文本么?

懒得用随机数自己生成

哈哈
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-3-13 14:49:28 | 显示全部楼层
现在要两个表
1、是2进制最高位与log_10的值对照表
2、是1表在某些值上需要比较大小的值的表
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-3-13 14:53:16 | 显示全部楼层
bsr可以这么用
   struct int128
   {
        DWORD u[4];
   }

   __declspec(naked)
    DWORD __fastcall log2(DWORD n)
    {
        __asm
       {
        bsr  eax, ecx
        ret
        }
    }

    DWORD inline log2_128(int128 n)
    {
        return (n.u[3] != 0? log2(n.u[3]) + 96 : (n.u[2] != 0 ? log2(n.u[2]) + 64 : (n.u[1] != 0 ? log2(n.u[1])  + 32: log2(n.u[0]))))
    }
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-3-13 14:54:45 | 显示全部楼层
原帖由 无心人 于 2009-3-13 14:41 发表
你有测试文本么?

懒得用随机数自己生成

哈哈

也是随机生成的!

1.txt

419.23 KB, 下载次数: 4, 下载积分: 金币 -1 枚, 经验 1 点, 下载 1 次

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-3-13 15:05:47 | 显示全部楼层
原帖由 litaoye 于 2009-3-13 14:54 发表

也是随机生成的!


说实话,用这个随机生成的测我现在的程序,那真是跑的刷刷的,5000万次几乎只要算30-50万次就可以了!

不过如果数据大量重复的话,会比较慢!
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-3-13 15:24:37 | 显示全部楼层
好, 谢谢了

我有时间我写个看看
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-3-13 15:26:39 | 显示全部楼层
似乎就是重复数据的问题,又针对这点修改了一下程序,test#3果然就通过了,而且还挺快的.
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

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

GMT+8, 2024-4-25 17:55 , Processed in 0.054779 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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