大佬博客
但是这些都没有什么用,只有他出什么高维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.