使用哪种多标准排序算法?

Dim*_*ima 13 sorting algorithm

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

谢谢.

Lou*_*cci 12

SORT BY A,B,C
Run Code Online (Sandbox Code Playgroud)

您在排序中的比较将:A,B,C从最高到最低的prioerity

  • 将元素1的A与元素2的A进行比较
    • 如果返回结果更大或更小
    • 否则比较B.
      • 如果返回结果更大或更小
      • 否则比较C返回结果

这可以通过简单的循环外推到A..n标准.

  • 对于标准列表中的每个标准
    • 将元素1的标准与元素2进行比较
      • 如果返回结果更大或更小
      • 否则继续//为清晰起见
  • 回报平等

以上都假设您的比较功能是比较(Element1,Element2)

  • @MuhammadUmer - 你想要*得分*算法而不是*排序*算法.因此,您希望根据您认为令人钦佩的内容为每个学生生成一个分数,然后您只需按该分数排序. (2认同)

ami*_*mit 6

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

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

  • 什么是'prio(i)'? (2认同)
  • @AlmogBaku这个想法基本上是为每个属性赋予一个数值,使得属性的重要性在数字本身中占主导地位.例如,如果有对象与3个属性,'A,B,C`使得`A`是最主要的和`C`是至少占主导地位,并且各自是在范围[0,9]可以给它的值`val(a)*100 + val(b)*10 + val(c)`.因此,如果你有一个'a = 3,b = 0,c = 9`的对象,你得到的数字是309.现在,你可以根据这个数字用常规排序算法对所有对象进行排序. (2认同)