卡常技巧

大佬博客
但是这些都没有什么用,只有他出什么高维DFT什么的范围还很好卡Cache的时候循环展开才能卡10倍左右的小常数。
ZZQ巨佬表示:什么卡常都比不上输入输出优化效果好
但是输入输出的卡常在不同电脑不同操作系统乃至不同评测软件效果都不一样,很容易发生本机卡过了(并且什么5s的代码加一个输入挂卡进1s表示经常发生),让人以为主程序的效率十分高,只是输入慢,然后被卡常GG。。。。。。
问题在于以为主程序的效率非常高。

那么我们需要掌握实现和算法的常数差异。
1.vector建图在点数没有达到500000之类的情况下是没有链式前向星快的。
在没有 O 2 O2 O2的情况下甚至会达到3倍以上的时间差异。。。。。。。
如果开两个vector一个存距离一个存邻接点,也很慢。

2.点分治的常数远远大于链分治。
点分治每层都是满的。
链分治几乎每层都不是满的。。。。。。
3.乘法是有底层优化的,除法是现代CPU都不会优化的,所以乘法比除法快很多倍,如果需要多次除一个数的话建议存下它的倒数每次做乘法。
4.无符号类型的除法比有符号类型进行得更快(包括取模)。
5.在这里插入图片描述
6.编译器利用乘法可以优化除以常数的代码,但是不是常数的部分就不能在编译期优化。(取模同理)
在这里插入图片描述
7.在这里插入图片描述
在这里插入图片描述
再一次感觉到了CPU的强大,它还真能猜出来是01交替的啊!
这是人写的优化?
3倍的常数差距。
在这里插入图片描述
8.真正的循环展开应该展开时不用同样的变量:
在这里插入图片描述
9.

在这里插入图片描述
在这里插入图片描述
10.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值