Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

4 курс / СиАОД пример 3

.docx
Скачиваний:
0
Добавлен:
26.01.2026
Размер:
129.04 Кб
Скачать

Федеральное агентство связи

Ордена Трудового Красного Знамени

Федеральное государственное бюджетное образовательное учреждение высшего образования

«Московский технический университет связи и информатики»

Кафедра Математической Кибернетики и Информационных Технологий

Отчет по лабораторной работе

по предмету «СиАОД»

на тему:

«Методы поиска подстроки в строке»

Выполнил: студент группы ____

______

Руководитель:

Кутейников И. А.

Москва 2021

Цель работы

Реализовать заданный метод поиска подстроки в строке в соответствии с индивидуальным заданием. Для всех вариантов добавить реализацию добавления строк, ввода подстроки и поиска подстроки. Предусмотреть возможность существования пробела. Ввести опцию чувствительности / нечувствительности к регистру. Оценить время работы каждого алгоритма поиска и сравнить его со временем работы стандартной функции поиска, используемой в выбранном языке программирования.

Вариант задания

Метод поиска: Кнута-Морриса-Пратта.

Выполнение

Код программы

import java.lang.String; import java.util.Scanner; public class FindSubstring { public static int[] Lps(String substring) // longest proper prefix/suffix { int[] lps = new int[substring.length()]; for(int i = 1;i<substring.length();i++) { int j =0; while(i+j<substring.length() && substring.charAt(j) == substring.charAt(i+j)) { lps[i+j] = Math.max(lps[i+j],j+1); j++; } } return lps; } public static boolean KMP(String text, String substring) { int [] lps = Lps(substring); int i = 0; int j = 0; while(i<text.length()) { if(substring.charAt(j) == text.charAt(i)) { i++; j++; } if(j == substring.length()) { j = lps[j-1]; return true; } else if(i<text.length() && substring.charAt(j)!= text.charAt(i)) { if(j!=0) { j = lps[j-1]; } else { i++; } } } return false; } public static void main(String[] args) { char ch; Scanner sc = new Scanner(System.in); System.out.println("Введите строку: "); String text = sc.nextLine(); String substring = ""; long startTime,endTime,elapsedMicroseconds; do { System.out.println("Введите желаемую операцию: F - найти подстроку, I - ввести подстроку, C - сменить строку, Z - выход"); ch = sc.nextLine().toUpperCase().charAt(0); switch(ch) { case 'I': System.out.println("Введите подстроку: "); substring = sc.nextLine(); System.out.println("Текущая подстрока - " + substring); break; case 'F': startTime =System.nanoTime(); if(KMP(text,substring)) { endTime = System.nanoTime(); elapsedMicroseconds = (endTime - startTime) / 1000; System.out.println("Found, elapsed time KMP = " + elapsedMicroseconds + " microseconds"); startTime =System.nanoTime(); text.contains(substring); endTime = System.nanoTime(); elapsedMicroseconds = (endTime - startTime) / 1000; System.out.println("Found, elapsed time JAVA = " + elapsedMicroseconds + " microseconds"); } else System.out.println("Not found"); break; case 'C': System.out.println("Введите новую строку: "); text = sc.nextLine(); System.out.println("Текущая строка - " + text); break; } } while(ch != 'Z'); } }

Результат работы программы

Таблица 1 – Время поиска подстроки в строке Hellojfklqjfkl mnfmqnfqkfjq qweklqwj HowAreYoufhqfm ejqlkeNameKKfq

Подстрока

Алгоритм КМП,мкс

Встроенный алгоритм Java,мкс

Hello

38

8

HowAreYou

9

5

Name

11

5

Вывод

Реализовали заданный метод поиска подстроки в строке в соответствии с индивидуальным заданием. Для всех вариантов добавили реализацию добавления строк, ввода подстроки и поиска подстроки. Оценили время работы алгоритма поиска и сравнили его со временем работы стандартной функции поиска, используемой в выбранном языке программирования. И в результате получилось, что встроенный алгоритм получился немного быстрее, чем реализованный. И, скорее всего, при увеличении строки, в которой будет осуществляться поиск, разница в скорости поиска будет увеличиваться, и наилучший результат будет показывать встроенный алгоритм поиска, т.к они спроектированы для производительности в больших объемах.

Соседние файлы в папке 4 курс