Ответ 1
Вероятная причина не включать эту информацию состоит в том, что может измениться на выпуск, поскольку улучшения сделаны/оптимизированы для общего случая.
PHP построен на C. Некоторые из функций - это просто обертки вокруг c-аналогов, например hypot
поиск google, просмотр man hypot
, в документах для него math lib
http://www.gnu.org/software/libc/manual/html_node/Exponents-and-Logarithms.html#Exponents-and-Logarithms
Источник фактически не дает никакой информации https://github.com/lattera/glibc/blob/a2f34833b1042d5d8eeb263b4cf4caaea138c4ad/math/w_hypot.c (не является официальным, просто подключиться)
Не говоря уже, это только glibc, Windows будет иметь другую реализацию. Таким образом, МОЖЕТ быть даже большой большой O для ОС, скомпилированный PHP на
Другая причина может заключаться в том, что он запутает большинство разработчиков. Большинство разработчиков, которых я знаю, просто выбирают функцию с "лучшим" большим O
максимум не всегда означает его более медленный
http://www.sorting-algorithms.com/
Имеет хорошую визуальную подсказку о том, что происходит с некоторыми функциями, т.е. сортировка пузырьков - это "медленный" вид, но одна из самых быстрых для почти отсортированных данных. Быстрая сортировка - это то, что многие будут использовать, что на самом деле очень медленно для почти отсортированных данных. Big O - худший случай - PHP может решить между выпуском, который они должны оптимизировать для определенного условия, и который изменит большую O функции, и нет простого способа документировать это.
Здесь есть частичный список (который, как я думаю, вы видели)
Что перечисляет некоторые из наиболее распространенных функций PHP.
Для этого конкретного примера....
Его довольно легко решить без использования встроенных функций.
Пример кода
function isPalAnagram($string) {
$string = str_replace(" ", "", $string);
$len = strlen($string);
$oddCount = $len & 1;
$string = str_split($string);
while ($len > 0 && $oddCount >= 0) {
$current = reset($string);
$replace_count = 0;
foreach($string as $key => &$char) {
if ($char === $current){
unset($string[$key]);
$len--;
$replace_count++;
continue;
}
}
$oddCount -= ($replace_count & 1);
}
return ($len - $oddCount) === 0;
}
Используя тот факт, что не может быть больше 1 нечетного числа, вы можете вернуться раньше из массива.
Я думаю, что мой также O (N), потому что его худший случай - O (N), насколько я могу судить.
Тест
$a = microtime(true);
for($i=1; $i<100000; $i++) {
testMethod("the quick brown fox jumped over the lazy dog");
testMethod("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
testMethod("testest");
}
printf("Took %s seconds, %s memory", microtime(true) - $a, memory_get_peak_usage(true));
Тесты выполняются с использованием действительно старого оборудования Мой путь
Took 64.125452041626 seconds, 262144 memory
Ваш путь
Took 112.96145009995 seconds, 262144 memory
Я уверен, что мой способ - не самый быстрый способ.
Я на самом деле не вижу много информации ни для языков, кроме PHP (например, Java).
Я знаю, что многие из этих сообщений размышляют о том, почему его не существует, и theres не много рисуют из достоверных источников, я надеюсь, что его частично объяснил, почему большой O не указан на странице документации, хотя