通过节点找到最佳组合或路径的算法

标签 algorithm matlab tree combinations

由于本人对各种优化/树算法不是很精通,求助。

问题描述:

假设,给定一个大的排序节点序列,每个节点代表一个整数值 L。L 总是随着每个节点变大,并且没有节点具有相同的 L。
现在的目标是找到节点的最佳组合,其中后续节点的 L 值之间的差异最接近随 L 变化的给定整数值 M(L)。

示例:

所以,一开始我会有 L = 50 和 M = 100。接下来的节点有 L = 70,140,​​159,240,310。

首先,159 的值似乎最接近 L+M = 150,因此选择它作为正确的值。 然而,在下一步中,仍然给出 M=100,我们注意到 L+M = 259,这与 240 相去甚远。 如果我们现在返回并选择 L=140 的节点,然后是 240,则 M 值和 L 差异之间的整体匹配更强。即使在途中出现错误,该算法也应该能够找到最佳路径。

一些附加信息:

1) 起始节点不一定是最佳组合/路径的一部分,但如果需要,可以先开发一种算法,选择最佳起始候选者。
2) 节点的最佳组合遵循排序顺序而不是“跳回”-> 所以 1,3,5,7 是可能的,但不是 1,3,5,2,7。
3) 最后,所选节点的L值之间的差异在均方意义上应该最接近M值

非常感谢您的帮助!

最佳答案

如果我正确理解你的问题,你可以使用 Dijktras 算法:

https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm

http://www.mathworks.com/matlabcentral/fileexchange/20025-dijkstra-s-minimum-cost-path-algorithm

为此,您必须了解每个节点的邻居并创建一个邻接矩阵。通过我在上面发布的 Dijktras 算法的实现,您可以指定边权重。您可以以访问节点的 L + M 的方式指定边缘权重。因此,对于每个节点组合,您都有新节点的 L + M。这样,算法应该找到节点之间的最佳路径。 要获得所有边组合,您可以使用 Matlabs 图形函数:

http://se.mathworks.com/help/matlab/ref/graph.html

如果我正确理解你的问题,你需要一个无向图。 您可以使用以下命令访问所有边缘 G.创建图形后的边缘。

我知道这不是完美的答案,但我希望它对您有所帮助!

P.S. 请注意,Djikstras 算法只能处理正边权重。

关于通过节点找到最佳组合或路径的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37879693/

相关文章:

python - 使用合并排序合并和排序列表

java - 确定高尔夫球座顺序函数 Java

matlab - 在MATLAB中使用DWT(离散小波变换)从音频信号中提取特征后,输出应该是什么?

python - Numpy 和 matlab polyfit 结果差异

java - 查找树中所有叶子的位置(JAVA)

haskell - Haskell 中的欧拉项目#18

algorithm - 75% 的时间打印 true 的函数

java - 编写反向字符串 O(N) 时间复杂度和 O(N) 空间复杂度的程序

c - 如何将结构从 Matlab 代码转换为 C 代码(使用 Matlab 编译器)

c - 在树结构中加载字典并卸载它的问题 - C 编程