作者leslieha (懂的付出才会幸福)
看板Prob_Solve
标题[问题] 时间比较
时间Thu Sep 6 21:51:27 2012
问题
有n个排程
每个排程有 start time(HH:MM:SS) 跟 interval
例如
排程一
start_time = 0:01:30
interval = 00:00:30
那 0:00:00 0:00:30 0:01:00 0:01:30 ... 23:59:30 皆属於排程一
排程二
start_time = 0:00:10
interval = 3:30:00
那 0:00:10 3:30:10 7:00:10 10:30:10 14:00:10 ... 21:30:10 皆属於排程二
虽然21:30:10 + 3:30:00 = 25:00:10 % 24:00:00 = 1:00:10
但 超过一天应该算用 0:00:10
要检查各个排程会不会相冲途
-----------------------------------------------------------
目前想到的解法
一天有 60x60x24 = 86400秒
把排程一想成
start_time = 90
interval = 30
0 30 60 90 ... 86370 皆属於排程一
A1 A2 A3 A4 An
把排程二想成
start_time = 10
interval = 12600
那 10 12610 25210 ... 77410 皆属於排程二
B1 B2 B3 Bn
要逐一比较 A1~An B1~Bn有无相等
先找 30 跟 12600的最小公倍数 = 12600
就比较
90+(30x0) ~ 90+(30x420) 是否有跟
10+(12600x0) ~ 10+(12600x1) 相等
---------------------------------------------------------------------
本来有想另一个
开一个大array
可以存86400 bit (2700-btye)
把每一排程所占据的时间设起来 (set to 1)
但这样无法得知相冲途的排程是那两个
故只好两两作比较
请问
是否有其它解决办法?
或提供想法
谢谢
--
用程式语言c解
--
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 182.235.124.249
1F:推 flere:如果是我的话我会开一个86400的vector,有排程就开始塞 09/06 22:08
2F:→ flere:最後从0看到86400,底下超过1个的就是有冲突,同时也知道是哪 09/06 22:09
3F:→ flere:几个是冲突的排程 09/06 22:09
4F:→ flere:有点花记忆体就是了XD 09/06 22:10
5F:→ yauhh:你的问题说"冲突",是指同时只能执行一件行程吗? 09/06 22:35
6F:→ leslieha:@yauhh 是的 同一秒 只能由一个排程所占据 09/06 22:48
7F:推 DJWS:有数学解法 请查中国余数定理 09/07 05:57
※ leslieha:转录至看板 Programming 09/07 14:18