-1;
res [0] = -1;
// Обчислення префікс-функції
while (i
{
while ((j> = 0) && (x [j]! = x [i]))
j = res [j];
i + +;
j + +;
if (x [i] == x [j])
res [i] = res [j];
else
res [i] = j;
}
return res ;//Повернення префікс-функції
}
// Функція пошуку алгоритмом КМПstatic string KMP (string x, string s)
{
// Оголошення рядки з номерами позицій
string nom = "";
if (x.Length> s.Length) return nom;
// Виклик префікс-функції
int [] d = PrefFunc (x);
int i = 0, j;
while (i
{
for (i = i, j = 0; (i
(j
while ((j> = 0) && (x [j]! = s [i]))
j = d [j];
if (j == x.Length)
nom = nom + Convert.ToString (i - j) + ",";
}
if (nom! = "")
{
// Видалення останньої коми і пропусків
nom = nom.Substring (0, nom.Length - 2);
}
return nom;
}
Додаток Г
Реалізація алгоритму Бойєр-Мура
// Таблиця символів шуканого рядка static char [] SymbolOfX;
// Таблиця зсувів для символів static int [] ValueShift;
// Процедура - формування смещенійstatic void ShiftBM (string x)
{
int j ;//Лічильник
int k = 0 ;//Лічильник
bool fl ;//Прапор
SymbolOfX = new char [x.Length] ;//Ініціалізація
ValueShift = new int [x.Length] ;//Ініціалізація
// Цикл по шуканої рядку без останнього символу
for (int i = x.Length-2; i> = 0; i -)
{
fl = false ;//Прапор
j = 0 ;//Обнулення
while ((j
{
if (SymbolOfX [j] == x [i]) fl = true;
j + +;
}
if (fl == false)
{
SymbolOfX [k] = x [i];
<...