我是世界上初學者的旋轉算法。我需要增強現有的用Java編寫的備份算法,該算法負責備份數據庫並對其進行存檔。該算法的一個重要方面是它讀取一個INI文件,您可以在其中指定用戶想要備份其數據庫的星期幾。java替代備份旋轉算法
E.g.像這樣: ScheduledWeekDaysAct=MON, TUE, WED, THU, FRI
或 ScheduledWeekDaysAct=TUE, FRI
因此,旋轉算法必須考慮到備份能夠在幾天的所有組合來創建帳戶。這意味着我不能很容易地使用祖父 - 父子算法,我已經實現了。因爲我編碼期望在一年的每一天都創建備份,並且不會與備份代碼兼容。
對於這個問題有一個算法思想,一種不是太複雜預期的行爲,這是以下幾點:
- 第10(十)最近的備份應始終保持。
- 保留最近的十個之後,其餘的較舊的應該變薄。不是一片一片,而是靠日期。第10次最早的備份的日期是指定的參考日期,在進行新的備份時將比較舊的備份。較舊的備份應保留並細化,如下所示。 第10最舊的備份後,有應保持:
- 3或4的備份,其是最新上之前3-4周,
- 11個每月備份,
- 1每年備份。
我不能使用系統日期&時間,我不得不解析備份的文件名。但最終會提供備份的日期。
我的方法: 因爲我不知道日程安排,哪天備份會發生,所以我必須使用間隔,週期和日期條帶。我需要在第10次備份後確定備份的相對年齡。此相對年齡定義爲實際參考日期(備份的第10個最早日期)與第10次保存之前的備份日期之間的差異。
我可以做到這一點,我讀取文件名,解析日期String
,得到Date
對象從這些解析的字符串。我可以把它們放到Map<Path, Date>
(後來我還需要Set
沒有重複的功能來擺脫相同的日期[可能有幾個數據庫具有相同的日期,但名稱不同])。 我總是可以確定第10次保存的日期,所以我可以得到參考Date
的對象。因此,我總是可以計算備份的相對年齡。 備份的相對年齡是獨一無二的,我可以用Date
存儲一個相對年齡,從中計算它的TreeMap<Integer, Date>
。
我想,我需要使用相對年齡範圍(keySet()
)。如果我可以確定相對年齡範圍內的最小和最大相對年齡,則可以過濾相對年齡引用的對象。 (if relativeAge < 7
,if relativeAge >= 7 & relativeAge < 14
等。)但我也必須旋轉Dates
...
我不能圍繞這個包裹我的頭,任何想法都讚賞。謝謝!
編輯1:
從本質上講,問題歸結爲以下幾點:
我有一個整數列表。 (相對年齡列表):[1,3,5,8,10,12,15,17,19,22,24,26 ...]
我必須創建下限和上限以形成組這些整數。 的整數,A相對年齡可以是0 336 & 364,並且可以是大於364之間& 7或7 & 14,14 & 21,21 & 28,28 & 56,56 & 84 ...我不得不找到分別落入這些範圍的整數。在找到這些整數組(一個組可能持有0個,1個或多個整數)之後,我必須在一定範圍內採用最高/最舊的相對年齡組。如果範圍在364以上,我將不得不保留最低限度的保存,以防止每年累計保存。 我必須在上述範圍內收集這些最高的相對年齡,這些將形成一組相對年齡。
這些相對年齡段明確引用了備份文件的日期,所以現在我將知道根據它的日期/文件應該在實際旋轉中保留。
我可以解釋給定輪換中最大相對年齡(maxRelAge)的概念,即最早備份相對於實際參考日期的年齡。
我不必檢查超過最大相對年齡的整數範圍。算法運行1年後,算法將全面運行。
但我仍然不知道如何在Java中編寫此算法。