Setelah menggunakan PHP untuk sementara waktu sekarang, saya perhatikan bahwa tidak semua fungsi PHP built-in secepat yang diharapkan. Pertimbangkan dua kemungkinan implementasi dari fungsi ini yang menemukan jika suatu bilangan prima menggunakan array bilangan prima yang di-cache
//very slow for large $prime_array
$prime_array = array( 2, 3, 5, 7, 11, 13, .... 104729, ... );
$result_array = array();
foreach( $prime_array => $number ) {
$result_array[$number] = in_array( $number, $large_prime_array );
}
//speed is much less dependent on size of $prime_array, and runs much faster.
$prime_array => array( 2 => NULL, 3 => NULL, 5 => NULL, 7 => NULL,
11 => NULL, 13 => NULL, .... 104729 => NULL, ... );
foreach( $prime_array => $number ) {
$result_array[$number] = array_key_exists( $number, $large_prime_array );
}
Ini karena in_array
diimplementasikan dengan pencarian linear O (n) yang secara linear akan melambat seiring dengan $prime_array
pertumbuhan. Di mana array_key_exists
fungsi diimplementasikan dengan pencarian hash O (1) yang tidak akan melambat kecuali tabel hash menjadi sangat padat (dalam hal ini hanya O (n)).
Sejauh ini saya harus menemukan big-O melalui trial and error, dan sesekali melihat kode sumber . Sekarang untuk pertanyaan ...
Apakah ada daftar waktu O besar teoritis (atau praktis) untuk semua * fungsi PHP bawaan?
* atau setidaknya yang menarik
Sebagai contoh, saya merasa sangat sulit untuk memprediksi O besar fungsi yang terdaftar karena kemungkinan pelaksanaan tergantung pada struktur data inti yang tidak diketahui dari PHP: array_merge
, array_merge_recursive
, array_reverse
, array_intersect
, array_combine
, str_replace
(dengan input array), dll
true
dan kemudian menguji keberadaan menggunakan isset($large_prime_array[$number])
. Jika saya ingat dengan benar, urutannya ratusan kali lebih cepat daripada in_array
fungsinya.
array_key_exists
, saya membandingkan in_array
. in_array
iterates setiap item dalam array dan membandingkan nilai dengan jarum yang Anda berikan. Jika Anda membalikkan nilai ke kunci (dan hanya mengganti masing-masing nilai dengan nilai dummy seperti true
, menggunakan isset
banyak kali lebih cepat. Ini karena kunci array diindeks oleh PHP (seperti hashtable). Akibatnya, mencari sebuah array dengan cara ini dapat meningkatkan kecepatan secara signifikan