|
Во всех предыдущих примерах только вскользь
рассматривались вопросы вычисления элементов таблиц. Как правило,
эти вычисления проводились слева направо и сверху вниз, т.е. начиная
с маленьких индексов и кончая большими индексами. Иногда на практике
вычисление элементов идет не регулярным образом. В этом случае
используется насколько схем пересчета, которые позволяют определить
момент окончания алгоритма пересчета. Первой из таких схем является
идея пересчета на каждой итерации всей таблицы, и продолжение
пересчета только в том случае, если в таблице произошли изменения.
| Пример #1. |
|
Квадратная таблица n´n заполнена неотрицательными вещественными
числами. Число aij, стоящее в
клетке (i,j) (i-
номер строки, j-номер столбца)
определяет курс обмена валюты i на
валюту j. Так, например, если aij=2.5, то это значит, что за
единицу валюты i дают 2.5 единиц валюты
j. Если aij=0, то считается, что курс
обмена валюты i на валюту j прямо не установлен. Написать программу,
позволяющую определить, можно ли, имея некоторую сумму денег в
одной из валют, получить большую сумму денег в той же валюте,
совершив несколько обменов. |
|
Пусть задана матрица обменов Курс[i,j]i, j=1,...,n.
Будем вычислять матрицу лучших обменов
(понятно, что имеет смысл вычислять только наилучшие обмены)
по правилу
где максимум берется
по всем возможным значениям k=1,...,n для всех возможных пар i,j=1,...,n. Очевидно, что на первом этапе матрица
лучших курсов совпадает с матрицей обменных курсов.
Перевычисление элементов матрицы Новый_Обмен[i,j] осуществляется до тех пор,
пока в матрице происходят изменения или на диагонали появился
элемент, больший 1. В последнем случае индекс диагонального
элемента и определяет номер валюты, для которой возможен
требуемая по условию задачи цепочка обменов. Если же изменения
в матрице наилучших обменов закончились, а на диагонали нет
элементов, больших 1, то требуемой цепочки обменов нет.
|
В приведенном примере перевычисление таблицы
осуществлялось до тех пор, пока в ней были изменения, что и
гарантировало правильность полученных результатов. Рассмотрим еще
один пример, когда такая тактика обеспечивает правильность решения,
в то время как достаточно правдоподобное рекуррентное соотношение
приводит к ошибкам.
Назад
|