ipointer

给我最爱的宝宝
随笔 - 53, 文章 - 0, 评论 - 243, 引用 - 1
数据加载中……

图中跳转问题

问题描述:在有向图中,有唯一的开始节点和结束节点。图中节点的分叉和汇合有两种类型AND和XOR,分叉的时候为AND时,流程会流入下面所有的分支,为XOR只留向其中一条分支;汇合的时候,AND表示所有汇入的分支都已汇入流程才能继续,XOR表示一条汇入流程就继续。如果能从开始节点出发,正确的到达结束节点,那么这个流程就是正确的。
现在的问题是流程的节点之间需要跳转,即流程不按正常的流向进行,而是跳向指定的节点,先如何通过算法算出有向图中从某节点可以向的节点集合。

解决思路:
1、使用有向图的化简,有两种局部可以化简,从一个节点到另一个节点间没有分叉和汇合,那么这两个节点可以化简为直接连接;如果从一个节点到另一个节点间经过m个分叉和n个汇合,假设m>n,那么局部可以化简为m-n个分叉和一条直接的连线。将图化到最简,最后比较容易判断节点间是否可跳。
2、通过模拟运行的方式,将要跳出的节点的迁移从图中去掉,加上从跳出节点到跳入节点的迁移,模拟让流程运行一下。看流程是否正确。
存在的问题:方法一碰到及其复杂的流程无法处理,不能判断是否能化简;方法二,无法判断流程没有运行下去的原因,是上面有节点未完成,还是流程确实存在问题,无法运行下去。
请教各位有没有更好的办法,或是成型的算法来解决这个问题。

 

 

posted on 2006-04-03 11:02 栖息的熊 阅读(1140) 评论(3)  编辑 收藏

评论

#1楼    回复  引用    

这个在工作流中好象要用到哦........
2006-04-03 11:04 | tanyuqiong [未注册用户]

#2楼    回复  引用  查看    

前阵子作过一些工作流方面的东西.

有一些经验共享一下.

如果这个东西会使用到工作流方面,那么计算它可能的路径,我觉得没有什么必要, 为什么?
因为,流程只有两种状态:
完成和进行中的.

关于流程中的分支, 我想,在设计的时候可以考虑,但要考虑分支如何走, 这个不完全是工作流自身能完成的,必须借助于用户定义的其他条件来完成.

比如说:
a->b 但也可以到c,
这种情况,可以描述为a有两条路径.
Node A have two paths that could select.
这种情况,我归纳为分支,
但到底要走哪个分支,需要开发人员根据具体依赖此流程运行的对象,看对象在满足什么条件下,选择走哪个分支.

至于汇聚,这个是流程问题常见的问题:
汇聚有两种条件: 或 与
也就是满足所有条件情况下通过这个汇聚点.- 与的概念
其中一个满足 - 或的概念.
汇聚点活动本身就是一个特殊点.

比如node是一个基类,那么checkNode就是它的子类.
checkNode可以检查所有到此点的节点是否符合它的要求(这是比较具体分析,具体完成看个人这么作了)

我对工作流本身来说,归纳只有几种东西:
活动点
可以供选择的路径
规则(一般无法用图表示)
人员
状态(一般无法用图表示)
事件

完成一个工作需要考虑这些问题:
流程模板
尽量描述一个流程如何走.
状态
当有了模板,在对象运行的时候必须恢复状态, 因为流程走到某些步骤,会停下来, 等待下一个步骤的运行,当下一个步骤开始运行的时候,必须有结合模板恢复到一定的状态.
这里状态包括,人员信息.
规则
如何来描述规则
通常只有开发人员来定义某些规则, 通过工作流组建(或者叫系统)来规定流程走向.

事件
完成在工作流抛出的事件...



写到这里,欢迎交流哈.

2006-04-10 20:50 | king_astar      

#3楼 [楼主]   回复  引用  查看    

@king_astar
本文讨论的前提不是在正常工作流流转情况下,如果是严格按照流程定义,也不会出现这么复杂的有向图计算问题了。
现在是需要跳过某些活动节点,这样就需要决定用户想跳到的节点是不是会影响流程的数据完整性。
2008-07-20 00:40 | 栖息的熊      

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      


相关链接: