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
Algorithm 使用哪种多准则排序算法?_Algorithm_Sorting - Fatal编程技术网

Algorithm 使用哪种多准则排序算法?

Algorithm 使用哪种多准则排序算法?,algorithm,sorting,Algorithm,Sorting,假设我们有一个项目列表,每个项目都有(未知)数量的属性。单属性排序是一种简单的排序算法。 问题是:如何按所有属性对相同的列表排序? 每个属性都有一个权重,因此我们可以先按最不重要的属性排序,然后使用稳定的排序算法等按更重要的属性排序,但这显然是不高效的 谢谢。创建一个函数f:A1xA2x..->R[即根据优先级和属性为每个元素指定一个值]。函数非常依赖于属性[例如,如果属性值在范围(0,9)内,则为每个属性i提供一个简单的值:Sigma[val(i)*10^prio(i)] 迭代列表,计算函数值

假设我们有一个项目列表,每个项目都有(未知)数量的属性。单属性排序是一种简单的排序算法。 问题是:如何按所有属性对相同的列表排序? 每个属性都有一个权重,因此我们可以先按最不重要的属性排序,然后使用稳定的排序算法等按更重要的属性排序,但这显然是不高效的


谢谢。

创建一个函数f:A1xA2x..->R[即根据优先级和属性为每个元素指定一个值]。函数非常依赖于属性[例如,如果属性值在范围(0,9)内,则为每个属性i提供一个简单的值:
Sigma[val(i)*10^prio(i)]


迭代列表,计算函数值,缓存此函数结果,并根据其进行排序。复杂性为O(nk+nlogn),其中k是属性数,n是元素数。

大多数排序算法可以将单个比较函数作为输入,该函数可以组合多个排序标准

最后,为了能够进行排序,所有元素之间必须有一个单一的排序关系(例如,a肯定在元素B之前,反之亦然,或者两者相等;该关系必须满足传递/对称/自反性质),因此,这意味着在给定有效比较函数的情况下,必须能够通过一次排序算法进行排序

SORT BY A,B,C
排序中的比较将: A、 B、C的优先级从高到低

  • 将元素1的A与元素2的A进行比较
    • 如果返回结果大于或小于
    • 其他比较B
      • 如果返回结果大于或小于
      • 否则比较C返回结果
这可以通过一个简单的循环外推到A..n标准

  • 对于标准列表中的每个标准
    • 将要素1的标准与要素2的标准进行比较
      • 如果返回结果大于或小于
      • 为清楚起见,请继续
  • 回报相等

以上两者都假设您的比较函数是Compare(Element1,Element2)

prio(i)
是第i个属性的优先级,在本例中,i=0是最不重要的。嘿!我刚刚看到了您的答案(2年后…)…我花了将近两天的时间试图理解它。你能解释一下算法吗?或者把我和一些参考资料联系起来吗?@AlmogBaku我目前正在旅行。请在10天内重新编译以提醒我,我会更好地解释。@AlmogBaku这个想法基本上是给每个属性指定一个数值,这样属性的重要性就是dom数字本身为inant。例如,如果对象有3个属性,
a、b、c
,使得
a
最占优势,
c
最不占优势,并且每个属性都在[0,9]范围内,则可以给它一个值
val(a)*100+val(b)*10+val(c)
。因此,如果您有一个a=3、b=0、c=9的对象,您将得到一个309。现在,您可以使用常规排序算法根据该数字对所有对象进行排序。这也是O(knogn),其中k是属性的数量,n是元素的数量,与简单地排序k次的范围相同。问题是,一个标准A的权重比其他任何标准都大。假设学生擅长数学,我希望有人加入我的机器人团队。但学生们沉迷于道德、专业、编码,有毒品问题和更多,但因为数学是开始的重要因素,阿尔戈会建议最好的学生是这个,至少他会在顶部students@MuhammadUmer-你需要的是评分算法,而不是排序算法。因此,你需要根据你认为令人钦佩的内容为每个学生生成一个分数,然后你只需要按照scor排序e、 这也是O(knlogn)最坏情况,[k是属性数,n是元素数]因为您需要在每次比较中检查k个元素。与使用稳定算法排序k次的范围相同。为true,性能可能会比排序k次更好,因为您不需要对所有元素进行所有k次比较,只需指出它将渐近相同[至少对于最坏情况分析]