JWFDv0.96开源工作流引擎设计--节点匹配搜索算法设计说明

自学PCB思路 | PCB设计零基础入门-小白适用(附详细入门经验分享) 本人大一在实践课上就听说PCB,被虎的一楞一楞的,不过现在回看,发现其实并没有相信的那么难!想着把自己这一路摸索的学习路线分享一下,当时我是一边摸索一边上手,一把鼻涕一把泪的过来的。如果你想搞硬件或者需要搞硬件,下面是我的入门学习过程,希望可以帮到你。目录前言选择一款设计软件好的入门课程掌握抄板元件采购焊板子烙铁头热风枪自己半设计明确设计需求全设计最后我并非什么大佬,也没法自己去教大家如何画板。 阅读详情


   JWFDv0.96开源工作流引擎设计

                       --节点匹配搜索算法设计说明

注:这篇文章中所使用的“函数”就是指JAVA语言中的方法


  

 

   作者  comsci        四川.成都        最后修改时间    2013.4.1


算法设计说明   (前两年,我曾经公布过这个算法的简易设计说明,这几个月花时间重新把算法的详细设计说明完成了,方便我们大家研究,现在网上有JWFD开源工作流系统的各个模块的设计说明文档,请阅读代码的时候参考)

只所以要设计这样一个算法,原因是在设计流程引擎的过程中遇到下面的这个问题

    

“在对称条件下带条件选择的汇聚路由问题”: 

   

问题的严格数学语言描述:在任意一个流程图中,存在N个分支点和M个汇聚点,所有汇聚点和分支点的关系有规则对称和不规则对称两种(图1中的A2的拓扑是规则对称,A1,A3是不规则对称),每一个分支点的运行路径数S和它的实际分支路径数W有可能不相同,即S<>W和S==W的情况同时存在,现在的问题是:在规则对称的拓扑结构下(A2),已知分支点的实际运行路径数值S,求图A2中对称汇聚点的实际访问(实际汇聚)数值K 





问题的描述用比较严格的语言使得这个问题更加像数学问题,其实本来就是个数学问题,只不过我没有找到这个问题的所属的数学领域,干脆自己取个名字-叫流程拓扑分析方法

    

该问题的现实描述(现实描述的含义是在实际的开发工作中用比较实际的语言来表述)已知流程分支点的运行路径数值S,求流程图中一个汇聚点的实际访问(实际汇聚)数值,通过获取该数值,使得流程运行控制器(流程引擎)能够准确的控制流程的运转走向,即准确的控制对条件异步汇聚点放行的时机

    

     算法设计思路: 对于标准的对称的流程图而言,一个汇聚点一般来讲是应该对应一个分支点的,也就是说汇聚支路数应该和它前面的分支支路数相吻合(当然,这只是对很规则的对称流程图模型来讲),那么如果在分支节点中如果出现了条件选择公式(或者智能脚本),那么从这个分支节点所分出来的支路,就不一定都会被选中,

     

     简单举例, 我们在分支节点中嵌入了一个条件表达式 

     

     if a>2 

       Then goto PATH A B  (实际运行两条分支)

       else goto PATH A B C(实际运行三条分支)

     if a=其它值

        then ..............(更多的情况)

     

     上述表达式中

     流程节点中嵌入的a值一般是要在流程实际运行过程中才能够获得,因为a的值极有可能来自一个嵌入流程的表单,而这个表单要在流程运行的时候才能够被处理,而处理的结果是实时的传递给流程的,所以从这个方面来讲,通过预先确定a值的方法来回避这个问题是不行的


     如果一个流程图的分支实际上有3条支路,在流程运行过程中,a的数值大于2,符合嵌入的条件,3条支路其中的2条就会运行下去,而另外一条就不会运行,这样一来,在该节点的后驱汇聚点那里,我们就需要知道具体运行下去的支路数到底是几条?     

     

     怎么才能够获取这个支路数呢? 我们在流程运行控制器(流程引擎)中加入一段算法,使得我们很明确的知道一个条件汇聚点的前驱分支点是哪个节点,然后我们通过先计算一次嵌入条件公式,预先知道该前驱分支点具体要走几条支路,然后再把这个支路数值作为参数传递给用于控制条件汇聚点的控制器中,使得汇聚点按照实际运行的支路来判断是否该继续运行到下一个节点去,那么我们按照这个思路设计伪码算法

     

 请参考JE论坛上面大家对这个问题的讨论 http://www.ITeye.com/topic/513430 

