2015-09-11 58 views
1

我有一組輸入日誌記錄,它們具有屬性,記錄,時間和權重。按時間和權重排序記錄

我需要一個輸出,其中前5條記錄應該基於時間,下一個5條記錄應該根據權重進行排序。不允許重複。

java中是否存在數據結構或解決這類問題的任何類型的算法。

輸入

Record Time  Weightage 

R1  11:40:52 1 
R2  11:39:23 2 
R3  11:39:21 2 
R4  11:38:44 5 
R5  11:37:00 3 
R6  11:36:12 3 
R7  11:35:12 1 
R8  11:34:00 1 
R9  11:33:04 5 
R10  11:32:02 4 
R11  11:31:44 3 
R12  11:30:12 2 
R13  11:29:02 5 
R14  11:28:28 6 
R15  11:27:18 4 
R16  11:26:19 6 
R17  11:25:12 7 
R18  11:24:03 5 
R19  11:23:03 4 
R20  11:22:05 4 
R21  11:21:06 6 
R22  11:20:00 4 
R23  11:19:00 9 

輸出

Record Time  Weightage 
R1  11:40:52 1 
R2  11:39:23 2 
R3  11:39:21 2 
R4  11:38:44 5 
R5  11:37:00 3 
R23  11:19:00 9 
R17  11:25:12 7 
R14  11:28:28 6 
R16  11:26:19 6 
R21  11:21:06 6 
R6  11:36:12 3 
R7  11:35:12 1 
R8  11:34:00 1 
R9  11:33:04 5 
R10  11:32:02 4 
R13  11:29:02 5 
R18  11:24:03 5 
R15  11:27:18 4 
R19  11:23:03 4 
R20  11:22:05 4 
R11  11:31:44 3 
R12  11:30:12 2 
R22  11:20:00 4 
+6

按時間排序,先選5。按重量排序,先挑選尚未被選中的5個。 –

回答

0

依我之見,該列表由time排序。
將另一個屬性添加到列表中,picked(說)作爲布爾值,並且全部設置爲false。 如果空間不是問題,請複製數據並根據weight進行分類。

現在,從list1(時間排序)中挑選第1個5並設置他們的picked attr。爲真。現在,從list2開始挑選​​,並檢查您正在挑選的記錄,如果它的picked值爲false或不在list1中。 (如果它的true,請不要選這個)。當你從這個列表中選擇5時,從列表1中的第6個項目繼續,同時從列表2中檢索其picked屬性。要檢查picked值,請使用record_no屬性。

0

簡單的方法:

  • 排序Time
  • 切片的第五元素之後。保留第一個子數組。
  • 排序Weightage
  • 串聯

如果數據集確實是巨大的(但因爲它在內存適合它不能是巨大的)第二子陣列,它可能是有意義的過度優化這個。
從列表中獲取最多5個元素將在O(n)中運行,而將O(n log(n))分類爲整個事件。然後,排序5個元素在不變的時間內運行,所以它可以全部減少到O(n)