工作流引擎设计中的遍历算法的问题

图的广度遍历实验报 有流程图 本演示程序用Visual C++编写,从键盘输入,以用户指定的结点为起点,实现无向图广度遍历,并打印输出广度遍历结点访问顺序。 1、输入的形式和输入值的范围:非负整数。 2、输入顶点的数量限制:最大40个 3、输出的形式: 根据用户的选择输出所创建邻接表的内容,广度遍历出结果。将点的次序打印出来。 4、程序所能达到的功能: 根据用户所输入的顶点数、边数以及相对的顶点建立相应的邻接表,再根据邻接表对图进行广度遍历,并打印输出结果。 立即下载
今天在普元工作流的论坛上面,有一个帖子,上面有一个流程图,如下

 

 

 

   这个流程图的拓扑结构,如果采用图形深度优先遍历算法来遍历一遍,遍历顺序的部分应该是 

   开始活动-> A-1=>B-4=>E-5=>NEXT

 

   这种运行顺序在实际流程运行过程中显然有问题,实际运行过程中从流程A-1节点分支到后面的四个并行节点,这四个并行节点应该是同时被引擎触发,但是如果采用深度优先遍历算法,算法是从第一个分支一直往最深的支路上面遍历,直到走到该分支的最后一个节点,然后才往回复到最初分支的第二个分支支路上面,继续往这个分支的最深处遍历,如此往复,遍历完所有节点,这样的遍历过程显然和流程实际运行过程是不吻合的

 

   那么如果用广度优先遍历算法呢? 似乎也有问题

 

   开始活动->A-1 然后 四个分支节点全部依次被访问,注意,广度优先遍历算法是和深入优先算法相对应,即从图的起点开始遍历,遍历的顺序是先把同一层次的所有并行点都依次访问,然后再访问第二层次的所有并行点,这样的话,访问顺序就是  开始活动->A-1->B-4->C-3->D-未完成->F-2->E-5->NEXT  ,这个遍历顺序也和实际运行过程不相符合,所以流程引擎在应用图形遍历算法的时候,必须对算法进行自定义的改造,才能够让流程引擎在遍历流程的过程中,做到符合流程的实际业务运行过程。。。。。

 

  因此我在05年设计JWFD工作流引擎的时候,就采用对广度优先算法进行改造的方法,实现了一个很初级的基于遍历算法的引擎,现在我手上的代码不是当时的代码,因为最初的设计思路好像和这个伪代码不一样,05年的时候,苏州大学一个硕士研究生做毕业设计,用到JWFD,他在测试过程中,发现算法在并行汇聚的时候会出问题,然后我们两个就这个问题,进行多很多次的沟通和交流,后来在他的协助下,把这个算法又修改了,才解决了并行汇聚的问题,但是当时的修改过程没有做文字的记录,所以为什么要这样修改,怎么修改的过程就没有记录下来,很可惜。。。

 

          DFS伪码描述算法--修改版本
       
          前驱路由点: 该点是N个节点的source点(N>1)

          分支属性判断: 是单节点支路还是多节点串行支路

          后驱路由点: 该点有N个节点的target点(N>1)

       在返回访问序列的时候,当遇到有支路的时候,整个该支路用符号Nx表示,遍历的时候把这一路做为一个单节点来处理
       在最后返回序列的时候,用支路的串行序列代替Nx,返回完整的访问序列

       这个算法基本上可以解决分支和发散,与汇聚的流程图遍历问题

         for(int i =0  i <  当前节点的邻接点个数){

          if (该点是个前驱路由点) {
              if (该点没有被访问过) {
                  设置访问次数加(从递归方法中获得的循环控制变量)
                  返回
              }
              else if( 如果已经访问过,但是访问次数<它的前驱节点总数){
                   设置访问次数加(从递归方法中获得的循环控制变量+1)
                   返回
              }
              else if(总计访问次数=它的前驱节点总数){
                  递归进入下一个节点的访问(把大循环体的,循环变量带进去递归方法中)
              }

              }
              else if(如果是普通节点){
                  设置访问标志
                  递归进入下一个节点的访问(把大循环体的,循环变量带进去递归方法中)
              }
              }
       }

 

  最初的引擎算法DFS其实还比现在的这个版本的更加自动化,因为当时出发点是设计一个运行后不需要人工干预的引擎,所以整个遍历的过程都是全自动的,但是后来有新的需求,要求加入人工触发的节点,所以慢慢的,这个自动引擎就变成半自动,后来彻底抛弃自动的过程了。。。。。做产品,哪怕是开源的,如果要考虑来自各种用户的需求,那么有一个现象就是:你最初的设计理念会逐渐的走样,逐渐的变成连你自己都无法理解的模型。。。


