誰かが数値の圧縮に使用される既存のアルゴリズムに名前を付けることができますか? 数値は整数であり、スペースや小数を含まない完全にランダムです。35637462736423478235687479567456...n
まあ、これまでのところ、私が持っているのはこれだけです。整数をASCIIに変換し、元のサイズの約40%を削減します
function intergerToChar($v)
{
$buffer="";
$charsLen=strlen($v);
for($i = 0; $i <= $charsLen; $i++)
{
$asc=$v[$i];
if($asc==0){$buffer[]=0;}
elseif($asc==1){$buffer[]=$v[$i].$v[$i+1].$v[$i+2];$i=$i+2;}
elseif($asc==2)
{
if($v[$i+1]<5){$buffer[]=$v[$i].$v[$i+1].$v[$i+2];$i=$i+2;}
elseif($v[$i+1]==5 && $v[$i+2]<6){$buffer[]=$v[$i].$v[$i+1].$v[$i+2];$i=$i+2;}
else{$buffer[]=$v[$i].$v[$i+1];$i++;}
}
else{$buffer[]=$v[$i].$v[$i+1];$i++;}
}
return $buffer;
}
ところで、PHP が圧縮ツールを構築するためのものではないことは知っています。C/C++ を使用します
更新: これは、上記のコードよりも優れた圧縮結果を持つ別の PHP コードです。1 番目、6 番目、12 番目などの位置の整数の値が 256 未満で、次の 3 つの整数が続く場合、最大 66% 圧縮できます。それらは、前の 3 つの整数よりも 256 以下の値を持ちます。たとえば、1
342
981
562
861
59.... は 66% まで圧縮できます。
function intergerToChar2($v)
{
$buffer="";
$charsLen=strlen($v);
for($i = 0; $i <= $charsLen; $i++)
{
if($v[$i].$v[$i+1].$v[$i+2]<256){$base=$v[$i].$v[$i+1].$v[$i+2];$i=$i+2;}
else{$base=$v[$i].$v[$i+1];$i=$i+1;}$i=$i+1;
if($v[$i].$v[$i+1].$v[$i+2]<256){$next=$v[$i].$v[$i+1].$v[$i+2];$i=$i+2;}
else{$next=$v[$i].$v[$i+1];$i=$i+1;}
if($next!=="")
{
$next=$next-$base;
if($next<0)$next=255+$next;
}
$buffer[]=$base;
$buffer[]=$next;
}
return $buffer;
}
ちなみに、10 ビット エンコーディングまたは 40 ビット エンコーディングは、base_convert() またはhttp://php.net/manual/en/ref.bc.phpページの 4 番目のコメントを使用して簡単に実行できます。これは、常に約 58.6% の圧縮を示しています。