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

StackOverflow https://stackoverflow.com/questions/3979825

  •  09-10-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top