POSS-NH2:氨基化笼型聚半倍硅氧烷的合成与应用探索 本文详细介绍了氨基化笼型聚半倍硅氧烷(POSS-NH2)的合成方法与应用。通过水解缩合与官能团转化两种主流路线,可制备出这种关键的纳米增强材料。其核心价值在于通过表面的氨基与树脂基体形成化学键合,从而显著提升复合材料的热稳定性和机械性能。文章以环氧树脂改性为例,展示了POSS-NH2在航空航天、电子封装等高性能领域的应用潜力。 阅读详情

相关推荐

Python XML 转 JSON,XML 转字典

今天我们将学习如何在 Python 中将 XML 转换为 JSON 和 XML 转换为字典。我们可以使用 Python 的xmltodict模块来读取 XML 文件并将其转换为字典或 JSON 数据。我们还可以在大型 XML 文件上进行流式处理,并将其转换为字典。在进入编码部分之前,让我们首先了解为什么需要进行 XML 转换。

rubys_的专栏 2504

JWFD开源工作流-矩阵引擎设计-遍历排序算法运行测试

下标:(8,1): 节点标签:(node8,node1): 节点状态:(0,0): 节点标志:普通点。下标:(1,9): 节点标签:(node1,node9): 节点状态:(0,0): 节点标志:普通点。下标:(5,1): 节点标签:(node5,node1): 节点状态:(0,0): 节点标志:普通点。下标:(2,0): 节点标签:(node2,node0): 节点状态:(0,0): 节点标志:普通点。下标:(0,1): 节点标签:(node0,node1): 节点状态:(0,0): 节点标志:普通点。

comsci的专栏 1125

华中科技大学计算机组成原理-单总线CPU设计(全部通关)

【计算机组成原理】 单总线CPU实验 华中科技大学-计算机组成原理 实验三 单总线CPU设计 第1关 MIPS指令译码器设计 第2关 单总线CPU微程序入口查找逻辑 第3关 单总线CPU微程序条件判别测试逻辑 第4关 单总线CPU微程序控制器设计 第5关 采用微程序的单总线CPU设计 第6关 现代时序硬布线控制器状态机设计 第7关 现代时序硬布线控制器设计

紫荆鱼的博客 4万+

Activiti工作流引擎入门学习

@Activiti工作流引擎入门学习 1.工作流介绍 工作流是一系列的规范流程,让业务按照拟定的规则处理和运转,本质上是一系列逻辑相关的活动的集合。如:员工请假–>部门审批–>公司领导审核–>人力资源部备案。activiti工作流引擎就是让任务能够按拟定的流程自动的驱动下去,不再需要我们实现流程的驱动,记录流程的流转情况等等,提供流程生命周期的管理功能。 activiti用户手册...

qq_39668217的博客 394

Emotion-LLaMA实战指南:从零构建多模态情感识别系统(附Python代码)

本文提供了Emotion-LLaMA多模态情感识别系统的实战指南。通过详细的步骤,指导读者从零搭建开发环境、运行本地Demo、理解模型架构,并完成数据处理与模型训练。该创新模型融合视觉、听觉与文本信息,实现更精准、接近人类理解的情感分析与推理,并附有完整的Python代码实现。

weixin_29094775的博客 418

西门子S7-200SMART控制步进电机(五)

前面详细讲述了运动控制向导的配置和运动控制指令的使用方法,接下来要讲的是简单程序的编写和调试。 在编写程序时,需要注意的是自定义的符号和地址不能与运动控制向导分配的存储器冲突。 一、软硬件组成 1、软件:STEP-7-Micro/WIN SMART软件; 2、硬件:西门子S7-200 SMART ST40 PLC、57步进电机和驱动器(DM542)。 二、手动控制步进电机旋转方向和速度 具体步骤...

