【发布时间】:2012-10-26 20:04:36
【问题描述】:
这里是瘦的(向下滚动查看问题):我正在使用 Huffman 编码来压缩文件(用于项目)。我已经制作了地图,并将所有内容都变成了这样的字符串:
00101010001100001110011101001101111011111011
现在,我需要将其转换为实际的二进制字符串,在其当前状态下,它只是一个由 1 和 0 组成的字符串。
这是问题:
1 和 0 的字符串有 17,747,595 个字符长,在 550,000 左右确实变慢了
这是我的代码:
<?php
$i=0
$len = strlen($binaryString);
while ($i < $len){
$section = substr($binaryString,$i,$i+8);
$out .= chr(bindec($section));
$i=$i+8;
}
?>
我怎样才能让它足够高效地运行 1700 万个字符串?
非常感谢您的支持!
【问题讨论】:
-
是的,base_convert 不会接受它,因为它太长了:P
-
不要将其写入整个变量,而是写入 X 字节后的某个文件缓存中。这样,每次迭代都不会加载整个字符串来附加接下来的几个字节。
-
是的,被编码的原始文件是 4MB,然后通过 Huffman 分解到 17m……我知道必须有一种有效的方法来做到这一点,我只是不知道它是什么,哈哈。
-
你为什么不尝试制作比特流而不是比特串?我的意思是从一开始就使用 8 位再见。这是因为参考的位置。
标签: php algorithm binary performance huffman-code