Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Этот интересный метод придумал Р.Флойд – автор многих остроумных решений в программировании. Вместо матрицы строятся две специальные функции f и g, такие что:
1. Если Si∙*> Sj Þ f(Si) > g(Sj).
2. Если Si <* Sj Þ f(Si) < g(Sj).
3. Если Si =* Sj Þ f(Si) = g(Sj).
Тогда, вместо поиска с помощью матрицы отношения предшествования между символами, просто происходит сравнение числовых значений соответствующих функций на больше меньше равно.
Построение функций предшествования:
0. Строится матрица предшествования и начальные значения функций принимаются равными единице: f(Si) = g(Sj) = 1.
1. Матрица просматривается по строкам в поисках отношений ∙*> и, если
f(Si) > g(Sj), то идем дальше, если же Si *> Sj, а f(Si) ≤ g(Sj), то увеличиваем значение f(Si) - f(Si) = g(Sj) + 1.
2. Матрица просматривается по столбцам в поисках отношений <*∙ и, если
f(Si) < g(Sj), то идем дальше, если же Si <* Sj, а f(Si) ³ g(Sj), то увеличиваем значение g(Sj) - g(Sj) = f(Si) + 1.
3. Матрица просматривается в поисках отношений =* и, если f(Si) = g(Sj), то идем дальше, если Si =* Sj, а f(Si) ¹ g(Sj), то выравниваем значения функций путем увеличения меньшего из значений до большего - f(Si) = g(Sj) = max[f(Si), g(Sj) ].
4. Возвращение к первому пункту.
Повторять до тех пор, пока рост функций не прекратится (или когда значение одной из функций не превысит 2*n, где n - размерность матрицы - в этом случае алгоритм не сходится).
Пример.
На основе матрицы предшествования в соответствии с описанным алгоритмом построим функции предшествования.
Уточняемые значения функций будем располагать левее строк и выше столбцов с соответствующими символами.
|
g(Sj)
f(Si)
A | B | C | D | E | |
A | ∙> | <∙ | ∙> | ∙ | |
B | ∙ | ||||
C | <∙ | ||||
D | ∙> | ||||
E | ∙ | ∙> |
|
В результате получим числовые значения (табличных) функций для всех символов.
A | B | C | D | E | |
f | |||||
g |
Однако, этот метод не свободен от недостатков:
1. Алгоритм не всегда сходится (не всегда приводит.к построению функций).
2. При переходе к функциям происходит «незаконное доопределение» матрицы. То есть как бы появляются отношения предшествования между парами символов, для которых в исходной матрице отношение отсутствовало.
Дата публикования: 2014-11-03; Прочитано: 407 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!