我是世界上初学者的旋转算法。我需要增强现有的用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中编写此算法。