Я надеюсь, что один из вас, ребята, сможет это выяснить.
У меня есть массив, содержащий множество объектов.Каждый объект в массиве содержит две вещи:
- Значение, которое может измениться.
- Список из нуля или более других объектов в моем массиве, который, если их значения меняются, тогда этот объект должен пересчитать его значение.Это может происходить многократно от объекта к объекту, но нет циклических зависимостей.
Я считаю, что это называется сетью (как дерево, но с несколькими родителями). В частности, это направленный ациклический граф.
Что я сейчас делаю, так это то, что: когда я изменяю значение объекта, я проверяю каждый объект в массиве, чтобы увидеть, зависит ли он от объекта, который яизменилось.Если это так, то я говорю этому дочернему объекту пересчитать.Затем потомок таким же образом сообщает своим потомкам и т. Д.
Это работает (значения обновляются правильно), но очень медленно, когда вносятся изменения, которые каскадируются широко и глубоко.Это потому, что если у объекта есть много родителей, которые меняются, он снова пересчитывает для каждого, а также говорит, что его дети пересчитывают каждый раз, поэтому они получают несколько сообщений только от одного родителя.Это быстро увеличивается, пока многие объекты не пересчитывают десятки раз.
Какой лучший способ пересчитать каждый объект только один раз, после того как все его родители пересчитали?
Спасибо за вашу помощь.