수천 개의 부분으로 나누고 다시 정렬하고 병합하세요.
먼저 1억 개의 QQ 번호가 포함된 txt를 생성하세요.
PHP코드?
//QQ 번호 1억개 txt 생성(약 85~100초)
set_time_limit(0);
$fn = ' qq. txt';
$fp = fopen($fn, 'w');
$st = microtime(true);
$l = range(0,10000);
shuffle($l);
foreach($l as $k=>$v)
{
$arr = 범위($v*10000+10000,10000*($v+1)+9999);
shuffle($arr);
fputs($fp,implode("n", $arr)."n");
unset($arr);
}
echo microtime(true)-$st;
?>
1억 개의 무작위 QQ가 생성될 때까지 1~2분 정도 기다리세요.
QQ 번호 범위는 >10000입니다. 파일 크기는 약 840MB입니다.
다음은 수천개의 파일로 분류됩니다.
폴더는 QQ번호 길이로, 파일명은 QQ번호 앞 3자리를 사용하세요.
PHP 코드?
//길이 숫자 분류 (약 360~400초 소요)
set_time_limit(0);
$st = microtime(true);
if(!is_dir('qq_no')) mkdir('qq_no');
$file = fopen('qq.txt', 'r')
$i=0;
$end_s = '';
while(!feof($file))
{
$g = 1042*1024;
fseek($file,$g*$i);
$s = fread($file, $ g);
$end = strrpos($s, "n");
$arr_s = $end_s.substr($s, 0, $end) ;
$end_s = substr($s, $end);
$arr = 폭발("n", $arr_s);
foreach ($arr as $k=>$v)
{
if($v!='')
{
$tag = "$v[0]$v[1]$v[2]";
$text_arr[strlen($v)][$tag][] = $v;
}
}
foreach ($text_arr as $k=>$v)
{
$n_dir = ' qq_no/'.$k;
if (!is_dir($n_dir)) mkdir($n_dir);
foreach ($v as $tag=>$val)
{
$n_tf = fopen($n_dir.'/'.$tag.'.txt', 'a+');
fputs($n_tf,implode("n ",$val)."n");
}
}
unset($text_arr);
++$i;
}
echo microtime(true)-$st;
?>
마지막으로 각 파일 정렬되어 병합됩니다.
PHP 코드?
// 정렬 완료(800~920초)
set_time_limit(0);
$st = microtime( true );
$qq_done = fopen('qq_done.txt', 'a+');
$root = 'qq_no'
$dir_array = scandir($root);
foreach($dir_array as $key=>$val)
{
if ($val != '.' && $val != '..')
$dirs[$val] = scandir($root.'/'.$val);
}
foreach($dirs as $key=>$val)
{
foreach( $val을 $v로 표시)
{
if ($v != '.' && $v != '..')
{
$file = $root. '/' . $키 . '/'. $v;
$c = file_get_contents($file);
$arr = explode("n", $c);
sort($arr);
fputs($qq_done, implode("n",$arr));
연결 해제($file);
}
}
rmdir($root. '/' . $key);
}
rmdir($root);
에코 마이크로타임( true)-$st;
?>