Rumah > Artikel > pembangunan bahagian belakang > Penyelesaian praktikal untuk mengendalikan persimpangan dan penyatuan tatasusunan PHP berskala besar
Penyelesaian praktikal untuk memproses persilangan dan penyatuan tatasusunan PHP berskala besar
Pengenalan
Apabila memproses data yang besar, selalunya perlu melakukan operasi persimpangan tatasusunan dan kesatuan. Tetapi untuk tatasusunan besar dengan berjuta-juta atau berbilion-bilion elemen, fungsi PHP lalai mungkin tidak cekap atau mengalami masalah ingatan. Artikel ini akan memperkenalkan beberapa penyelesaian praktikal untuk meningkatkan prestasi dengan ketara apabila bekerja dengan tatasusunan yang besar.
Kaedah 1: Menggunakan Jadual Hash
Contoh kod:
$arr1 = range(1, 1000000); $arr2 = range(500001, 1500000); $hash = array_flip($arr1); $intersection = array_keys(array_intersect_key($hash, $arr2));
Kaedah 2: Menggunakan perpustakaan Hashes.php
Intersect()
方法。对于并集运算,使用 Union()
. Contoh kod:
use Hashes\Hash; $map = new Hash(); foreach ($arr1 as $val) { $map->add($val); } $intersection = $map->intersect($arr2); $union = $map->union($arr2);
Kaedah 3: Gunakan operasi bitwise
Contoh Kod:
function bitInterset($arr1, $arr2) { $max = max(max($arr1), max($arr2)); $bitSize = 32; // 如果 max > (2^32 - 1),可以调整 bitSize $bitmap1 = array_fill(0, $bitSize, 0); $bitmap2 = array_fill(0, $bitSize, 0); foreach ($arr1 as $num) { $bitmap1[$num >> 5] |= (1 << ($num & 31)); } foreach ($arr2 as $num) { $bitmap2[$num >> 5] |= (1 << ($num & 31)); } $intersection = []; for ($i = 0; $i < $bitSize; $i++) { $mask = $bitmap1[$i] & $bitmap2[$i]; for ($j = 0; $j < 32; $j++) { if (($mask >> $j) & 1) { $intersection[] = ($i << 5) | $j; } } } return $intersection; }
Contoh Praktikal
Mari kita pertimbangkan tatasusunan yang mengandungi satu juta elemen dan kami ingin mencari persilangan dan penyatuannya dengan tatasusunan lain yang mengandungi lima juta elemen.
Menggunakan kaedah 1 (jadual cincang):
Menggunakan perpustakaan Hashes.php (Kaedah 2. Proses persilangan
Menggunakan operasi bitwise (Kaedah 3):
yang anda boleh lihat, operasi bitAswise anda boleh lihat, sangat berkesan dalam memproses susunan yang begitu besar memberikan prestasi yang optimum.
Atas ialah kandungan terperinci Penyelesaian praktikal untuk mengendalikan persimpangan dan penyatuan tatasusunan PHP berskala besar. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!