Алгоритм Бойера — Мура — Хорспула

Алгоритм Бойера — Мура — Хорспула — алгоритм поиска подстроки в строке, упрощённый вариант алгоритма Бойера — Мура. АБМХ работает лучше алгоритма Бойера — Мура на случайных текстах, оценка в среднем от до на один символ текста[1]. К тому же, требующая многих предварительных вычислений эвристика совпавшего суффикса опускается.

Впрочем, оценка (в худшем случае на непериодических шаблонах) у АБМХ составляет |needle|·|haystack| (вместо 3|haystack| у Бойера-Мура).

Описание алгоритма

Алгоритм является модификацией алгоритма Бойера — Мура. Идея алгоритма такова.

1. Сканирование слева направо, сравнение в режиме «чёрного ящика». Как и в примитивном алгоритме, совмещается начало текста и шаблона, проводится сравнение обычной процедурой «сравнить участки памяти». Если все символы шаблона совпали с наложенными символами строки, значит, подстрока найдена, и поиск окончен.

Если же какой-то символ шаблона не совпадает с соответствующим символом строки, шаблон сдвигается на несколько символов вправо. Эти «несколько» выбираются в соответствии с такой эвристикой.

2. Изменённая эвристика стоп-символа. Берём символ текста, оказавшийся над последним символом шаблона (независимо от того, где случилось несовпадение!). На рисунке это «b».

                             ↓ стоп-символ
Текст                a b a d b * * * *
Шаблон               a b b a d
Следующая проверка       a b b a d

Сдвигаем шаблон так, чтобы под стоп-символом оказалась буква «b» шаблона. Это реализуется с помощью таблицы смещений: для каждого символа алфавита храним максимально возможный сдвиг, не пропускающий стоп-символ. То есть (при нумерации строк с 1): shift(c) = |needle|−lastpos(c, needle[1..|needle|−1]), где lastpos — последнее вхождение символа в строку, needle[a..b] — операция взятия подстроки.

Для шаблона «abbad» таблица имеет следующий вид.

Символ a b (все остальные)
Смещение 1 2 5

Для символов, не вошедших в шаблон, величина смещения устанавливается равной длине шаблона — 5. Последний символ шаблона при вычислении таблицы смещений не рассматривается (чревато зацикливанием).

Таблицу удобнее рассчитывать, проходя по всем символам шаблона:

  for c=MIN_CHAR..MAX_CHAR
    shift[c] = |needle|
 
  for i=1..|needle|-1
    shift[needle[i]] = |needle|-i

Пример работы алгоритма

Искомый шаблон — «abbad» (таблица для этого шаблона построена выше).

abeccacbadbabbad
abbad

Накладываем образец на строку. Последний символ исходной строки «с» не содержится в образце. Сдвигаем образец вправо на 5 позиций в соответствии со значением смещения для «с»:

abeccacbadbabbad
     abbad

Три символа образца совпали, а четвёртый — нет. Сдвигаем образец вправо на 5 позиций в соответствии со значением смещения для «d»:

abeccacbadbabbad
          abbad

Последний символ строки «a» не совпадает с символом шаблона. Сдвигаем образец вправо на 1 в соответствии со значением смещения для «a» и получаем искомое вхождение образца:

abeccacbadbabbad
           abbad

Варианты

Алгоритм Санди

За стоп-символ берём символ, следующий за needle.

Алгоритм Райты

Эмпирический алгоритм, оптимизированный под английские тексты. Сравнивает последний символ, потом первый, потом средний, потом все остальные; при несовпадении — сдвиг по Хорспулу.

Достоинства

Очень быстр в среднем[уточнить]. Прост в реализации. Использует стандартную функцию сравнения участков памяти, как правило, оптимизированную на ассемблерном уровне под конкретный процессор.

Недостатки

Как и другие алгоритмы семейства Бойера-Мура, не модифицируется на приблизительный поиск, одновременный поиск нескольких строк.

Регрессия на «плохих» данных случается несколько чаще, чем в алгоритме Бойера — Мура. Чем разнообразнее символы в исходном тексте, тем лучше ведёт себя АБМХ.

Литература

  • Никлаус Вирт Алгоритмы и структуры данных. — М.: Невский Диалект, 2006. С. 352. ISBN 5-7940-0065-1

Примечания

  1. Horspool algorithm. Дата обращения: 12 августа 2012. Архивировано 29 августа 2012 года.

Ссылки

Read other articles:

Ice cap in Nunavut, Canada For the ice cap in Queen Louise Land, see Ad Astra Ice Cap (Greenland). Ad Astra Ice CapThe Conger Range and Ad Astra Ice CapAd Astra Ice CapTypeIce capLocationNunavut, CanadaCoordinates81°35′N 76°17′W / 81.583°N 76.283°W / 81.583; -76.283StatusRetreating[1] The Ad Astra Ice Cap is an ice cap in Ellesmere Island, Nunavut, Canada.[2] It is located in the Conger Range, north of the head of Tanquary Fiord. The Ad Astra ic...

 

