【发布时间】:2009-01-06 15:19:50
【问题描述】:
假设我有一个列表,我希望对它进行排列,以便在其连续元素上运行的某个函数的总和最小。
例如,考虑列表 { 1, 2, 3, 4 } 和 sum a^b 的连续对 (a,b) 在整个列表中。 IE。 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 可以是对任意数量的连续元素进行操作的任何函数。
这种算法有名称吗?是否有既定的实现方法?
编辑:我已经改写了这个问题,因为我错误地将其标记为排序问题。正如所指出的,这更像是一个优化问题。
【问题讨论】:
-
+ 1 表示非常晦涩的问题。我无法想象有答案,但会回来看看。
-
我是不是看错了什么? 1^2 + 2^3 + 3^4 = 90,不是 91...
-
不,你是对的。现在是 90 岁,但这并不是一个真正重要的问题 ;)
-
@Binary Worrier:我(不幸地)想问的是:当您需要考虑整个列表而不是逐个比较元素时,如何对列表进行排序? @balabaster:对。谢谢。
-
我不认为这是一个排序的事情 - 这是一个优化的事情。您正在对列表的所有排列优化一个函数。
标签: algorithm language-agnostic optimization