qq_43134642的博客 2万+

集合总结-遍历

集合对象遍历总结 一:遍历流程图 二: Iterator接口分析 ①:结构 public interface Iterator<E> ②:方法总结 例:ArrayList遍历 1:迭代器遍历集合 ①.: 创建ArrayList集合 ArrayList<String> arrayList=new ArrayList<String>(); ②:. 向Arra...

孤夜的博客 728

AlphaFold-multimer 复合物结构预测

是DeepMind开发的AlphaFold项目的一个扩展,旨在预测蛋白质多聚体的三维结构。蛋白质多聚体是由多个蛋白质亚单位相互组装而成的结构,如酶、膜蛋白复合物和病毒颗粒。理解多聚体的结构对于揭示蛋白质的功能和相互作用非常重要。

MurphyStar的博客 5650

业务工作流引擎调度算法简析(一):

     在工作流系统中,系统调度是核心,调度算法的生效程度和成熟性直接决定了工作流系统的可用性。本文章描述工作流如何推进和回退,并且描述在分之、合并、跳转等特殊情况下的流转规则处理。基本概念1.1 流程实例流程实例是根据流程定义所产生的,一个流程启动后自动产生一个流程实例;系统完成创建流程实例后,需要初始化流程实例(如:给流程全局变量赋值);流程实例创建并初始化完成后,流

GavinFriends的专栏 2333

Codex接入MATLAB MCP服务器:从配置到实战的全流程记录

模型上下文协议(MCP)为AI编程工具提供了连接外部软件的标准接口,就像给AI装上万能USB,使其能直接操控本地的复杂应用。在MATLAB这类闭源重型工具中,AI编程因许可证、工作区隔离而难以形成闭环,而通过官方MCP服务器,Codex能够调用MATLAB引擎执行代码、读取变量并返回图表结果,将代码生成与运行验证真正打通。这一方案在神经网络拟合、控制系统阶跃响应、图像处理以及hprof文件分析等工程场景中,能显著提升自动化效率。文章围绕Codex桌面版接入MATLAB MCP的全流程,涵盖环境准备、配置命令

weixin_33585822的博客 151

智能工厂评估模型研究

摘要:通过对国内外现有智能制造评估模型的研究,结合重庆制造业行业领跑者与落后者之间差距大的现状,以实现全要素全连接的数字化工厂为出发点,融合工业互联网标识,构建实践可行的智能工厂评估模型推动中小型企业参与智能制造转型,缓和两极分化问题。本评估模型包含工厂体系架构的3个层级,提供用于推动智能制造转型的参考,包括设计、生产、管理的全过程评估。关键词:智能制造评估模型;智能制造转型;全连接工厂;工业互联网标识0 引言受行业需求与技术创新的影响,全球制造业在历经了工业1.0机械化、工业2.0电气化和工业3.0自动

罗伯特技术屋 679

[原创]工作流引擎设计中的遍历算法的问题

这个流程图的拓扑结构,如果采用图形深度优先遍历算法来遍历一遍,遍历顺序的部分应该是 开始活动-> A-1=>B-4=>E-5=>NEXT 这种运行顺序在实际流程运行过程中显然有问题,实际运行过程中从流程A-1节点分支...

chenglan8953的博客 187

【LLC快速上手系列】如何在LLC谐振里优雅地调死区时间?

用示波器死盯Vds波形,找到ZVS临界点;别听“经验值”,亲自调才准;死区时间并非越短越好,也不是越长越稳,而是要“刚刚好”;用热成像看MOSFET温升变化,ZVS调好了,温度马上掉2~5℃;轻载难ZVS?适当提升频率 or 降低Lr可破!

weixin_43199439的博客 496

