当前位置:  开发笔记 > 编程语言 > 正文

将整数转换为笛卡尔坐标的替代/更快方法?

如何解决《将整数转换为笛卡尔坐标的替代/更快方法?》经验,为你挑选了1个好方法。

作为一个有趣的侧面项目,我自己帮助学习另一个PHP MVC框架,我一直在编写Reversi/Othello作为PHP和Ajax应用程序,大多是简单的东西.我决定不使用多维数组有很多原因,而是有一个线性数组(在这种情况下是64个元素长)和几个从坐标转换为整数的方法.

所以我很好奇,有没有其他可能更快的算法将整数转换为坐标点?

function int2coord($i){
    $x = (int)($i/8);
    $y = $i - ($x*8);      
    return array($x, $y);
}

//Not a surprise but this is .003 MS slower on average
function int2coord_2($i){
    $b = base_convert($i, 10, 8);
    $x =  (int) ($b != 0 ? $b/8 : 0); // could also be $b < 8 for condition
    $y = $b % 10;
    return array($x, $y);
}

为了后人的缘故,我为coord2int写的方法

function coord2int($x, $y){
   return ($x*8)+$y;
}

更新:
所以在奇怪的土地上,结果不是我所期待的,但使用预先计算的查找表主要表现为最快,猜测交易记忆速度总是赢家?

这里有一张桌子,但由于SO的样式问题,我把它剪掉了.

Adam Davis.. 7

哦,是的!这是二进制的完美示例:

function int2coord($i){
    $x = $i >> 3;
    $y = $i & 0x07;      
    return array($x, $y);
}

实际情况是,一个好的编译器会找到这个优化并使用它,所以它不一定更快.测试并查看您的编译器/解释器是否执行此操作.

它的工作原理是因为任何二进制除以8与右移三位相同.现代处理器具有桶形移位器,可在一条指令中进行高达32位的移位.

反过来也很简单:

function coord2int($x, $y){
   return ($x << 3)+$y;
}

-亚当



1> Adam Davis..:

哦,是的!这是二进制的完美示例:

function int2coord($i){
    $x = $i >> 3;
    $y = $i & 0x07;      
    return array($x, $y);
}

实际情况是,一个好的编译器会找到这个优化并使用它,所以它不一定更快.测试并查看您的编译器/解释器是否执行此操作.

它的工作原理是因为任何二进制除以8与右移三位相同.现代处理器具有桶形移位器,可在一条指令中进行高达32位的移位.

反过来也很简单:

function coord2int($x, $y){
   return ($x << 3)+$y;
}

-亚当

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有