🗊Презентация Алгоритмы поиска подстроки в строке

Нажмите для полного просмотра!
Алгоритмы поиска подстроки в строке, слайд №1Алгоритмы поиска подстроки в строке, слайд №2Алгоритмы поиска подстроки в строке, слайд №3Алгоритмы поиска подстроки в строке, слайд №4Алгоритмы поиска подстроки в строке, слайд №5Алгоритмы поиска подстроки в строке, слайд №6Алгоритмы поиска подстроки в строке, слайд №7

Вы можете ознакомиться и скачать презентацию на тему Алгоритмы поиска подстроки в строке. Доклад-сообщение содержит 7 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Алгоритмы поиска подстроки в строке
Описание слайда:
Алгоритмы поиска подстроки в строке

Слайд 2





2. Алгоритм Рабина – Карпа
Описание слайда:
2. Алгоритм Рабина – Карпа

Слайд 3





public static int RabinKarp(String where, String what) {
public static int RabinKarp(String where, String what) {
    int n = where.length();   // Длина строки, в которой происходит поиск
    int m = what.length();    // Длина подстроки
    long h = 1;               // Вычисляемый числовой показатель вытесняемой буквы
    for (int k = 1; k <= m-1; k++) {
        h <<= 8;
        h %= q;
    }
    long p = 0;     // Числовой показатель подстроки - вычисляется один раз
    long t = 0;     // Изменяемый числовой показатель участка исходной строки
    for (int k = 0; k < m; k++) {
        p = ((p << 8) | (byte) what.charAt(k)) % q;
        t = ((t << 8) | (byte) where.charAt(k)) % q;
    }
    // Внешний цикл по исходной строке
    extLoop:
    for (int i = 0; i <= n-m; i++) {
        if (p == t) {
            // Показатели строк совпали; проверяем, не холостое ли это срабатывание
            for (int j = 0; j < m; j++) {
                if (where.charAt(i+j) != what.charAt(j)) {
                    // символы не совпали - продолжаем поиск
                    continue extLoop;
                }
            }
            // подстрока найдена!
            return i;
        } else if (i < n-m) {
            // сдвиг по исходной строке
            t = (((t - h * (byte) where.charAt(i)) << 8) | (byte) where.charAt(i+m)) % q;
        }
    }
    return -1;
}
Описание слайда:
public static int RabinKarp(String where, String what) { public static int RabinKarp(String where, String what) { int n = where.length(); // Длина строки, в которой происходит поиск int m = what.length(); // Длина подстроки long h = 1; // Вычисляемый числовой показатель вытесняемой буквы for (int k = 1; k <= m-1; k++) { h <<= 8; h %= q; } long p = 0; // Числовой показатель подстроки - вычисляется один раз long t = 0; // Изменяемый числовой показатель участка исходной строки for (int k = 0; k < m; k++) { p = ((p << 8) | (byte) what.charAt(k)) % q; t = ((t << 8) | (byte) where.charAt(k)) % q; } // Внешний цикл по исходной строке extLoop: for (int i = 0; i <= n-m; i++) { if (p == t) { // Показатели строк совпали; проверяем, не холостое ли это срабатывание for (int j = 0; j < m; j++) { if (where.charAt(i+j) != what.charAt(j)) { // символы не совпали - продолжаем поиск continue extLoop; } } // подстрока найдена! return i; } else if (i < n-m) { // сдвиг по исходной строке t = (((t - h * (byte) where.charAt(i)) << 8) | (byte) where.charAt(i+m)) % q; } } return -1; }

Слайд 4





3. Алгоритм Кнута – Морриса – Пратта
Описание слайда:
3. Алгоритм Кнута – Морриса – Пратта

Слайд 5





public static int KnuthMorrisPratt(String where, String what) {
public static int KnuthMorrisPratt(String where, String what) {
    int n = where.length();   // Длина строки, в которой происходит поиск
    int m = what.length();    // Длина подстроки
    // Формирование таблицы сдвигов
    int[] table = new int[m];
    table[0] = 0;
    int shift = 0;
    for (int q = 1; q < m; q++) {
        while (shift > 0 && what.charAt(shift) != what.charAt(q)) {
            shift = table[shift-1];
        }
        if (what.charAt(shift) == what.charAt(q)) shift++;
        table[q] = shift;
    }
    // Поиск с использованием таблицы сдвигов
    shift = 0;
    for (int i = 0; i < n; i++) {
        while (shift > 0 && what.charAt(shift) != where.charAt(i)) {
            shift = table[shift-1];
        }
        if (what.charAt(shift) == where.charAt(i)) shift++;
        if (shift == m) return i-m+1;   // подстрока найдена
    }
    return -1;    // подстрока не найдена
}
Описание слайда:
public static int KnuthMorrisPratt(String where, String what) { public static int KnuthMorrisPratt(String where, String what) { int n = where.length(); // Длина строки, в которой происходит поиск int m = what.length(); // Длина подстроки // Формирование таблицы сдвигов int[] table = new int[m]; table[0] = 0; int shift = 0; for (int q = 1; q < m; q++) { while (shift > 0 && what.charAt(shift) != what.charAt(q)) { shift = table[shift-1]; } if (what.charAt(shift) == what.charAt(q)) shift++; table[q] = shift; } // Поиск с использованием таблицы сдвигов shift = 0; for (int i = 0; i < n; i++) { while (shift > 0 && what.charAt(shift) != where.charAt(i)) { shift = table[shift-1]; } if (what.charAt(shift) == where.charAt(i)) shift++; if (shift == m) return i-m+1; // подстрока найдена } return -1; // подстрока не найдена }

Слайд 6





4. Алгоритм Бойера - Мура
Описание слайда:
4. Алгоритм Бойера - Мура

Слайд 7





private static final int shLen = 256;
private static final int shLen = 256;
private static int hash(char c) { return c & 0xFF; }

public static int BoyerMoore(String where, String what) {
    int n = where.length();    // Длина исходной строки
    int m = what.length();     // Длина образца
    // Формирование массива сдвигов
    int[] shifts = new int[shLen];
    // Для символов, отсутствующих в образце, сдвиг равен длине образца
    for (int i = 0; i < shLen; i++) {
        shifts[i] = m;
    }
    // Для символов из образца сдвиг равен расстоянию от
    // последнего вхождения символа в образец до конца образца
    for (int i = 0; i < m-1; i++) {
        shifts[hash(what.charAt(i))] = m-i-1;
    }
    // Поиск с использованием таблицы сдвигов
    for (int i = 0; i <= n-m; ) {
        // Сравнение начинается с конца образца
        for (int j = m-1; j>=0; j--) {
            if (where.charAt(i+j) == what.charAt(j)) {
                if (j == 0) return i;
            } else {
                break;
            }
        }
        // Сдвиг производится в соответствии с кодом последнего из сравниваемых символов
        i += shifts[hash(where.charAt(i+m-1))];
    }
    return -1;
}
Описание слайда:
private static final int shLen = 256; private static final int shLen = 256; private static int hash(char c) { return c & 0xFF; } public static int BoyerMoore(String where, String what) { int n = where.length(); // Длина исходной строки int m = what.length(); // Длина образца // Формирование массива сдвигов int[] shifts = new int[shLen]; // Для символов, отсутствующих в образце, сдвиг равен длине образца for (int i = 0; i < shLen; i++) { shifts[i] = m; } // Для символов из образца сдвиг равен расстоянию от // последнего вхождения символа в образец до конца образца for (int i = 0; i < m-1; i++) { shifts[hash(what.charAt(i))] = m-i-1; } // Поиск с использованием таблицы сдвигов for (int i = 0; i <= n-m; ) { // Сравнение начинается с конца образца for (int j = m-1; j>=0; j--) { if (where.charAt(i+j) == what.charAt(j)) { if (j == 0) return i; } else { break; } } // Сдвиг производится в соответствии с кодом последнего из сравниваемых символов i += shifts[hash(where.charAt(i+m-1))]; } return -1; }



Похожие презентации
Mypresentation.ru
Загрузить презентацию