gpt4 book ai didi

PHP算法大数组内存问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:21:51 25 4
gpt4 key购买 nike

我正在研究 PHP 中处理二进制值或包含 0 和 1 的字符串的一些算法。我正在计算 n-numbers 的列表,从起始列表 0f {0,1} for n=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";
}

最佳答案

您可以通过存储数字来优化您的算法。

while ($n < 1 || $n > 65)
fscanf(STDIN, "%d\n", $n);

$listn = array(0, 1); // use numbers
$doublearray[] = $listn;

for ($i = 1; $i < $n; $i++) {
foreach ($listn as $member) {
$a[] = 0 + $member; //actually do nothing
}

$reflectedlistn = array_reverse($listn);

foreach ($reflectedlistn as $member) {
$b[] = (1 << $i) + $member; // add 1 to the begining
}

$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 decbin($item) . "\n"; // convert dec into bin string representation
}

它节省了将近 15% 的内存。

然后删除无用的数组$a。

$listn = array(0, 1); // use numbers
$doublearray[] = $listn;

for ($i = 1; $i < $n; $i++) {
$reflectedlistn = array_reverse($listn);

foreach ($reflectedlistn as $member) {
$b[] = (1 << $i) + $member; // add 1 to the begining
}

$listn = array_merge($listn, $b);
$doublearray[] = $listn;
$a = array();
$b = array();
}
$arr = array_slice($doublearray[$n - 1], -$n);
echo "\n";
foreach ($arr as $item) {
echo decbin($item) . "\n"; // convert dec into bin string representation
}

更多 20% 的内存。

但这无济于事,因为该算法创建了包含 2^n 个元素的数组。数组在 PHP 中非常庞大。

那么,有什么优化的地方吗?或者更好地创建一个新的?请描述您想要实现什么以获得更好的解决方案。

关于PHP算法大数组内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32852098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com