这是我第一个关于Stackoverflow的问题,请跟我一起。
我测试一个二进制包装的算法,我选择PHP来模拟它,因为它是我的面包和黄油的语言,现在。
正如你可以看到http://themworks.com/pack_v0.2/oopack.php?ol=1它工作相当不错,但你需要等待10-20秒100矩形包装。对于一些难以处理的集合,它会达到php的30s运行时限制。
我做了一些分析,它表明,大多数时候,我的脚本通过一个小的2d阵列的不同部分,0和1。它检查某个单元格是否等于0/1或将其设置为0/1。它可以做这样的操作百万次,每次需要几微秒。
我想我可以使用静态类型语言的布尔数组,事情会更快。或者甚至做一个1位值的数组。我想把整个事情转换成一些编译语言。是PHP只是不好吗?
如果我需要转换它让我们说C,自动转换器有多好?我的脚本只是很多for循环与基本数组和对象操作。
谢谢!
编辑。这个函数被调用比任何其他。它读取一个非常简单的对象的几个属性,并通过一个很小的数组的非常小的一部分,以检查是否有任何元素不等于0。
function fits($bin, $w, $h, $x, $y) {
$w += $x;
$h += $y;
for ($i = $x; $i < $w; $i++) {
for ($j = $y; $j < $h; $j++) {
if ($bin[$i][$j] !== 0) {
return false;
}
}
}
return true;
}
更新:我已经尝试使用1d阵列,而不是2d作为建议的答案之一。因为我需要总是有当前bin宽度可访问,我决定包装对象中的一切。此外,现在在每个循环中,索引需要计算。现在脚本需要更多的时间运行。其他技术没有带来太多的性能提升,而是使代码更少的可读性。时间嘻哈我猜。
更新:因为hiphop php只运行在linux上,我没有一个,我决定重写整个事情在C。很高兴清新老技能。此外,如果我找到一种方法使用hiphop,比较手写的C代码和一个嘻哈会产生将是有趣的。
更新:我重写了这个东西在c,平均起来工作速度快20倍,使用更少的内存。让我看看,如果我可以使它更快。