Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 基于3个变量的列表中的最佳项目_Sorting - Fatal编程技术网

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

Sorting 基于3个变量的列表中的最佳项目,sorting,Sorting,假设我有以下一系列的项目 项目位置 项目大小 项目长度 位置越小越好,但长度和尺寸越大越好 我想找到位置最小、长度和尺寸最大的物品 我可以简单地为每个项目计算一个值,例如(总位置)*大小*长度,然后找到值最大的项目吗?计算百分比会更好吗?或者添加第四项,即“goodness”的计算值,然后按该项进行排序,或者如果您选择的语言允许,则覆盖排序的比较运算符以使用公式,然后进行排序。请注意,后一种方法意味着确定更好的功能将在列表中的每个项目上应用多次,但其优点是易于进行程序比较(例如,首先查看位置

假设我有以下一系列的项目

  • 项目位置
  • 项目大小
  • 项目长度
位置越小越好,但长度和尺寸越大越好

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


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

或者添加第四项,即“goodness”的计算值,然后按该项进行排序,或者如果您选择的语言允许,则覆盖排序的比较运算符以使用公式,然后进行排序。请注意,后一种方法意味着确定更好的功能将在列表中的每个项目上应用多次,但其优点是易于进行程序比较(例如,首先查看位置,如果位置相等,则查看大小,然后查看长度)-尽管如此,这也可以表示为一个公式,产生一个单独的数字进行排序

至于您提出的公式,请注意,每个项目都有相同的数值权重,即使它们是在完全不相关的刻度上测量的。此外,位置=总计、大小=0或长度=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都存在,因此您可以从本质上指定每个项目的相对重要性。如果所有ATEM都同样重要,那么它们可能都是1,在这种情况下,您可以完全忽略它们


不过,正如前面所回答的,您还可以选择无数种其他方式来编写代码。作为一个随机的例子,对于大尺寸,长度可能变得不那么重要;这些可能性需要更多的思考,这样一个模糊的陈述到底意味着什么。

我认为没有人能告诉你对这些可能性进行排名的最佳方式是什么。根据三个标准,你可以对物品进行无限的排名。对你来说最重要的是什么——位置、长度、大小,所有这三个,一些组合?这三个参数会采用不同的值吗,例如大小为100-10000,位置为1-5?您的问题的答案将由以下问题决定。请注意,我的比例公式假设每个项目的最小值为零。我非常感谢您在回答中的想法。