节点匹配搜索算法的实质

节点匹配对的概念---寻找与一个流程图中某个汇聚点相对称的分支点是这个问题的关键所在,我们找的就是那个和该汇聚点直接相关的分支点-这就是节点匹配搜索算法的本质


节点匹配搜索算法的代码结构说明

1: 获取输入汇聚节点的所有前驱汇聚点函数 ,这个函数用于获取该节点前面出现的所有汇聚点 

简单的分支汇聚流程的例子:1节点是分支点,4节点是汇聚点



public java.util.ArrayList RAJN(){}

 这个算法是一个递归+SQL查找算法,传递的参数是字符串参数nodeid,这个参数是调用这个函数的时候需要的输入任意的流程图的一个节点, 字符串参数 graphid,这个参数是标示这个流程图的ID的参数, 数组参数 java.util.ArrayList  jn  用于存储返回的汇聚节点。。。。

 String visits = stm.return_preStep(nodeid, graphid);

 这个语句是调用一个SQL语句,用于查询输入的nodeid节点的前驱节点

 

 if (!visits.equals("")) {  如果查询出来的前驱节点不为空

      if (stm.return_preSteps(graphid, nodeid().size() > 1) {

       // return_preSteps()函数是返回该节点的所有前驱节点,那么这句判断句的意思是,如果返回该节点的所有前驱节点数量大于1,意味着这个这个节点是一个汇聚点,大家可以形象的思考一下,是不是这样的。。。JWFD系统里面用于判断一个 节点是否是汇聚点或者分支点就是依靠这样的判断句

         jn.add(nodeid);  // 如果判断返回为真,那么把该前驱点加入一个数组

      }

      RAJN(visits, graphid, jn);  递归函数,把该节点的一个前驱节点传递到递归函数中,进行下一轮的查找汇聚点的工作

    }

     return jn;  如果无法返回任何一个前驱节点,那么就把汇聚点集合返回给函数,该函数退出。。。输出一个包含流程图全部汇聚点的数组JN

还需要解决的问题:

查找一个流程图的全部汇聚点的算法,目前还无法处理复杂的流程图拓扑结构,要做到对任何流程图对适用,估计是不太容易的,因为我们无法预测用户会设计出一个什么样的流程拓扑结构,单一的线路回溯法将无法获得全部支路的所有前驱节点,如果出现分支嵌套分支的情况,算法就更加复杂。。。。

比如说这样的流程拓扑结构


分支嵌套一个分支,这个拓扑图里面就有2个甚至更多的分支点和汇聚点,依靠上面的这种算法能够及时和正确的查找出所有的汇聚点吗? 而且这种拓扑结构还算是对称的分支结构,如果分支结构不对称,汇聚节点查找算法还有用吗?

还是那个问题,流程图的拓扑结构是无法预测的,但是我们的算法和代码是确定的,怎么用确定的代码去出来无法预测的拓扑结构呢?这个问题就是流程系统设计的核心问题!

-------------------------------------------------------------------------------------------------------------------

2:获取输入节点的所有后续分支点函数  

public java.util.ArrayList RASN(){}

这个函数用于获取该节点后面出现的所有分支节点 

传递进入的参数:  

字符串 String nodeid,这个参数是调用这个函数的时候需要的输入任意的流程图的一个节点

字符串 String graphid,这个参数是标示这个流程图的ID的参数

数组参数 ArrayList jnn  用于存储返回的所有分支节点ID

输出结果:

 ArrayList  jnn 一个包含了全部流程分支节点的数组

算法结构:

String visits = stm.return_nextStep(nodeid, graphid);

通过调用数据库SQL-API -stm.return_nextStep(nodeid, graphid)获得输入节点的直接后续节点visits,如果要了解该函数的详细情况,请参考JWFD开源工作流系统设计-API函数说明和二次开发手册

判断该后续节点是否为空   

if (!visits.equals("")){

如果该后续节点不为空,那么调用数据库API-获取该节点全部后续节点列表函数

return_nextSteps(),进行输出值判断

if (stm.return_nextSteps(graphid, nodeid).size() > 1){

如果该节点的后续节点全部列表数量大于1

那么算法就断定该输入节点是一个分支节点,如下图所示


那么执行下列操作

将该输入节点nodeid写入数组JNN中保存 

jnn.add(nodeid); 

}

  判断体结束之后,退出判断体

  开始递归  

  RASN(visits, graphid, jnn)

}

  return jnn;

  通过若干次递归查询,把该输入节点的全部后续分支点都找出来,然后写入jnn数组,最后返回该数组,退出函数。。。

----------------------------------------------------------------------------------------------------------------------

3:对该节点的所有前驱分支点集合和前驱汇聚点集合进行计算,找出该汇聚节点的匹配分支点SSID  


public String RRND(){} 

节点匹配算法的实质是对称集合配对差算法 ,这个算法还需要改进

传递进入的参数:

字符串 String nodeid,这个参数是调用这个函数的时候需要的输入任意的流程图的一个节点

数组参数 ArrayList jns   用于存储所有汇聚节点ID

数组参数 ArrayList jns1  用于存储所有分支节点ID

Int k = jns.size();  定义一个循环控制变量,用汇聚点数组的长度做这个K值

String rnodeid = ""  定义一个字符串变量,用作返回值,存储查找到的匹配节点

下面是循环体,通过逐个比较每一个在数组里面的节点,对数组进行增删的操作,最终找到与输入节点相匹配的对应节点

 for (int i = 0; i <= k; i++) { 

 循环体的边界是前面取得的汇聚节点数组的长度

 

      if (!jns.isEmpty() && !jns1.isEmpty()) {       

      如果汇聚节点数组和分支节点数组都非空

           if (nodeid.equals(jns.get(jns.size() - i).toString()))             

            如果本节点等于汇聚节点数组的某一个节点

           { rnodeid = jns1.get(i).toString();         

             那么该函数的返回值被赋值为分支节点数组的的某一个节点           }

        jns.remove(jns.size() - i);        

        移去汇聚节点数组中的与参数相等的那一个节点

        jns1.remove(i);       

        移去分支节点数组中的与返回值相等的那个节点

      }

    }

return rnodeid;

该算法模块结束。。。。。。。。。。。。


函数功能:返回输入节点nodeid的匹配节点(与分支点对应的汇聚点)

public String RRN(String nodeid, String graphid) {}

    传递进入的参数:

    String rnode = ""; 函数参数:要返回的匹配节点ID rnode;

    

    定义两个数组JN和JNN,一个存储全部分支点,另外一个存储全部汇聚点

    java.util.ArrayList jn = new java.util.ArrayList();

    java.util.ArrayList jnn = new java.util.ArrayList();

    调用判断节点是否是分支点的函数,将nodeid节点存储到JN数组中 

    if (stm.return_nextSteps(graphid, nodeid).size() > 1) {

      jn.add(nodeid);

    }

    

    调用判断节点是否是汇聚点的函数,将nodeid节点存储到JNN数组中

    if (stm.return_preSteps(graphid, nodeid).size() > 1) {

      jnn.add(nodeid);

    }

   

RAJN函数返回流程图所有的汇聚点集合,RASN返回流程图所有的分支点集合,然后RRND函数对这两个集合的元素进行匹配,最终筛选出一个和nodeid节点相匹配的节点rnode

rnode = RRND(nodeid, RAJN(nodeid, graphid, jnn), RASN(nodeid, graphid, jn));

    返回这个匹配节点 

    return rnode;

  }


