Я занимаюсь поиском в Интернете за последние 2 часа, и я не могу найти список встроенных функций времени и пространства. У меня есть isAnagramOfPalindrome проблему решить с помощью следующей максимально допустимой сложности:Встроенная функция функций (isAnagramOfPalindrome function)
expected worst-case time complexity is O(N)
expected worst-case space complexity is O(1) (not counting the storage required for input arguments).
где N- длина входной строки. Вот мое самое простое решение, но я не знаю, находится ли он в пределах сложности.
class Solution {
// Function to determine if the input string can make a palindrome by rearranging it
static public function isAnagramOfPalindrome($S) {
// here I am counting how many characters have odd number of occurrences
$odds = count(array_filter(count_chars($S, 1), function($var) {
return($var & 1);
}));
// If the string length is odd, then a palindrome would have 1 character with odd number occurrences
// If the string length is even, all characters should have even number of occurrences
return (int)($odds == (strlen($S) & 1));
}
}
echo Solution :: isAnagramOfPalindrome($_POST['input']);
У кого-нибудь есть идея, где найти этот вид информации?
РЕДАКТИРОВАТЬ
я обнаружил, что array_filter
имеет O (N) сложность, и count
имеет O (1) сложность. Теперь мне нужно найти информацию о count_chars
, но полный список будет очень удобен для будущих проблем.
РЕДАКТИРОВАТЬ 2
После некоторых исследований по пространственной и временной сложности в целом, я обнаружил, что этот код имеет O (N) времени сложность и O (1) пространство сложность, так как:
count_chars
будет цикл N раз (полная длина входной строки, что дает ей начальную сложность O (N)). Это генерирует массив с ограниченным максимальным количеством полей (26 точно, количество разных символов), а затем он применяет фильтр к этому массиву, что означает, что фильтр будет петлиться не более 26 раз. При нажатии на входную длину до бесконечности этот цикл незначителен и рассматривается как константа. Count также относится к этому сгенерированному постоянному массиву, и, кроме того, он незначителен, поскольку сложность функции count
равна O (1). Следовательно, временная сложность алгоритма O (N).
Это то же самое с пространственной сложностью. При вычислении сложности пространства мы не учитываем входные данные, а только объекты, сгенерированные в процессе. Эти объекты представляют собой массив из 26 элементов и переменную count, и оба они рассматриваются как константы, потому что их размер не может увеличиться по сравнению с этой точкой, независимо от того, насколько велик вход. Таким образом, мы можем сказать, что алгоритм имеет пространственную сложность O (1).
В любом случае, этот список будет по-прежнему ценным, поэтому нам не нужно заглядывать в исходный код php. :)
Вероятно у вас есть посмотреть исходный код и выяснить его сами. Вот вопрос с ответом, который претендует на предоставление этой информации для некоторых функций: http: // stackoverflow.com/questions/2473989/list-of-big-o-for-php-functions – developerwjk
Я столкнулся с этим, отличная информация, но только для 'array_filter', ничего на' count' и 'count_chars'. – Skatch
Технически существует более 26 разных персонажей. Если ваша проблема не будет гарантирована только для подачи символов с английского алфавита, ваша сложность пространства худшего случая для count_chars() будет минимальной (N, <количество кодовых точек Юникода, что много). Кроме того, не забудьте принять во внимание верхний/нижний регистр ... –