Предполагая, что последовательность должна начинаться с данных со значением Addition = 0.0.Мы можем найти, что, найдя предыдущее значение для каждого из данных, используя
PreviousValue = Addition-Result
, например,
[0] --> { Addition = 0.0, Result = 60.0, PreviousValue = 60.0 }
[1] --> { Addition = -10.0, Result = 50.0, PreviousValue = 60.0 }
[2] --> { Addition = 5.0, Result = 65.0, PreviousValue = 60.0 }
[3] --> { Addition = 30.0, Result = 80.0, PreviousValue = 50.0 }
[4] --> { Addition = -20.0, Result = 60.0, PreviousValue = 80.0 }
И затем мы можем O (n lg n) отсортировать этот список по его предыдущему значению.как следует
[3] --> { Addition = 30.0, Result = 80.0, PreviousValue = 50.0 }
[0] --> { Addition = 0.0, Result = 60.0, PreviousValue = 60.0 }
[1] --> { Addition = -10.0, Result = 50.0, PreviousValue = 60.0 }
[2] --> { Addition = 5.0, Result = 65.0, PreviousValue = 60.0 }
[4] --> { Addition = -20.0, Result = 60.0, PreviousValue = 80.0 }
После этого, начиная с начального узла (данные со значением Addition = 0.0), мы можем использовать O (lg n) двоичный поиск в отсортированном списке, чтобы найти данные для следующей последовательности, результатравно текущему предыдущему значениюСледовательно, эта проблема может быть решена с O (n + 2 n lg n) сложностью