jwfd工作流引擎设计-流程数据同步控制器的设计思路及其矛盾

  基于图论的广义优先遍历算法的流程引擎运行控制器仅仅是一个很初级而简单的工作流引擎的实现手段,那么更进一步的需求则是来源于用户需要用(外部输入)自动表单中的数据来控制这个图的遍历行为,这就好像是我们有发动机可以驱动汽车的轮胎转动,但是还需要一个驾驶员和方向盘来控制汽车的前进,后退和转向,那么发动机就是基于图论的广义遍历算法,而驾驶员和方向盘则是外部表单数据和基于表单数据的流程数据同步控制器,为什么要用同步来描述这个控制器呢? 对于这个问题,实际上我还有些问题没有弄得很清楚,首先基于遍历算法的流程引擎对流程

comsci的专栏 1290

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

JWFD开源工作流矩阵引擎-遍历算法第二次修正代码

请在上一次修正的src\org\jwfd\workflowEngines\Matrix\DataMatrix.java文件上面,覆盖原同名函数,如果运行不正确,请下载JWFD的矩阵引擎开发包或者修改配置参数文件,非常感谢大家的支持,我还将继续发布矩阵引擎的升级代码。。。

comsci的专栏 157

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

[原创]工作流自适应引擎的设计思想(初步)

      最近一段时间都在思考这样一个问题:如果我们想让一个工作流引擎能够妥善的处理由用户通过流程设计器设计出来的任意复杂(简单)的流程图,那么对这个工作流引擎的结构设计就必须很灵活,因为如果仅仅依靠一个有限规模的类与方法集合体,我们不太容易很好的处理所有可能遇到的流程图,但是经过我在JWFDv0.94-v0.96这几个版本的流程引擎设计过程中,我发现了一个潜在的,有可能比较

comsci的专栏 2916

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

实现工作流自动运行控制器过程中的思考

我们使用过工作流设计器的朋友一定都有这样的经验,流程设计器设计出来的流程图如果用XML来存储,是一个类似层次结构的数据模型,直接对这种数据模型进行处理并不是很方便(但是我也见到很多直接在XML结构上面进行后台引擎处理的工作流系统,所以我这里说描述的方法不一定是最好的),所以我没有直接在流程图XML上面进行数据操作和处理,而是把用XML存储的流程图数据转换成一种简单的链表结构并存储在数据库中,具体的

comsci的专栏 2202

重构设计协作工作流:智能矢量格式转换引擎的完整技术解析

在现代数字设计生态系统中,Adobe Illustrator与Photoshop之间的格式鸿沟长期困扰着专业设计团队。传统转换方法导致的技术债务主要体现在三个维度:矢量数据丢失、图层结构破坏以及编辑能力丧失。这些瓶颈不仅消耗设计团队30%以上的工作时间,更在跨团队协作中制造了严重的沟通障碍。 ### 矢量数据栅格化的技术债务 当设计师被迫将AI文件导出为PSD格式时,最核心的矢量路径信息被强制

gitblog_00985的博客 398

[原创]JWFDv0.96工作流引擎设计-自动运行控制器结构说明

JWFDv0.96---工作流引擎设计                                             --自动运行控制器结构说明   注:这篇文章中所使用的“函数”就是指JAVA语言中的方法 作者 comsci   2010.12.12   四川。成都

comsci的专栏 1775

JWFD开源工作流矩阵引擎测试版本BUG20231022修正代码

请把该函数覆盖到JWFD开发包的org.jwfd.workflowEngines.Matrix.DataMatrix.java文件的同名函数中,非常感谢大家的支持,因为矩阵引擎并没有任何先例可以借鉴,所以一步一步的再做,还有很多不完善的地方。。。。

comsci的专栏 513

使用JWFD开源工作流引擎ARC实现简易的自动数据处理的一些摸索(一)

使用JWFD开源工作流引擎ARC实现简易的自动数据处理的一些摸索 注释:ARC是指我在JWFD开源工作流引擎中用JAVA语言实现的一种流程自动运行控制算法(该算法的雏形是一种经过改造的图形广度优先遍历算法,经过数次修改,早就和经典的图形广度优先遍历算法在结构上相差很远了,在jwfdv0.94版本中可以找到这个算法的最初形态), 我是一个业余的工作流爱好者

comsci的专栏 1679
上一篇: JWFDv0.96流程设计器主窗体工具栏代码修正补丁
下一篇: 如何读取JWFD工作流设计器画的流程图XML文件数据
comsci
博客等级 码龄22年 412粉丝 397原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值