现在来看这个算法,还有很多地方有需要改进的地方,甚至还存在一些错误,希望朋友们发现有任何地方有问题,帮忙给我指正一下,自己做的东西,有时候自己出于思维的定势,不容易发现错误的地方。。。。。。所以我写这些设计说明文档的一个目的,就是希望有朋友有兴趣看看,能够指出我的算法设计有什么问题。。。。大家一起来做出完善的算法来。。。。。

这篇文档,我写了很长时间,原因是因为在原来的算法里面发现一个错误,大家如果对比JWFDV0.96的代码包就会发现,在RRND算法里面,我对算法的认识和设计存在一个模糊的地方(在RRDN函数里面,remove的应该是i还是1,我的认识有模糊的地方),我还没有完全把这个地方弄明白,所以算法设计文档一直都没有写下去。。。。。。。

要有什么改进的话,肯定是把这个算法再写得自动化一些,可以根据一个输入的节点号,返回任意我们希望获得流程拓扑结构的相应节点。。。当然,也可以把算法再简化一些,用C语言来实现,效率会更高一些,我没有做时间和空间复杂度的计算了。。。。懒惰的人啊。。

09年的时候,我写了一篇简单的算法说明,现在把这个算法的详细设计说明公布出来,方便大家查询,也方便我以后改进算法的时候使用,我为人人,人人为我。。。。。






