Нужно ли учитывать кодировку при сопоставлении паттернов Бойера-Мура? - PullRequest
2 голосов
/ 19 мая 2011

Я собираюсь реализовать вариант алгоритма сопоставления с образцом Бойера-Мура (конкретный воскресный алгоритм), и я спрашивал себя: каков размер моего алфавита?

Зависит ли он откодировка (= количество возможных символов) или я могу просто предположить, что мой алфавит состоит из 256 символов (= количество символов, которые могут быть представлены байтом)?

Во многих других ситуациях обработка символов как байтов будетпроблема, потому что в зависимости от кодировки символ может состоять из нескольких байтов, но если в моем случае обе строки имеют одинаковую кодировку, то одинаковые символы представляются одинаковыми байтовыми последовательностями, поэтому я предполагаю, что это не имеет значения.

Итак: я должен принять во внимание кодировку и предположить, что алфавит состоит из фактических символов (> 90000 для Unicode), или я могу просто обрабатывать текст и шаблон как поток байтов?

1 Ответ

3 голосов
/ 20 мая 2011

Многобайтовое кодирование может использоваться с процедурой поиска, ориентированной на байты. IF Самосинхронизирующийся .

Таким образом, вы можете безопасно использовать Boyer-Мур с:

  • CESU-8
  • UTF-8
  • UTF-EBCDIC

Но может НЕ используйте его с:

  • Big5
  • EUC-JP
  • GBK / GB18030
  • ISO 2022
  • Johab
  • Punycode
  • Shift-JIS
  • UTF-7
  • UTF-16
  • UTF-32
...