Каков наилучший подход (алгоритм) для непрерывного расчета каскадных отношений между объектами? - PullRequest
1 голос
/ 20 октября 2010

Например, A + B = C C + D = E E + F = G, поскольку изменения вносятся в каждый узел, связанные узлы пересчитываются.Изображение ниже - упрощенный пример того, что я пытаюсь сделать.

Дополнительные пояснения. Структура каждого объекта идентична.Входными данными будут цены, так как каждое изменение цены будет иметь каскадный эффект на цены ниже по течению.поэтому в приведенном выше примере A + B = C станет 5 + 6 = 11.и т. д.

Изменения происходят постоянно (возможно, каждую секунду), так как каждое значение изменяется, я должен быть уведомлен (событие сработало).

Ответы [ 2 ]

1 голос
/ 21 октября 2010

Пока ваш график не меняется, только значения можно сделать топологической сортировкой вашего графика. Затем проведите график в топологическом порядке сортировки, начиная с значений, которые изменились. Если изменения будут редкой частью графика, присвойте каждому узлу индекс в порядке топологической сортировки и используйте очередь приоритетов , чтобы решить, какой узел делать дальше.

0 голосов
/ 21 октября 2010

Самый простой способ - это метод, основанный на событиях. У каждого узла есть событие «onloaded», и все, что использует этот узел, может подписаться на это событие. После того, как узел обновился, он вызывает это событие и сообщает обо всем, что нужно знать.

Если ваши зависимости более сложны, то вам может понадобиться что-то еще, управляющее обновлениями, чтобы оптимизировать вещи. например, если A воздействует на B и C и C также на B (например, B = A + C и C = A + 1), тогда простой метод может обновить a, затем b, затем C и B снова. Это работает, но, очевидно, на одно обновление больше, чем требуется. Точный способ оптимизации обновлений будет зависеть от того, насколько сложным является ваше дерево зависимостей.

...