假设我有一个列表,我希望它被安排,以便在其连续元素上运行的某个函数的总和最小.
例如,考虑整个列表中连续对的列表{ 1, 2, 3, 4 }
和总和.即..通过检查,当列表被安排为时,达到最小总和.a^b
(a,b)
1^2 + 2^3 + 3^4 = 90
{ 2, 3, 1, 4 } => (2^3 + 3^1 + 1^4 = 12
注意,总和不是循环的(即,我没有考虑last^first
),并且顺序很重要(2^3 != 3^2)
,也a^b
可以是在任意数量的连续元素上运行的任何函数.
这样的算法是否有名称,是否有实现它的既定方法?
编辑:我已经重新编写了问题,因为我错误地将此标记为排序问题.正如所指出的,这更像是一个优化问题.
"排序"通常使用二进制比较运算符("小于或等于")来定义.您正在寻找的是列表的"最佳"排列,其中"最佳"被定义为在整个列表上定义的标准(而"特定函数"在邻居元素上定义,整个列表中的总和)使它成为一个全球财产).
如果我理解正确,"旅行推销员"就是你问题的一个例子,所以无论如何你的问题都是NP-complete ;-)