簡體   English   中英

使用哪種多標准排序算法?

[英]Which Multiple-Criteria Sorting algorithm to use?

讓我們說我們有項目列表,每個項目都有(未知)屬性數量。 按單個屬性排序是一種簡單的排序算法。 問題是:如何按所有屬性對相同的列表排序進行排序? 每個屬性都有一個權重,所以我們可以先用最不重要的屬性排序,然后用更穩定的排序算法等更重要的屬性排序,但這顯然效率不高。

謝謝。

SORT BY A,B,C

您在排序中的比較將:A,B,C從最高到最低的prioerity

  • 將元素1的A與元素2的A進行比較
    • 如果返回結果更大或更小
    • 否則比較B.
      • 如果返回結果更大或更小
      • 否則比較C返回結果

這可以通過簡單的循環外推到A..n標准。

  • 對於標准列表中的每個標准
    • 將元素1的標准與元素2進行比較
      • 如果返回結果更大或更小
      • 否則繼續//為清晰起見
  • 回報平等

以上都假設您的比較功能是比較(Element1,Element2)

創建函數f:A1xA2x ..-> R [即根據優先級和屬性為每個元素賦值]。 該函數非常依賴於屬性[例如,如果屬性值在范圍(0,9)中,給出的值很簡單: Sigma[val(i)*10^prio(i)] for each attribute i

迭代列表,計算函數值,並緩存此函數結果,並根據它進行排序。 復雜度將是O(nk + nlogn),其中k是屬性的數量,n是元素的數量。

大多數排序算法可以將單個比較函數作為輸入,可以組合多個排序標准。

最后,為了能夠排序,所有元素之間必須存在單個排序關系(例如,A肯定在元素B之前,反之亦然,或者兩者是等價的;關系必須滿足傳遞性/對稱/反身屬性),這意味着在給定有效比較函數的情況下,必須能夠通過排序算法的一次傳遞進行排序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM