Minimalne słowo pokrywające

Z RNO-Wiki

Niebawem pojawi się tu opis problemu.

Implementacja w języku C++

W poniższej funkcji, argument pi oznacza wektor - funkcję prefiksową Knutha

// pi - funkcja prefiksowa Knutha (indeksowana od 0)
int min_cover_word(const string &u, const vector<int> &pi)
{
  int n = u.length(); if (n==1) return 1;
  int S[n], Z[n];
  for (int i=1; i<n; i++) Z[i]=S[i]=i+1;
  for (int i=1; i<n; i++)
    if (pi[i]>0 && i-Z[S[pi[i]]]<S[pi[i]])
    {
      S[i] = S[pi[i]];
      Z[S[i]] = i;
    }
  return S[n-1];
}

Osobiste