( (x&y) + ( (x^y)>>1 ) )是什么意思?what's up?

相信大家在学习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的含义与用法


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值