免费注册 查看新帖 |

Chinaunix

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

求助:求一个简单的小算法,经常被调用,希望高效点 [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
11 [报告]
发表于 2010-02-10 09:39 |只看该作者
回复 10# noword2k


暈, return level[ score / 10000 ]; 那

论坛徽章:
0
12 [报告]
发表于 2010-02-10 09:57 |只看该作者
看你的数据如果去掉四个0的话就是1,3,6,10,15,...,这个按照目前的规律是前n项自然数的和,也就是1+2+...+n ...
daybreakcx 发表于 2010-02-09 22:28



{:3_182:} ,比较淫荡。

通用的可能办法是:
找一个f,使得f(0,10000)->(0,1)
            f(10000-30000)->(1,2)
            .....................
这样的函数,实际上可以为一个9次多项式,
            f(0) = 0;
            f(10000) = 1;
            f(30000) = 2;
               。
               。
               。
            f(150000)= 9;
            
这样得到一个9元一次方程组,如果满足f' > 0;则比较好办。
如果f' < 0;则这样的映射就不那么好找了

论坛徽章:
0
13 [报告]
发表于 2010-02-10 09:59 |只看该作者
总共就那么几个级别...

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:50:28
14 [报告]
发表于 2010-02-10 10:29 |只看该作者
回复  noword2k


暈, return level[ score / 10000 ]; 那
群雄逐鹿中原 发表于 2010-02-10 09:39



    没仔细看,不好意思。
可能这是最快的方法。

论坛徽章:
0
15 [报告]
发表于 2010-02-10 10:57 |只看该作者
回复 4# cugb_cat


    原谅我的无知吧`

论坛徽章:
0
16 [报告]
发表于 2010-02-10 11:09 |只看该作者
发现九楼的算法应该是最好,,
int level[] =
{
    0, //0
    1, //10000
    1, //20000
    2, //30000
    2, //40000
    2, //50000
    3, //60000
    3, //70000
    ....
    9, //450000
};
return level[score / 10000];

论坛徽章:
9
摩羯座
日期:2013-08-15 15:18:48狮子座
日期:2013-09-12 18:07:47金牛座
日期:2013-09-16 13:23:09辰龙
日期:2013-10-09 09:03:27白羊座
日期:2013-10-17 13:32:44子鼠
日期:2014-04-23 15:09:38戌狗
日期:2014-09-17 11:37:542015年亚洲杯之韩国
日期:2015-03-26 10:16:442015亚冠之武里南联
日期:2015-08-18 14:55:52
17 [报告]
发表于 2010-02-10 12:17 |只看该作者
查表不对吧,中间的数怎么办?

另外用sqrt和浮点数的方法,不见得比老老实实的一个个if else快,毕竟比较 ...
noword2k 发表于 2010-02-10 09:13



在以前没有fpu的情况下,浮点也不至于这么慢,而且现在都有fpu,而且sqrt只对应一条指令fsqrt,速度是绝对不会比二分慢的。
不过最快还应该是9L那个查表法。

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
18 [报告]
发表于 2010-02-11 11:11 |只看该作者
大家都很热心,非常感谢。
才注册没几天,以后我回常来的。
okocha-jay 发表于 2010-02-09 21:43



    mid = (low + high ) / 2;
改成 mid = (low + high ) >> 1;
有的编译器 -O1可以自动优化所有的 2^n 乘除。

论坛徽章:
0
19 [报告]
发表于 2010-02-11 15:37 |只看该作者

RE: 求助:求一个简单的小算法,经常被调用,希望高效点

过来学习下
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP