Я строю график, и у каждого шага есть вес / вес и позиция. В конце я хочу соединить все ребра, которые находятся на расстоянии эпсилон (по положению) друг от друга. Если я сделаю это, я хочу оставить только те, которые имеют меньшую стоимость / вес. Если я присоединяюсь к узлу при запуске, все ребра в более дорогой ветви становятся дешевле из-за разницы в стоимости. Как я могу распространить это на концах ветвей?
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}
,
Спасибо за любую помощь!
Задача ещё не решена.