Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

В информатике , то алгоритм подстановочных сопоставлений Krauss является сопоставление с образцом алгоритмом. Основанный на широко используемом синтаксисе с подстановочными знаками , например в интерфейсе командной строки Microsoft Windows , алгоритм обеспечивает нерекурсивный механизм сопоставления шаблонов в программных приложениях, основанный на синтаксисе, более простом, чем тот, который обычно предлагается регулярными выражениями .

История [ править ]

Алгоритм основан на истории разработки, тестировании корректности и производительности, а также на отзывах программистов, которые начались с безуспешного поиска надежного нерекурсивного алгоритма сопоставления подстановочных знаков. Первоначальный алгоритм, реализованный в одном цикле while, быстро вызвал комментарии от разработчиков программного обеспечения, что привело к улучшениям. [1] Постоянные комментарии и предложения [2] [3] привели к появлению пересмотренного алгоритма, все еще реализованного в едином цикле while, но доработанного на основе набора тестовых примеров и профилировщика производительности . [4]Опыт настройки одиночного цикла while с помощью профилировщика побудил к разработке стратегии двух циклов, которая позволила добиться дальнейшего повышения производительности, особенно в ситуациях, связанных с пустыми входными строками или входными данными, не содержащими подстановочных знаков. [5] Двухпетлевой алгоритм доступен для использования сообществом разработчиков программного обеспечения с открытым исходным кодом в соответствии с условиями Apache License v. 2.0 и сопровождается кодом тестового примера.

Использование [ править ]

Алгоритм, доступный по лицензии Apache, реализован как в C ++ на основе указателей, так и в переносимом C ++ (реализован без указателей). Код тестового примера, также доступный по лицензии Apache, может быть применен к любому алгоритму, который обеспечивает операции сопоставления с образцом ниже. Реализация в том виде, в котором она закодирована, не может обрабатывать многобайтовые наборы символов и создает проблемы, когда текст, в котором выполняется поиск, может содержать несколько несовместимых наборов символов.

Операции сопоставления с образцом [ править ]

Алгоритм поддерживает три операции сопоставления с образцом:

  • Однозначное соответствие выполняется между шаблоном и источником, который необходимо проверить на совпадение, за исключением символов звездочки ( * ) или вопросительного знака ( ? ) В шаблоне.
  • Символ звездочки ( * ) соответствует любой последовательности из нуля или более символов.
  • Знак вопроса ( ? ) Соответствует любому одиночному символу.

Примеры [ править ]

  • * foo * соответствует любой строке, содержащей «foo».
  • mini * соответствует любой строке, начинающейся с "mini" (включая саму строку "mini").
  • ??? * соответствует любой строке из трех или более букв.

Приложения [ править ]

Исходный алгоритм был перенесен на язык программирования DataFlex Ларри Хейгесом [6] для использования с библиотекой кода Data Access Worldwide . Он был размещен на GitHub в измененном виде как часть программы для чтения файлов журнала. [7] Алгоритм 2014 года является частью средства просмотра моделей Unreal Model Viewer, встроенного в игровой движок Epic Games Unreal Engine . [8] [9]

См. Также [ править ]

  • сопоставление с образцом
  • glob (программирование)
  • Wildmat

Ссылки [ править ]

  1. ^ Краусс, Кирк (2008). «Подстановочные знаки соответствия: алгоритм» . Журнал доктора Добба .
  2. ^ "поиск по шаблону" . alt.os.development. 2008 г.
  3. Перейти ↑ TJ (2014). «сопоставление подстановочных знаков в текстовой строке» . Переполнение стека.
  4. ^ Краусс, Кирк (2014). «Подстановочные знаки соответствия: эмпирический способ приручить алгоритм» . Журнал доктора Добба .
  5. ^ Краусс, Кирк (2018). «Подстановочные знаки соответствия: улучшенный алгоритм для больших данных» . Развивайте для повышения производительности.
  6. ^ Heiges, Ларри (2008). «Функция сравнения текста - generalTextCompare.txt» . Всемирная библиотека кодов доступа к данным .
  7. ^ Deniskore (2013). "Deniskore / wildcard / CLogReader.cpp" . Популярные репозитории . GitHub. Строки 173-279.
  8. ^ gildor2 (2016). «UModel / Core / Core.cpp» . Средство просмотра моделей Unreal Engine (UE Viewer) . GitHub. Строки 334-435.
  9. ^ gildor2 (2016). «История UModel / Core / Core.cpp» . Средство просмотра моделей Unreal Engine (UE Viewer) .