数据仓库数据质量监控和处理方法最佳实践 指的是检查数据是否存在反常或者错误的情况,例如数值反常地过大或者过小,或者超过记录的波动值,对应的规则包括数值波动检查,最大值、最小值检查,跨表准确性等。指的是检查数据是否存在缺失的情况,这里的缺失可以是整个数据集的记录缺失,也可以是某个字段记录的缺失,对应的规则包括空值检查,表总行数检查。指的是检查数据是否符合规范,是否按照规定的格式存储,对应的规则包括正则表达式检查,字段长度检查,枚举集合检查,数值范围等。指的是检查哪些数据是重复数据或者数据的哪些属性是重复的,对应的规则例如主键唯一性检查。 阅读详情

相关推荐

Wireshark、Fiddler、Charles 三款抓包工具的本质差异与选型指南

抓包工具是网络调试与接口分析的基础能力,其核心在于理解OSI模型分层原理——不同工具工作在不同协议层级,解决不同维度问题。Wireshark面向网络层(L2/L3),可捕获原始数据帧与TCP握手细节,适用于DNS异常、丢包重传等底层问题定位;Fiddler和Charles则工作在应用层(L7),作为HTTP(S)代理实现HTTPS解密、请求改写与弱网模拟,是API调试与移动端测试的首选。技术价值体现在:精准匹配问题域(如证书固定需Fiddler脚本绕过,iOS调试依赖Charles证书信任链),避免‘用显微

weixin_28831341的博客 254

jfow-代码分析

flow-代码分析

专注Java(全栈)应用开发,求知若渴,虚心若愚,talk is cheap, show me the code. 1000

【AI助力科研】不看一篇文献,手把手教你用chatGPT写文献综述!

这篇文章以【AI助力科研】为题,介绍了如何利用ChatGPT编写文献综述的方法。作者通过详细的指导,展示了不需要阅读大量文献,只需依靠ChatGPT模型即可完成文献综述的过程。该方法旨在提高科研工作者的效率,减少阅读负担,并且能够生成具有逻辑性和准确性的文献综述。

研究方向//图像视频处理/信号算法/红外无损检测/数值仿真/机器学习/优化算法/python/matlab 2万+

游戏引擎开发总结:节点编辑器实现思路

所有节点都继承至一个类Access,所有的节点都没BP_Node持有,节点相对于BP_Node称之为define。Access定义了一些必要的虚函数,,BP_Node是一个适配器,将具体节点与编辑程序隔离开,让编辑程序以统一的方式对待所有节点;

weixin_62953519的博客 997

【技术实践指南】Python解析FactSet Revere供应链数据:构建企业级断裂与重构监测指标

本文提供了一份企业级Python实践指南,详细解析如何利用FactSet Revere供应链数据库,构建供应链断裂与重构监测指标。内容涵盖数据清洗、关系对筛选、时间序列处理及核心指标(断裂、恢复、转移)的工程化实现,旨在帮助数据工程师与分析师搭建自动化、可解释的供应链风险监控系统。

weixin_29051811的博客 937

达芬奇Pro开发板硬件验证全流程指南

FPGA开发板硬件验证是嵌入式系统可靠性的基石,其核心在于理解SoC启动时序、IO资源映射与高速接口物理层约束。基于Xilinx Zynq-7000异构架构的开发平台,需围绕电源完整性、时钟稳定性、信号完整性及软硬协同启动链路展开分层测试。技术价值体现在规避量产失效率、支撑高可靠工业控制与实时图像处理等场景。典型应用涵盖千兆以太网通信验证、DVP摄像头与RGB LCD显示链路调试、以及SFP+光纤接口PRBS误码率测试。本文聚焦达芬奇Pro系列开发板,深入解析JTAG下载、QSPI Flash重烧录、RGM

weixin_42453228的博客 126

[原创]JWFDv0.96工作流引擎设计--嵌入公式使用和结构说明

