Add*_*ons 6 php algorithm binary performance huffman-code
这是瘦的(向下滚动以查看问题):我正在使用Huffman Encoding来压缩文件(对于一个项目).我制作了地图,并将所有内容都变成了一个字符串,如下所示:
00101010001100001110011101001101111011111011
Run Code Online (Sandbox Code Playgroud)
现在,我需要将其转换为实际的二进制字符串,在当前状态下,它只是一个1和0的字符串.
这是问题所在:
1s和0s的字符串长度为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;
}
?>
Run Code Online (Sandbox Code Playgroud)
如何才能使这个效率足以运行1700万个字符串?
非常感谢您的支持!
你并不需要循环,您可以使用gmp与pack
$file = "binary.txt";
$string = file_get_contents($file);
$start = microtime(true);
// Convert the string
$string = simpleConvert($string);
//echo $string ;
var_dump(number_format(filesize($file),2),microtime(true)- $start);
function simpleConvert($string) {
return pack('H*',gmp_strval(gmp_init($string, 2), 16));
}
Run Code Online (Sandbox Code Playgroud)
产量
string '25,648,639.00' (length=13) <---- Length Grater than 17,747,595
float 1.0633520126343 <---------------- Total Conversion Time
Run Code Online (Sandbox Code Playgroud)
链接
注意解决方案需要GMP功能
| 归档时间: |
|
| 查看次数: |
1469 次 |
| 最近记录: |