2010-07-22 63 views
0

我正在编写一个例程,计算给定月份内某些福利的应计项目以及这些应计项目的支付日期。需要多个循环效率的帮助

有几件事要循环,我想知道如何提高循环结构(或使用替代品)的效率。

当我获得某种好处时,我必须弄清楚它是简单还是复杂。简单的意思是你每14天付清一次x。复杂意味着几件事情:

  • 您每隔x天付清一次,就可以定义x。
  • 这个数额取决于你是否每天工作(所以我需要查看这个人是否在一个周末工作,当他们正在度假时)
  • 在一年中的某些时段可以暂停福利例如学期假期,只在4月1日至8月23日之间)

我正在寻找某种模式,无论他们是在书本上还是在网站上。我不是要求任何人为我设计它。

我已经尝试了一些快捷键有几件事情:

  1. 我采取了节假日和序列化的日期转换成字符串,然后只需使用标准InString功能检查,如果数据是在那里
  2. 创建数组,我可以检查(在某些情况下,InString似乎运行得更快),而不是通过一个记录
  3. 循环使用简单的SQL语句(从tblHoliday选择ixHoliday其中tblHoliday.dtHoliday = dtInspected)

但是,我正在使用的表创建个别假日(它读取另一个系统)。这有助于今年的预订假期,但对复活节等没有帮助(除非我发了他们的 - 我有算法)。这个问题在未来几年会出现,我会做出简化的假设。

这是用来准备5年的预测。

我正在设计一个简要的设计器,但想知道关于构造这些模式的任何资源。

+1

对不起,我看到你试图给出很多细节,但你真的没有明确说明你想要加速的究竟是什么。也许如果你包含一些代码,它会有帮助吗? – mquander 2010-07-22 01:15:24

+0

我同意mquander。很难优化代码站点的看不见。 – Oorang 2010-07-22 04:31:42

回答

3

我不能在你的算法的剩余发表评论,因为它非常听起来特定领域,但肯定这

我采取了节假日和序列化的日期转换成字符串,然后只用一个标准的InString函数来检查数据是否存在

不是测试集合是否包含给定值的日期的最快/最简单/最有效的方法。任何现代语言/库(当然C#和Java)都有容器对象和结构,这些对象和结构提供了一些操作来测试一个对象是否包含在某个不包含在列表中的列表中,这些列表不包含在其中不会转化为序列化和字符串解析。

+0

我的想法确切 - 很好的答案。 @Paddy - 查看Hashtable(Java)和HashTable/Dictionary(Of DateTime)(.Net),以获得最佳存储假日的方式。 BitSet(Java)/ BitArray(.Net)的性能会更高,但如何使用需要额外的思考。 – 2010-07-22 01:27:15

+0

谢谢你们 - 将尝试通过优化。有一堆代码。如果剖析器没有带来任何喜悦,那么可以更好地工作,发布一些更高级别的伪代码。 – Paddy 2010-07-29 05:48:47