&lt;!-- [if gte mso 9]&gt;&lt;xml&gt;&lt;w:WordDocument&gt;&lt;w:BrowserLevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;&lt;w:DisplayHorizontalDrawingGridEvery&gt;0&lt;/w:DisplayHorizontalD...

ribishuangba 91

DIY一个SM2262ENG 2TB Nvme固态硬盘,慧荣SM2262EN主控

网友订做的 材料: 慧荣科技的62en,2片1G 三星DDR4缓存,4颗PF29F04T2AOCTH1,8CE B17A。SM2262EN属于慧荣第二代PCIe SSD主控,支持PCIe G3×4通道和全新的NVMe 1.3规范、8个NAND通道设计,并提供完整固件设计,最大循序读取速度高达3.5GB/s,循序写入速度达3.0GB/s,随机读写则高达420K IOPS和420K IOPS。此外,还采用目前最先进的低功耗设计,无论是在待机还是在工作状态下,均展现超低功耗,有效减少30%的功耗,满足用户追求超

m0_55207244的博客 1万+

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

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

comsci的专栏 2916

Android 12.0 系统systemui状态栏下拉左滑显示通知栏右滑显示控制中心模块的流程分析

在android12.0的系统rom定制化开发中,在系统原生systemui进行自定义下拉状态栏布局的定制的时候,需要在systemui下拉状态栏下滑的时候,根据下滑坐标来 判断当前是滑出通知栏还是滑出控制中心模块,所以就需要根据屏幕宽度,来区分x坐标值为多少是左滑出通知栏或者右滑出控制中心模块,接下来分析下 状态栏下滑坐标等相关功能代码分析

安卓兼职framework和app工程师的博客 2769

PostgreSQL 异常排查:读取流时发生异常 (x80004005)

通过以上步骤,您应该能够解决在 .NET Core 中与 PostgreSQL 数据库进行交互时出现异常 (x80004005) 的问题。确保数据库连接正确,查询语句准确,并使用兼容的驱动程序版本。如有必要,可以捕获异常并查看详细的错误信息,以便更好地排查问题。在使用 .NET Core 开发应用程序时,如果在与 PostgreSQL 数据库进行交互时遇到异常,例如在读取数据流时发生异常 (x80004005),我们需要进行排查和修复。另外,还可以尝试捕获异常并打印异常信息,以便更好地了解问题所在。

XwlyVue的博客 1624

国内开源工作流fireflow推出全浏览器兼容流程设计器

来自fireflow官方网站的消息    www.fireflow.org国内的开源工作流项目fireworkflow团队近日开发出一种兼容性很好的WEB流程设计器,估计目前还处在测试阶段,目前只有图片,有图有真相,据作者非也说,此款流程设计器可以用户fireflow的引擎,面向企业用户和程序员

comsci的专栏 1万+

【系统架构设计师】预测试卷一:综合知识(75道选择题)

软件架构风格是描述某一特定应用领域中系统组织方式的惯用模式,架构风格反映领域中众多系统所共有的结构和 (48),强调对架构(49)的重用。 (48) A. 语义特性 B. 功能需求 C. 质量属性 D. 业务规则 (49) A. 分析 B. 设计 C.实现

数据知道的博客 7767

自己动手DIY一套用户自定义工作流(源码包)

这个压缩包里面的组件和模块是DIY一个自定义工作流的基本设计模块(包含实现自定义工作流的多种方法的其中的一种)   其中有面向用户的自定义工作流设计器的代码包   都是第三方开发的   熟悉FLEX和JS的朋友可以用这些模块自己定制一个面向最终用户的设计器   当实现了流程设计器之后,就需要把设计器产生的XML文件解析到数据库中去,这个过程需要参考JWFD开源工作流的文档说明,同时JW

comsci的专栏 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

[原创]JWFD工作流引擎设计--简单矩阵建模与应用(初步讨论)

暂时忽略工作流状态的问题,仅仅表示工作流的拓扑结构   为什么要搞这样的东东,jwfd v0.96版本中的引擎算法已经足以应付常见的工作流模型了,其它工作流系统的状态机模型也是比较不错的解决方案.因为在我设计0.96的引擎的时候,由于嵌入式代码模块和外部  数据(表单等)的加入,

comsci的专栏 3037

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

