具有倍数因子的排名算法

时间:2017-06-05 23:10:46

标签: algorithm math ranking

所以我想根据倍数因素对项目进行排名,但有些因素比其他因素更重要。

具体而言,我列出了所有具有以下属性的产品:

  • 价格
  • 重量(千克)
  • 构建时间(以分钟为单位)
  • 尺寸(厘米)

每个属性都有不同的比例,我知道min&最大范围。

例如价格介于10到200之间,而重量介于1.2和3.4等之间

我想优先考虑尺寸,然后是建造时间,重量,最后是价格。

但是,我想确保无论是建造时间,重量还是价格值,大小应该是首要的事情。

例如:

[{
  price: 320,
  size: 10,
  weight: 0.4
  time: 4
},
{
  price: 230,
  size: 5,
  weight: 1.2
  time: 23
},
{
  price: 230,
  size: 10,
  weight: 1.2
  time: 23
}]

应该导致:

[{
  price: 230,
  size: 5,             // the lowest the better
  weight: 1.2
  time: 23
},
{
  price: 320,          // the higher the better
  size: 10,
  weight: 0.4
  time: 4
},
{
  price: 230,
  size: 10,
  weight: 1.2
  time: 23
}]

我不擅长数学,但我真的不知道从哪里开始。

我正在考虑将相同范围内的每个值进行缩放(例如从0到100),然后将结果范围值应用于一个因子,然后将它们全部添加到排序之类或之类的内容。

任何想法。

2 个答案:

答案 0 :(得分:2)

看起来您希望按递增顺序按大小排序,然后如果两个对象具有相同的大小,则按时间递增顺序,然后按重量递增顺序,然后按降低中的价格订单(根据您的示例中的评论)。

如果您使用的是Python之类的语言,只需将四个值放入元组中,其中的项目将按降序排列,其值将替换为负数。对于每个项目,您的密钥是

(size, time, weight, -price)

然后Python本身会对这些元组进行适当的排序 - 它内置于语言中。这是最简单的事情。

如果您使用的是没有排序元组的语言,或者由于某种原因您确实希望该键是浮点值,则可以执行此操作。对于每个因素,请查看已知的最小值和最大值。使用它们将该因子缩放到1到10之间的数字,可能包括1但不包括10.确保1与要排序的值一起使用。这可以通过

完成
scale1to10 = (value - min) / (max + 1 - min) * 9 + 1

增加因子,

scale1to10 = (max - value) / (max + 1 - min) * 9 + 1

减少因素。然后将所有因素合并为一个" 4位"数字,如

scale = scalesize * 1000 + scaletime * 100 + scaleweight * 10 + scaleprice

请注意,最重要的因素是乘以10的最高功率,而最低的则没有乘数。

答案 1 :(得分:0)

您的排序功能应该能够传递比较功能。传递一个比较函数,按顺序测试每个字段,如果到目前为止所有内容相等,则仅移动到下一个字段。在大多数语言中,这并不难。我的猜测(基于您的发布历史记录)是您正在使用PHP,因此http://www.the-art-of-web.com/php/sortarray/可能是如何做到这一点的最佳指南。