Negli esempi di implementazione dell'algoritmo il pattern viene esaminato da una funzione che crea un prefisso per poter identificare gli spostamenti validi dello stesso pattern sul testo.
Ho scritto diverse funzioni seguendo lo pseudocodice dell'algoritmo, senza però sortire gli effetti desiderati, infatti le mie funzioni restituiscono prefissi differenti da quelli di esempio (presupposti esatti).
Negli esempi di implementazione con un pattern come "BBBA" si ottiene il prefisso 0 1 2 0.
Questo perchè viene considerato il primo indice non [0] (da cui parte qualsiasi vettore/stringa) ma [1].
Vi allego la funzione che ho scritto:
Codice PHP:
void prefix_creation(uint8_t *pattern,
size_t pattern_length,
int32_t *prefix)
{
int32_t k, q;
k = 0;
prefix[1] = 0;
for (q = 2; q <= pattern_length; q++)
{
while ((k > 0) && (pattern[k + 1] != pattern[q]))
{
k = prefix[k];
}
if (pattern[k + 1] == pattern[q])
{
k++;
}
prefix[q] = k;
}
}
Sperando in una soluzione, ringrazio anticipatamente per i possibili interventi.