如何读取JWFD工作流设计器画的流程图XML文件数据

如何读取JWFD工作流设计器画的流程图XML文件数据当我们通过JWFD的流程设计器画好一个流程图之后,如下图  这个时候,你需要打开菜单栏目,选择流程图另存为  比如说,我们想把这个流程图另存为叫做 Example2011的文件 点击确定之后,这个流程图就保持在本地硬盘中的某个目

comsci的专栏 2783

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

JWFD的最新动态(2013.6.13)

这几天过端午节节,虽然吃了粽子,但是不写代码心里总觉得痒痒的。。所以还是打开机器,更新一下我的JWFD。。。。。这几天在修改启动界面,新增加了启动界面的介绍文档和更新列表,如下图    首先请大家原谅我的粗心,由于我发布JWFD的文件之前,没有做严格的测试,导致很多错误的发生,感谢朋友们的支持,我第一时间修改这些错误,并把补丁和文档发布在博客园我的下载里面,另外今天早上接

comsci的专栏 2624

流程矩阵模型中的基本元素是什么?

一个传统的矩阵是这样的                              | 0  0  1   0   1 |                             | 1  1  0   0   1 |                             | 0  1  1   0   1 |                              | 0  0  1   1

comsci的专栏 2514

工作流平台中用矩阵状态表代替关系型数据库的思考

现在的工作流系统都需要关系型数据库的支持,要使用一套工作流系统,特别是在运行过程中,启动工作流引擎的时候,都需要用数据库来跑流程的实例和记录流程的状态值,可以说工作流引擎和数据库的关系非常密切,没有数据库的支持,工作流就无法运行,但是如果我们把思路扩展一下,这样思考,如果工作流系统的运行都必须依赖关系型数据库,那么工作流的应用范围就会受到限制,比如说,在某些嵌入式平台中,磁盘和内存比较小,操作系统

comsci的专栏 2273

工作流三位一体的驱动方式- (表单)数据 状态 人工

五一节放假,到公园里面去吹吹风,看看树。。。         那天朋友在博客上面留言,讲了一下他对于流程反馈的看法,引起我的进一步思考,公园里面很多人放风筝,我突然有个感想,如果我们的系统简单得像一支风筝那样,没有发动机,没有复杂的控制系统,那它是怎么飞到天空中的呢?   一是要有风,二是要有一根线,风就是动力源,线就是控制系统,多么简单的飞行装置啊。。风筝本身不带任何动力装置,完全靠风的动力来

comsci的专栏 2206

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

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

comsci的专栏 2202

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

今天在普元工作流的论坛上面,有一个帖子,上面有一个流程图,如下       这个流程图的拓扑结构,如果采用图形深度优先遍历算法来遍历一遍,遍历顺序的部分应该是     开始活动-> A-1=>B-4=>E-5=>NEXT    这种运行顺序在实际流程运行过程中显然有问题,实际运行

comsci的专栏 1947

JWFD工作流引擎自动运行控制器的一些改进设计思路(一)

经过前面一段时间的思考,我发现在JWFDv0.96版本中用于流程引擎的自动运行控制器SAN算法存在着一些值得改进的地方,这种改进也许还无法实现我在前面的文章说描述的那种流程自适应控制的机制(http://comsci.iteye.com/blog/537131),但是至少可以让流程在自动运行过程中变得更加灵活和便于控制下面是SAN自动运行控制器的一个伪代码描述,让我们来看看,到底是什么地方可以改进

comsci的专栏 1840

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

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

comsci的专栏 1679

关于电磁隐身系统设计的思考

电磁场本身也是一种光子场,可见光频率和电磁场频率的关系我还不是很清楚,但是如果利用一个完全随机的电磁波频率发生器来生成一个干扰可见光视觉信号的系统,是否可行呢?   我们的视觉系统对于一个不停变化的光频信号是会产生疲劳的,我们的肉眼会对这种不停变幻的光频信号视而不见,这也许就是光学隐身的原理吧。。。       我构想的一个电磁场隐身系统的原理是这样的:  用一个(快速)随机数字信号发生

comsci的专栏 1547
上一篇: 看似简单实现起来却有困难的ARC设计目标
下一篇: 使用JWFD开源工作流引擎ARC实现简易的自动数据处理的一些摸索(一)
comsci
博客等级 码龄22年 412粉丝 397原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值