binary-search
This is a fork of keepper/binary-search, the original maintainer does not continue maintenance., (*1)
Binary Search Library for php, (*2)
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° Π½Π° PHP, (*3)
Π£ΠΌΠ΅Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ Π±Π΅Π· ΡΡΠ΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π° ΡΠ΅Π»ΠΈΠΊΠΎΠΌ Π² ΠΏΠ°ΠΌΡΡΡ., (*4)
ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ
1. ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠ°ΠΉΠ» ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ
wget http://www.fms.gov.ru/upload/expired-passports/list_of_expired_passports.csv.bz2, (*5)
2. Π Π°ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°Π΅ΠΌ
bzip2 -d list_of_expired_passports.csv.bz2, (*6)
3. Π‘ΠΎΡΡΠΈΡΡΠ΅ΠΌ
sort list_of_expired_passports.csv > source.csv, (*7)
4. ΠΠΎΠ½ΡΠΎΠ»ΡΠ½Π°Ρ ΡΡΠΈΠ»ΠΈΡΠ° Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΡΠΎΡΡΠΎΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π² ΠΠ Π½Π΅Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΡ
ΠΏΠ°ΡΠΏΠΎΡΡΠΎΠ² Π€ΠΠ‘
touch fms.php, (*8)
Π Π΅Π΄Π°ΠΊΡΠΈΡΡΠ΅ΠΌ ΡΠ°ΠΉΠ» fms.php ΠΏΠΈΡΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎΠΉ ΠΊΠΎΠ΄, (*9)
include_once 'vendor/autoload.php';
if (count($argv) < 3) {
// ΠΡΠ²ΠΎΠ΄ ΡΠΏΡΠ°Π²ΠΊΠΈ
print "ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ php5 test.php ΡΠ°ΠΉΠ» ΠΈΡΠΊΠΎΠΌΠ°Ρ ΡΡΡΠΎΠΊΠ°\n";
exit;
} else {
// ΠΠ΅ΡΠ΅ΠΌ Π°ΡΡΠΈΠ±ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠ΅ Ρ ΠΊΠΎΠΌΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ
$filepath = $argv[1];
$pattern = $argv[2];
}
// Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ Π΄Π°Π½Π½ΡΡ
Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ°
$dataSource = new \BinarySearch\DataSource\FileData($filepath);
// ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΠΊΠ»Π°ΡΡ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ°
$searcher = new \BinarySearch\BinarySearch($dataSource);
// ΠΠ»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ½ΠΆΠ΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ Π»ΠΎΠ³Π³Π΅Ρ
//$searcher->injectLogger(new \BinarySearch\ConsoleLog());
// ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌ ΠΏΠΎΠΈΡΠΊ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ Π² ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΈ Π΄Π°Π½Π½ΡΡ
, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ ΠΈΡΠΊΠΎΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
$position = $searcher->search($pattern);
if ( is_null($position) ) {
print 'ΠΠ΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ'."\n";
exit;
}
print 'ΠΠ°ΠΉΠ΄Π΅Π½ΠΎ Π½Π° ΠΏΠΎΠ·ΠΈΡΠΈΠΈ: '.$position."\n";
// ΠΠ΄Π΅ΠΌ Π½Π° ΡΠΊΠ°Π·Π°Π½ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈ ΡΠΈΡΠ°Π΅ΠΌ Π½Π°ΠΉΠ΄Π΅Π½ΠΎΠ΅
$dataSource->moveTo($position);
print 'ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅: ['.$dataSource->getData().']'."\n";
5. ΠΡΠΎΠ±ΡΠ΅ΠΌ (ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°ΠΉΠ»Π° source 1,2 ΠΠ±)
5.1. ΠΠ° ΠΎΡΡΡΡΡΡΠ²ΡΡΡΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠΈ:
time php5 ./test.php ./source.csv 5005,000435, (*10)
ΠΠ΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ
real 0m0.095s
user 0m0.018s
sys 0m0.009s
5.2. ΠΠ° ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠΈ:
time php5 ./test.php ./source.csv 0000,000435, (*11)
ΠΠ°ΠΉΠ΄Π΅Π½ΠΎ Π½Π° ΠΏΠΎΠ·ΠΈΡΠΈΠΈ: 434
ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅: [0000,000435]
real 0m0.104s
user 0m0.009s
sys 0m0.018s