Per ora sono riuscito a scrivere questo algoritmo. Ma credo che sia "forza bruta" no?
Se mi sapete trovare qualcosa di più efficiente ve ne sarei grato XD.
Codice PHP:
public int match(bool[]tofnd,int start, int end){
int j=0; //j è il puntatore della sottosequenza
int i=start; //i è il puntatore della sequenza
int posizione = 0; //posizione del match
bool continua = true; //per continuare il ciclo
bool trovato = false; //flag che indica se ho rilavato la sottosequenza
while (continua)
{
if (bit[i] == tofnd[j])
{
if (j == 0) posizione = i;
if (j < tofnd.Length - 1)
{
j++;
}
else
{
continua = false;
trovato = true;
}
i++;
}
else
{
if (j != 0) { i -= j; j = 0; }
if (i == end - tofnd.Length) continua = false;
i++;
}
}
if (trovato) return posizione;
return -1;
}
bit[] è definito in istanza.
sono di tipo bool[] i vettori in questione poichè come già detto lavoro con i bit.