Соедините ребра в графе и пересчитайте стоимость ветки

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

  1   Position graph       Pos  Cost
/ \                        1   0
2  2.2                      2   2
|    \                     2.2  1
5     \                     5   cost(2)+1 = 3
7                    7   cost(2.2)+2.5 = 3.5

Здесь узлы в положении 2 и 2.2 < 1 расстояние друг от друга, поэтому они должны быть соединены. Узлы на 7 и 5 должны пересчитать свою стоимость.
Взяв более дешевый узел, стоимость за 2' сейчас 1. Однако стоимость 5 изменений cost(5)+cost(2.2)-cost(2) = 2, И новый график:

  1          Pos  Cost
|           1    0
2.2         2.2   1
/ \          5    2
5   7         7   3.5

Мои вопросы следующие:
Как лучше сохранить дочерние элементы узла? (так как число варьируется, я не знаю хорошего решения).
Как рассчитать минимальные затраты для каждой позиции в соединенных путях?

На данный момент у меня есть график в другом направлении (сохранение родителя). Таким образом, я не имею ни малейшего представления о том, как я мог бы эффективно объединиться, так как это вызвало бы огромные рекурсии Это написано в C++ как struct{int parent; double pos; double cost},

Спасибо за любую помощь!

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]