基于3个变量的列表中的最佳项目

时间:2009-12-09 22:46:08

标签: sorting

说我有很多项目的以下内容。

  • 项目位置
  • 项目大小
  • 项目长度

较小的位置更好,但更大的长度和尺寸更好。

我想找到位置最小,长度和尺寸最大的物品。

我可以简单地计算每个项目的(总 - 位置)*大小*长度等值,然后找到值最大的项目吗?解决百分比会更好吗?

1 个答案:

答案 0 :(得分:0)

要么添加第四项,这是您计算出的'善良'的值,并按照该OR排序(如果您选择的语言允许),覆盖比较运算符以进行排序以使用您的公式然后排序。请注意,后一种方法意味着确定更好性的函数将在列表中的每个项目中应用多次,但它具有易于使程序性比较成为可能的优点(例如,首先查看位置,然后如果相等,看看大小然后长度) - 尽管这也可以表示为一个公式,导致一个数字排序。

对于您提出的公式,请注意每个项目具有相同的数字权重,即使它们是在完全不相关的尺度上进行测量的。此外,position = total,size = 0或length = 0的所有项目评估为零。

如果您想要的是位置是最重要的,但是给定相同的位置,大小是下一个最重要的东西,但是给定相同的位置和大小,然后按长度计算,这可以被制定为单个数字作为如下:

(P-position)*(S*L) + size*L + length

其中L是大于最大可能长度值的幻数,S是大于最大可能大小值的数字,P是大于最大可能位置值的数字。

另一方面,如果你想要的是一些比例,其中的项目具有相关的重要性,一个可能的公式如下:

((P-position)/P)*pScale * (size/S)*sScale * (length/L)*lScale

在这个版本中,P,S和L的定义与以前大致相同 - 但是P,S和L的值以兼容的方式有意义,例如非常接近预期的最大值,这是非常重要的。 pScale,sScale和lScale就在那里,因此您基本上可以指定每个项目的相对重要性。如果所有的主干都同样重要,那么它们都可以是1,在这种情况下你可以完全抛弃它们。

如前所述,您可以选择对此进行编码的其他方式可能无限多。作为一个随机的例子,对于大尺寸,长度可能变得不那么重要;这些可能性需要进一步考虑这种模糊陈述的实际含义。