Ho cercato su Google nelle ultime 2 ore e non riesco a trovare un elenco di funzioni integrate di php in termini di tempo e spazio. Ho il problema isAnagramOfPalindrome da risolvere con la seguente complessità massima consentita:PHP integrato nella complessità delle funzioni (funzione AnagramOfPalindrome)
expected worst-case time complexity is O(N)
expected worst-case space complexity is O(1) (not counting the storage required for input arguments).
dove N è la lunghezza della stringa di input. Ecco la mia soluzione più semplice, ma non so se rientra nei limiti di complessità.
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']);
Qualcuno ha un'idea su dove trovare questo tipo di informazioni?
EDIT
ho scoperto che array_filter
ha O (N) complessità e count
ha O (1) complessità. Ora ho bisogno di trovare informazioni su count_chars
, ma un elenco completo sarebbe molto conveniente per i futuri problemi.
EDIT 2
Dopo qualche ricerca su spazio e tempo della complessità, in generale, ho scoperto che questo codice ha O (n) la complessità e O (1) spazio complessità perché:
Il count_chars
eseguirà il ciclo N volte (tutta la lunghezza della stringa di input, dandogli una complessità iniziale di O (N)). Questo sta generando un array con un numero massimo limitato di campi (26 precisamente, il numero di caratteri diversi), e quindi applica un filtro su questo array, il che significa che il filtro eseguirà il ciclo 26 volte al massimo. Quando si spinge la lunghezza dell'input verso l'infinito, questo loop è insignificante e viene visto come una costante. Il conteggio si applica anche a questo array costante generato e inoltre non è significativo poiché la complessità della funzione count
è O (1). Quindi, la complessità temporale dell'algoritmo è O (N).
È lo stesso con la complessità dello spazio. Quando calcoliamo la complessità dello spazio, non contiamo l'input, ma solo gli oggetti generati nel processo. Questi oggetti sono l'array a 26 elementi e la variabile count, ed entrambi sono trattati come costanti perché la loro dimensione non può aumentare oltre questo punto, non importa quanto grande sia l'input. Quindi possiamo dire che l'algoritmo ha una complessità spaziale di O (1).
In ogni caso, tale elenco sarebbe ancora prezioso quindi non dobbiamo guardare all'interno del codice sorgente php. :)
Probabilmente avete guardare il codice sorgente e scoprirlo da solo. Ecco una domanda con una risposta che afferma di fornire queste informazioni per alcune funzioni: http: // StackOverflow.it/questions/2473989/list-of-big-o-for-php-functions – developerwjk
Mi sono imbattuto in questo, grandi informazioni, ma solo per 'array_filter', niente su' count' e 'count_chars'. – Skatch
Tecnicamente, ci sono più di 26 caratteri diversi. A meno che non sia garantito che il tuo problema fornisca solo caratteri dell'alfabeto inglese, la tua complessità nel caso peggiore per count_chars() sarà min (N,). Inoltre, non dimenticare di prendere in considerazione maiuscolo/minuscolo ... –