Синелобый амазон Научная классификация Домен:ЭукариотыЦарство:ЖивотныеПодцарство:ЭуметазоиБез ранга:Двусторонне-симметричныеБез ранга:ВторичноротыеТип:ХордовыеПодтип:ПозвоночныеИнфратип:ЧелюстноротыеНадкласс:ЧетвероногиеКлада:АмниотыКлада:ЗавропсидыКласс:Пт�...

 

Football clubAtlético GrauFull nameClub Social Deportivo Atlético GrauNickname(s)Los AlbosLos BlancosLos HeroicosLos AcadémicosFoundedJune 5, 1919; 104 years ago (1919-06-05)GroundEstadio Miguel GrauPiuraCapacity25,500ChairmanArturo Ríos IbáñezManagerÁngel ComizzoLeagueLiga 12023Liga 1, 12th of 19WebsiteClub website Home colours Away colours Third colours Club Atlético Grau, more commonly known as Atlético Grau or simply, Grau, is a Peruvian professional football cl...

Peta kekuasaan Rhodri yang Agung Rhodri yang Agung (pada bahasa Wales, Rhodri Mawr; kadang-kadang dalam bahasa Inggris disebut Roderick yang Agung) (c. 820–878) adalah penguasa pertama Wales yang dijuluki 'Agung', dan penguasa pertama yang menguasai seluruh Wales. Ia dijuluki sebagai Raja Briton oleh Annals dari Ulster. Referensi Nora K. Chadwick (1963). Celtic Britain. Thames and Hudson.  John Edward Lloyd (1911). A history of Wales: from the earliest times to the Edwardian conquest. ...

 

Iklan Coca-Cola di Pegunungan Atlas Hulu, Maroko Cocacolonisasi (atau coca-colonisasi) adalah istilah yang merujuk pada globalisasi atau kolonisasi budaya. Cocacolonisasi merupakan gabungan nama perusahaan minuman ringan multinasional Coca-Cola dan kata kolonisasi. Istilah ini digunakan untuk menjelaskan importasi/penyebaran produk Barat (terutama Amerika Serikat) atau percampuran nilai budaya Barat (khususnya Amerika Serikat) yang bersaing dengan kebudayaan setempat.[1] Walaupun bisa...

 

Family of bacteria Staphylococcaceae Staphylococcus aureus Scientific classification Domain: Bacteria Phylum: Bacillota Class: Bacilli Order: Bacillales Family: StaphylococcaceaeSchleifer and Bell 2010[1] Genera[2] Abyssicoccus Aliicoccus Auricoccus Corticicoccus Gemella Jeotgalicoccus Macrococcus Nosocomiicoccus Salinicoccus Staphylococcus The Staphylococcaceae are a family of Gram-positive bacteria that includes the genus Staphylococcus, noted for encompassing several medica...

American football player (born 1982) For other people named Heath Miller, see Heath Miller (disambiguation). American football player Heath MillerMiller with the Pittsburgh Steelers in 2012No. 83Position:Tight endPersonal informationBorn: (1982-10-22) October 22, 1982 (age 41)Richlands, Virginia, U.S.Height:6 ft 5 in (1.96 m)Weight:256 lb (116 kg)Career informationHigh school:Honaker (Honaker, Virginia)College:Virginia (2001–2004)NFL draft:2005 / Round:...

 

MincheeMinchee, with rice and fried eggChinese免治Jyutpingmin zi TranscriptionsStandard MandarinHanyu PinyinmiǎnzhìYue: CantoneseJyutpingmin ziIPA[mi̬ːnt͡sìː] Minchee, or minchi, is a Macanese dish based on minced or ground meat stir-fried with vegetables and seasoned. It is widely considered Macau's national dish. Description It's an East-meets-West type of dish. Macau's food has a fusion of Cantonese, Portuguese, South America, Malay, Africa, and India.[1] While rec...

 

District in Kachin, Myanmar Myitkyina District (Burmese: မြစ်ကြီးနားခရိုင်) is a district of the Kachin State in northern Burma (Myanmar). The capital lies at Myitkyina. It is the largest district in the country by land area. Location in Kachin State Townships The district contains the following townships: Myitkyina Township Waingmaw Township Injangyang Township Tanai Township Chipwi Township Hsawlaw Township External links Myitkyina District, Burma Satellite...

Art museum in Paris, France This article is about the museum. For the building, see Louvre Palace. For other uses, see Louvre (disambiguation). Musée du LouvreThe Louvre MuseumEstablished10 August 1793; 230 years ago (1793-08-10)LocationMusée du Louvre, 75001, Paris, FranceTypeArt museum and historic siteCollection size615,797 in 2019[1] (35,000 on display)[2]Visitors8.9 million (2023)[3] Ranked 1st nationally Ranked 1st globally DirectorLaurence de...

 

