Наближена відповідність рядків
У комп'ютерних науках, наближена відповідність рядків (часто вживається як нечіткий пошук рядків) — це техніка знаходження стрічок що відповідає патерну наближено (аніж точно). Проблема приблизної відповідності стрічок типово поділяється на дві під-проблеми: знаходження наближеної під-стрічки всередині певної стрічки та знаходження тих, що наближено відповідають патерну. Загальний оглядНаближеність збігу вимірюється кількістю примітивних операцій, необхідних для того щоб перетворити стрічку на точний збіг. Ця кількість називається редакційною відстанню між стрічкою і патерном. Зазвичай як операції розцінюються:
Всі ці три операції можуть бути узагальнені як форми заміщення з додаваннями символу NULL (тут зазначеним як *), під час видалення або вставки:
Також інколи розглядається операція транспозиція, в якій дві літери у стрічці міняються місцями, щоб бути примітивною операцією. Зміна abc → acb це транспозиція. Різні наближені обчислювачі накладають різні обмеження. Деякі обчислювачі використовують єдину глобальну незважену вартість, тобто загальне число примітивних операцій, необхідних для перетворення збігу патерном. Наприклад, якщо патерном є coil, foil відрізняється одною заміною, oil одним видаленням та foal двома замінами. Якщо рахувати що окрема операція вартує однієї затрати, та встановити ліміт на одну затрату, то coil, foil та oil будуть валідними збігами, а foal - ні. Інші обчислювачі вказують кількість операцій кожного типу окремо, у той час як всі інші встановили загальну вартість, але дозволяють відносити різні ваги до різних операцій. Деякі обчислювачі допускають окреме задання меж і ваг для окремих груп у структурі. Постановка завдання та алгоритмиОдне з можливих визначень задач наближеного збігу рядків є: Маємо стрічку паттерн P = p1p2...pm та текстову стрічку T = t1t2...tn, необхідно знайти стрічку Tj`,j = tj`...tj в Т, яка з усіх підстрічок Т, має найменшу редакційну відстань до паттерна P. Підхід грубої сили мав би очислити редакційну відстань до P для всіх підстрічок T, а далі обрати підстрічку з мінімальною відстанню. Але цей алгоритм мав би складність O(n3 m). Для кожної позиції j в тексті T, і кожної позиції i в патерні P, пройти по всім підстрічкам T завершуючи на позиції j та визначити яка з них має мінімальну редакційну відстань до i перших літер патерну P. Обчислення E(m, j) дуже схоже до обчислення редакційної відстані між двома стрічками. Насправді, ми можемо використати алгоритм Левенштейна для E(m, j), эдина відмінність полягає в тому що ми повинні ініціалізувати перший рядок нулями, та зберегти послідовність обчислення, як в E(i - 1,j), E(i,j - 1) або E(i - 1, j - 1) в обчисленні E(i,j). В масиві що зберігає E(x,y) значення, ми потім вибираємо найменше значення в останньому рядку, наприклад E(x2, y2), і продовжуємо обчислення в інший бік, до номера рядку 0. Якщо поле до якого ми дійшли E(0, y1), далі T[y1 + 1] ... T[y2] є підстрічкою Т з мінімальною редакційною відстанню до патерна Р. Обчислюючи E(x,y) масив затрачує O(mn) часу з алгоритмом динамічного програмування, тим часом як обчислення-навпаки затрачує О(n + m) часу. On-line проти off-lineТрадиційно, алгоритми наближеного збігу рядків класифікуються двома категоріями: on-line та off-line. З on-line алгоритмами патерн може бути опрацьований перед пошуком, але текст - ні. Іншими словами, on-line техніки роблять пошук без індексування. Ранні алгоритми наближеного пошуку були запропоновані Вагнером та Фішером. Обидва алгоритми базуються на динамічному програмуванні але вирішують різні проблеми. Алгоритм Селлерса шукає наближено підстрічки в тексті, тим часом як алгоритми Вагнера та Фішера обчислюють відстань Левенштейна, будучи підходящими лише для нечіткого пошуку в словниках тільки. Пошуки за технікою on-line були значно покращені. Можливо одне з найркащих покращень було задіяно в bitap (двійковий пошук) алгоритмі (також відомим як зсув-або та зсув-і алгоритмі), який дуже ефективний для коротких стрічок. Bitap алгоритм це якдро пошукових систем Unix, зокрема agrep утиліти. Огляд on-line алгоритмів був зроблений G. Navarro. Незважаючи на існування дуже швидкої on-line техніки, їхня продуктивність на великих даних неприйнятна. Препроцесинг тексту або індексування робить динамічний пошук швидшим. Сьогодні, існує маса індексуючих алгоритмів. Серед них є суфіксні дерева, метричні дерева а також методи н-грам. Детальніший опис індексуючих технік, що дозволяють знаходити довільні підстрічки наданий у роботах Navarro. Обчислювальні опитувальники словникових методів (наприклад, методи, що дозволяють знаходити всі словникові слова, що наближено збігаються з шуканим патерном) надані в роботах Бойтсова. ЗастосуванняДо недавніх пір найбільш часто наближений пошук застосовувався в системах перевірки правопису. Також, за наявністю великих обсягів ДНК даних, співставлення нуклеотидних послідовностей стало важливою задачею. Наближені порівняння використовуються в спам-фільтрах. Але наближене порівняння не може бути використане для бінарних даних, таких як зображень або музики. Вони потребують інших алгоритмів, таких як "акустичних відбитків" Варто розглянути
Джерела
Посилання
|
Portal di Ensiklopedia Dunia