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_arraydiimplementasikan dengan pencarian linear O (n) yang secara linear akan melambat seiring dengan $prime_arraypertumbuhan. Di mana array_key_existsfungsi 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
truedan kemudian menguji keberadaan menggunakan isset($large_prime_array[$number]). Jika saya ingat dengan benar, urutannya ratusan kali lebih cepat daripada in_arrayfungsinya.
array_key_exists, saya membandingkan in_array. in_arrayiterates 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 issetbanyak kali lebih cepat. Ini karena kunci array diindeks oleh PHP (seperti hashtable). Akibatnya, mencari sebuah array dengan cara ini dapat meningkatkan kecepatan secara signifikan