Artikel ini sebatang kara, artinya tidak ada artikel lain yang memiliki pranala balik ke halaman ini.Bantulah menambah pranala ke artikel ini dari artikel yang berhubungan atau coba peralatan pencari pranala.Tag ini diberikan pada Oktober 2022. Honda Accord generasi keenam tersedia sebagai sedan empat pintu atau coupe dua pintu dan diproduksi oleh Honda dari tahun 1998 hingga 2002. Latar Belakang Untuk generasi keenam, Honda membagi Accord menjadi tiga model terpisah, yang dirancang untuk pas...

 

Olympic athletics event Women's heptathlonat the Games of the XXXII OlympiadOlympic AthleticsVenueJapan National StadiumDates4 August 20215 August 2021Competitors24 from 17 nationsWinning points6791Medalists Nafissatou Thiam  Belgium Anouk Vetter  Netherlands Emma Oosterwegel  Netherlands← 20162024 → Athletics at the2020 Summer OlympicsQualificationTrack events100 mmenwomen200 mmenwomen400 mmenwomen800 mmenwomen1500 mmenwomen5000 mmenwomen10,000 ...

Artillery rocket 9K52 Luna-M 9P113 TEL with 9M21 rocketTypeArtillery rocketPlace of originSoviet UnionService historyIn service1962–presentWarsYom Kippur WarSoviet–Afghan WarIran–Iraq WarLebanese Civil WarGulf WarYugoslav Wars2003 invasion of IraqLibyan Civil WarSyrian Civil WarYemeni Civil War (2015–present)Production historyVariants9M21B (nuclear), 9M21F (HE) and 9M21G (chemical), Laith-90Specifications (9M21B)Mass2.5 t (390 st)[1]Length8,950–9,40...

 

Location of Guernsey County in Ohio This is a list of the National Register of Historic Places listings in Guernsey County, Ohio. This is intended to be a complete list of the properties and districts on the National Register of Historic Places in Guernsey County, Ohio, United States. The locations of National Register properties and districts for which the latitude and longitude coordinates are included below, may be seen in an online map.[1] There are 22 properties and districts li...

 

آكرون   الاسم الرسمي (بالإنجليزية: Akron)‏    الإحداثيات 41°04′23″N 81°31′04″W / 41.073055555556°N 81.517777777778°W / 41.073055555556; -81.517777777778   [1] تاريخ التأسيس 1825  تقسيم إداري  البلد الولايات المتحدة[2][3]  التقسيم الأعلى مقاطعة ساميت  عاصمة لـ مقاطعة ساميت&...

Luciano ZecchiniZecchini al Torino nel 1973Nazionalità Italia Altezza180 cm Peso72 kg Calcio RuoloAllenatore (ex difensore) Termine carriera1984 - giocatore2009 - allenatore CarrieraGiovanili 1965-1967 Forlì Squadre di club1 1965-1967 Forlì37 (0)1967-1969 Prato67 (1)1969-1970 Brescia12 (0)1970-1974 Torino93 (0)1974-1975 Milan26 (0)1975-1977 Sampdoria53 (2)1977-1982 Perugia45 (0)1982-1984 Massese39 (0) Nazionale 1974 Italia3 (0) Carriera da ...

 

Artifact found in the tomb of Tutankhamun Lotus chaliceThe lotus chalice in the exhibition Tutankhamun: Treasures of the Golden Pharaoh.MaterialAlabasterSize18.3 cm high, 28.3 cm wide, cup depth is 16.8 cm.[1]CreatedReign of Tutankhamun (c. 1332–1323 BC), 18th dynasty, New KingdomDiscoveredTomb of Tutankhamun (KV62), Valley of the KingsPresent locationEgyptian Museum, CairoIdentificationJE 67465, Find number 14, GEM 36 The Lotus chalice or Alabaster chalice, called the Wishing ...

 

京楽産業.株式会社KYORAKU SANGYO CO.,LTD. 本社(2014年3月)種類 株式会社略称 KYORAKU本社所在地 日本〒468-0065名古屋市天白区中砂町185北緯35度7分15.7秒 東経136度57分48.9秒 / 北緯35.121028度 東経136.963583度 / 35.121028; 136.963583座標: 北緯35度7分15.7秒 東経136度57分48.9秒 / 北緯35.121028度 東経136.963583度 / 35.121028; 136.963583本店所在地 〒460-0003名古屋市中区�...

7th season of competitive football in England This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these messages) This article's lead section may be too short to adequately summarize the key points. Please consider expanding the lead to provide an accessible overview of all important aspects of the article. (October 2023) This article needs additional citations for verification. Please help improve this article by ad...

 

This article is about the audio effect. For the acoustic phenomenon, see Reverberation. Artificial reverberation audio effect Short sample of reverberation effect Clean signal, followed by 3 different versions of reverberation (with longer and longer decay times). Problems playing this file? See media help. A reverb effect, or reverb, is an audio effect applied to a sound signal to simulate reverberation.[1] It may be created through physical means, such as echo chambers, or electroni...