在一个已知逻辑关系(包括先后关系、同时开始、同时结束)的作业流程图中,并且知道每一个结点的工作时长。如果求出一张合理的结点开始时间表?
首先,确认流程图不存在逻辑问题。1,不存在逻辑回路,否则会导致作业陷入循环无法跳出。2,不存在分离图,即不存在不连通的情况,否则时间无法保证只有一个开始点。
在此前提下,我们利用面向对象的思想,去思考开始时间的确定。对于一个工作A来说,A的开始时间受到其前置工作和同等关系(同时开始、同时结束),三种关系的工作影响。这种思路是从A的入口处进行思考。另外一个角度,就是从出口处去思考,即A的开始时间改动之后,会影响与其相关的工作,如后置工作、同时开始工作和同时结束工作。
因此,用后面的思维,则当前只用考虑当前的工作队后面工作的影响,而不是去考虑当前的工作被谁影响。
构造算法的思路就是传播的机制,只要当前点的时间有变动,则必然影响与其相关的点的时间的变动。当所有的震动都停止,那么就可以得出合理的时间。
为什么能够保证此种震荡能够停止,而不是死循环?
因为,我们已经保证了图中不存在回路,因此不会有一种传播途径是走不到头的。
在此基础上,如果再加上一个特殊约束,即人为的对某一个工作的开始时间进行强制设置。则该人为时间移动是要在该工作最早开始时间之后,即可能因为某种资源约束,将工作时间进行强制后延。
在上述情况中,我们只需要在每一个工作中设置一个“最早开始时间”属性即可。因为所有工作都是可以通过无限延长开始时间来解决资源冲突的问题的。只有在整个工程的完工时间受到限制,,或者某一个工作有完工时间限制的情况下,才需要添加最晚结束时间属性。