【发布时间】:2015-12-27 09:55:08
【问题描述】:
我正在研究 PHP 中的一些算法,处理二进制值或包含 0 和 1 的字符串。我正在计算 n 数的列表,从 n=1 的起始列表 0f {0,1} 开始; 无论如何,数组 a[] 和 b[] 在 n > 20 后变大,达到内存问题。所以我的问题是如何优化该算法以使用更少的内存?我应该将二进制字符串以不同格式存储在内存中,字符串格式除外,还是我需要重构算法本身?有什么想法吗?
while ($n < 1 || $n > 65)
fscanf(STDIN, "%d\n", $n);
$listn = array("0","1");
$doublearray[] = $listn;
for ($i=1; $i<$n;$i++) {
foreach ($listn as $member) {
$a[] = "0" . $member;
}
$reflectedlistn = array_reverse($listn);
foreach ($reflectedlistn as $member) {
$b[] = "1" . $member;
}
$listn = array_merge($a, $b);
$doublearray[] = $listn;
$a = array();
$b = array();
}
$arr = array_slice($doublearray[$n-1], -$n);
echo "\n";
foreach ($arr as $item) {
echo $item . "\n";
}
【问题讨论】:
-
您展示了算法,但没有展示您尝试解决的任务。虽然有明显的改进领域(使用纯数字而不是 0 和 1 填充的数组,必要时将它们转换为二进制文件),但不清楚您在这里真正想要做什么。
-
我只是对如何以更优化的方式存储二进制文件而不是字符串感兴趣
-
使用bindec,您可以将任何0和1的字符串转换为纯数字。不过请注意平台限制。
标签: php arrays algorithm memory-leaks out-of-memory