我正在寻找以下问题的数据模型方面的想法(以及正确的CS术语):
具有多行(A,B,C)的(水平)“时间线”包含“事件”(1,2,3)宽度在不同时间(绝对x位置或按延迟)的不同持续时间(宽度)。在之前的事件之后):
A 1111....222222
B 33333
------------------
T 0123456789ABCDEF(这些行只对重叠/并行“事件”的图形表示感兴趣,因此它们对于数据模型可能不是必需的。)
事件持续时间可能会有所不同,影响整个计时:
A 11....222222
B 33333+3
------------------
T 0123456789ABCDEF但是让事件2需要事件1和事件3来完成,所以时间应该是这样的:
A 11.... 222222
B 33333+3
------------------
T 0123456789ABCDEF(让我们忽略T=7的原始延迟现在丢失了。)
最初,我认为我必须有一些“弹性”同步元素,每行一个:
A 11....####222222
B 33333+3#
------------------
T 0123456789ABCDEF因此,最初的问题是如何对两个不同“行”中的同步元素进行建模和同步。但是,如上所述,这只是一个图形/并行表示的问题。
相反,同步是一种条件,可以“附加”到事件2,修改或确定其开始。如果一个事件“有”一个条件,它将没有绝对或相对的开始时间。它的开始只能在“链接”事件(1和3)的末尾确定。
那么,给定一些具有可变持续时间和绝对开始时间或相对于另一个事件结束的延迟的事件(列表),如何对条件“事件1和事件3结束”进行建模以确定“事件2”的开始?
(我将用JavaScript制作原型,并最终用C/C++实现,所以提供的任何示例代码都不应该使用高级数据类型或库。)
发布于 2016-09-06 02:27:29
您需要的是一个我称之为TimeFrame的对象。该对象将具有duration、link和type属性,其中link可以是精确的时间,也可以是指向另一个TimeFrame和type帐户的链接,用于某种link。例如,在已知时间开始的给定TimeFrame将以该时间作为其link属性,并且type将为TIME。链接到另一个TimeFrame的末尾的TimeFrame将以该另一个link作为其link属性,以START-END作为其type,依此类推。
使用link和type之间的组合,您还可以支持其他类型的链接,如START-START、END-START或END-END。
更新
此外,为了在TimeFrame结束和下一个事件的开始之间留出一定的时间间隔,可以添加属性lag,它表示事件之间的任何延迟。因此,例如,如果tf1和tf2是TimeFrames,使得tf2必须在5结束后启动tf1时间单位,则tf2的属性将是link = tf1、type = START-END、<代码>d35和<代码>d36。还要注意,lag可以是负的,这将把模型的表达能力扩展到广泛的关系范围。
发布于 2016-09-06 16:59:19
虽然@Leandro Caniglia很好地将我的问题重新表述为对象和属性,但本质上,我看到了两种选择:
另外:
link“2:1,3).
lag属性更实用。https://stackoverflow.com/questions/39161539
复制相似问题