Re: Поиск наилучшего (а также неполного) вхождения подстроки в строку
- From
- Pertzel Family ()
- To
- Daniil Uspensky
- Date
- 2002-07-03T03:05:09Z
- Area
- RU.ALGORITHMS
From: "Pertzel Family" <voldemar@relhum.org>
> Например имеется строка abcabacbcabacbbbca, в которой мы ищем подстроку
> bcabacba
> Наилучшим вхождением будет bcabacb. Или еще можно ввести "достаточное"
> совпадение, т.е. если наилучшее слишком трудоемко искать, то ограничиться
> поискаом первого достаточного.
Строится конечный автомат, то есть таблица переходов,
в которой строка есть номер состояния, столбец - аски-
код буквы, а в клетках стоит номер нового состояния,
в который перейдет ватомат, если встретит данную букву.
состоянием будет длина максимальной подстроки. В примере,
если подстрока должена быть с начала шаблона, состояния
будут соответствовать
0 - пустой строке
1 - b
2 - bc
3 - bca
4 - bcab
5 - bcaba
6 - bcabac
7 - bcabacb
из 0-й в 1-ю будет вести только буква b, все остальные - в 0-ю,
сл-но, в таблице в 0-й сьрокке будут все ноли, и только одна
единица на месте ascii('b').
из 1-й во 1-ю будет вести только буква b, во 2-ю будет вести
только буква с, все остальные - в 0-ю...
.......
из 4-й в 1-ю будет вести только буква b, во 2-ю будет вести
только буква с, в 5-ю будет вести только буква a, все
остальные - в 0-ю...
........
В момент достижения позиции с максимальным доселе виденным
номером, перезапоминаешь место и номер, они будут соответствовать
концу и длине подстроки.
--- ifmail v.2.15dev5
* Origin: Sent via Graf's Inn at news://news.relhum.org (2:5020/400)