相信大家在学习TSP(状态压缩)的时候遇到了这个困难,那即是( (x&y) + ( (x^y)>>1 ) )是什么意思?what's up?当然小编来给你解释一番:
这到底什么意思呢?大家来看几个例子:第一,如果带入x=3,y=5,那么会得到什么?试试看011和101取与运算得到了001,那么3^5得到了什么?
011^101=110,如果110右移一位得到了011就是3了,也就是1+3=4,最后结果就是4,再看一个例子,3和6,也就是011和110,011&110得到了010,
011^110=101,
101>>1=010,
010+010=4,比较一下那不就是(3+6)/2=(9)/2=4;
再看上边一个例子,不就是(3+5)/2=(8)/2=4;
对了,就代表(x+y)/2,就是x和y的平均数!!!
当然你如果在程序里边不会写的这么麻烦,你想到的简单点的就是(x+y)/2,懂了点脑子的就写成(x+y)>>1,当然这三点都可以,但是哪一点更省时间呢?
回答就是第三种(x+y)>>1,你可以试一下,把那个x和y做成很多组,使用很多组数据测试下,测试数据越多,那么得到了时间差就越大,当如果达到了10^10的时候,时间差已经快到了4秒多了,在算法的世界里是个很惊人的时间差!!!!
因此小编推荐大家以后还是使用这个(X+Y)>>1吧!!!!
这个看起来并不重要,但是这个也是曾今的一道考高级IT工程师里边的一道填空题,想把IT学号,细节很重要!!!
还有一个是个更重要的案例,请看下一篇:(x-1)&x^x的含义与用法