ring (0, nom.Length - 2);
}
// Повернення результату пошуку
return nom;
}
Додаток Б
Реалізація алгоритму Рабіна-Карпа
// Хеш-функція для алгоритму Рабіна-Карпа
public static int Hash (string s)
{
int rez = 0;
for (int i = 0; i
{
rez + = (int) (s [i]) ;//Додавання кодів літер
}
return rez;
}
// Функція пошуку алгоритмом Рабіна
public static string Rabina (string x, string s)
{
string nom = "";
// Якщо шукана рядок більше вихідної - повернення порожнього пошуку
if (x.Length> s.Length) return nom;
// Обчислення хеш-функції шуканої рядка
int xhash = Hash (x);
// Обчислення хеш-функції першого слова довжини зразка в рядку S
int shash = Hash (s.Substring (0, x.Length));
for (int i = 0; i
{
// Якщо значення хеш-функцій збігаються
if (xhash == shash)
{
bool flag = true;// Прапор
int j = 0;
while ((flag == true) && (j
{
if (x [j]! = s [i + j]) flag = false;
j + +;
}
// Якщо шукана рядок збіглася з частиною вихідної
if (flag == true)
nom = nom + Convert.ToString (i) + ",";
}
// Інакше обчислення нового значення після зсуву
else shash = shash - (int) (s [i]) +
(i nt) (s [i + x.Length]);
}
// Якщо входження знайдено
if (nom! = "")
{
nom = nom.Substring (0, nom.Length - 2);
}
return nom;
}
Додаток В
Реалізація алгоритму Кнута-Морріса-Пратта
// Префікс-функція для КМПstatic int [] PrefFunc (string x)
{
// Ініціалізація масиву-результату довжиною X
int [] res = new int [x.Length];
int i = 0;
int j = ...