读书人

提供一算法,

发布时间: 2011-12-25 23:21:20 作者: rapoo

提供一算法,!
在出入有:入和出.
入有 :起~迄
出也有:起~迄.
需要入和出的票行合,即在入中去除出的.
有如下情:
一:
合前:
日 期 起 迄
入 11/1 1 10
入 11/2 11 15
入 11/3 16 20
合後:
起 迄
1 10 10
11 15 5
16 20 5
二:
合前:
日 期 起 迄
入 11/1 1 10
入 11/2 11 15
入 11/3 16 20
出 11/4 1 10
合後:
起 迄
11 15 5
16 20 5
三:
合前:
日 期 起 迄
入 11/1 1 10
入 11/2 11 15


入 11/3 16 20
出 11/4 8 13
合後:
起 迄
1 7 7
14 15 2
16 20 5
四:
合前:
日 期 起 迄
入 11/1 1 10
入 11/2 11 15
入 11/3 16 20
出 11/4 8 17
合後:
起 迄
1 7 7
18 20 3
五:
日 期 起 迄
入 11/1 1 10
入 11/2 11 15
入 11/3 16 20
出 11/4 8 9


合後:
起 迄
1 7 7
10 10 1
18 20 3
11 15 5
16 20 5
等等.提供一算法,!

[解决办法]
能改表结构吗?

日期 号
入 11/1 1
入 11/1 2
入 11/1 3
....
入 11/1 10
出 11/2 1
出 11/2 2
....

表面上看,这增大了数据量,但是插入,更新,还有合并时候的查询,其业务逻辑都是最简单,同时也是最符合实际情况的。我估计你们只是最后合并后的那张类似报表的东西里面需要起迄号,而前面那张流水账的表,并不是必须的(即使UI上用户输入的是起迄号,insert/update也只是个循环)

否则你们的设计虽然能大量节约数据量,但是却可能导致超大量的计算问题,实际性价比应该更低
比如
入 11/1 1 10
出 11/2 10 10
入 11/2 11 15
出 11/3 4 5
出 11/4 1 1
出 11/5 12 13
出 11/6 2 3
......

而且,即使能想出算法来,万一业务逻辑稍有变更,可能又要推翻。

你现有表结构的算法正在思考中...

读书人网 >J2SE开发

热点推荐