CN109960751B - 计算流图构建方法、装置和存储介质 - Google Patents
计算流图构建方法、装置和存储介质 Download PDFInfo
- Publication number
- CN109960751B CN109960751B CN201910246712.4A CN201910246712A CN109960751B CN 109960751 B CN109960751 B CN 109960751B CN 201910246712 A CN201910246712 A CN 201910246712A CN 109960751 B CN109960751 B CN 109960751B
- Authority
- CN
- China
- Prior art keywords
- node
- added
- hash table
- character string
- data structure
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种计算流图构建方法、装置和存储介质,该方法包括:接收添加节点的请求;基于添加节点的请求生成待添加节点的命名字符串;将生成的命名字符串作为关键码值在已构建的全局哈希表中进行检索,该全局哈希表中包括已添加节点的命名字符串;在全局哈希表中检索到与命名字符串相匹配的条目的情况下,在已构建的流图结构中不添加待添加的节点;在全局哈希表中未检索到与命名字符串相匹配的条目的情况下,在已构建的流图结构中添加待添加的节点,获取新加节点的数据结构访问地址,并通过全局ID分配操作得到新加节点的ID;在全局哈希表中添加新加节点对应的条目。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种计算流图构建方法、装置和存储介质。
背景技术
近年来,符号式编程的方法被广泛应用于人工智能、互联网、计算机技术等领域。符号式编程有着应用范围广、逻辑清晰、内存使用效率和计算效率高、易于阅读和维护等优势。在符号式编程中,计算流图是最为重要的建模方法之一,其使用图结构来表达一个复杂的计算过程,根据应用场景不同,赋予图节点、节点之间的边以不同的意义和数据,能够清晰地表达数据之间的关联,如依赖关系、并行关系等,同时能根据应用需求基于计算流图的结构进行优化,从而达到优化计算过程的目的。
在很多应用场景下,计算流图作为一种解决实际问题的工具,通常基于一个编程平台或框架存在,平台的设计者提供建图、执行、优化计算流图等一系列基本操作;而平台的使用者则通过这些操作构建属于自己的计算流图,并基于这个计算流图来解决自己面临的实际问题。由于平台的使用者不一定是平台的设计者,使用者在很多时候不清楚计算流图底层实现的细节,加上使用者本身不能保证在设计计算流图的时候完全不出现设计上的失误,使得计算流图的构建过程中通常会出现一些不符合计算流图设计原则的错误。在这些错误中,最为普遍的一种是,重复定义了图中的节点和图中的边,一组节点和边构成了相对于整个运算流程来说的一个子运算表达式,重复的节点便意味着重复的子运算表达式。从平台使用者的角度看,这些重复的表达式有可能在设计逻辑上存在着歧义:一、它们可能表示同一个运算过程,但是可能在计算流图中作为相互独立的过程来保存和计算;二、它们也有可能表示不同的过程,只不过不小心赋予了同样的命名。这种歧义性会带来一些致命的后果,比如计算流图的实际结构与设计者预期不符、计算流图中出现的错误不可复现、不可分析或不可调试等。
在这样的情况下,通过一些机制来消除计算流图使用者的误操作带来的这些歧义是非常有必要的。
发明内容
鉴于此,本发明实施例提供了一种计算流图构建方法、装置和存储介质,以消除或改善现有技术中存在的一个或更多个缺陷。
本发明的技术方案如下:
根据本发明的一方面,提供一种计算流图构建方法,该方法包括以下步骤:
接收添加节点的请求,该请求中包含:待添加节点的运算信息和源数据节点的数据结构信息;
基于所述添加节点的请求生成待添加节点的格式化命名字符串,所述格式化命名字符串包含待添加节点运算信息和基于源数据节点的数据结构信息获得的待添加节点的源数据节点标识;
将生成的格式化命名字符串作为关键码值在已构建的全局哈希表中进行检索,所述全局哈希表中包括已添加节点的命名字符串;
在所述全局哈希表中检索到与命名字符串相匹配的条目的情况下,在已构建的流图结构中不添加所述待添加的节点;在所述全局哈希表中未检索到与命名字符串相匹配的条目的情况下,在已构建的流图结构中添加所述待添加的节点,获取新加节点的数据结构访问地址,并通过全局标识分配操作得到新加节点的标识;
在所述全局哈希表中添加新加节点对应的条目,所述新加节点对应的条目包括所述生成的命名字符串。
可选地,所述方法还包括:将已构建流图的所有节点或新加节点的数据结构信息进行输出和/或存储。
可选地,所述全局哈希表中还包括已添加节点的数据结构信息,所述全局哈希表中添加的新加节点对应的条目还包括所述新加节点的数据结构信息。
可选地,所述全局哈希表中的数据结构信息包括数据结构访问地址信息;所述方法还包括:在所述全局哈希表中检索到与命名字符串相匹配的条目情况下,基于相匹配的条目中的数据结构访问地址信息将对应节点的数据结构进行输出;在所述全局哈希表中未检索到与命名字符串相匹配的条目情况下,基于所述全局哈希表中新加节点对应的条目中的数据结构访问地址信息将新加节点的数据结构进行输出。
可选地,所述全局哈希表包括第一哈希表和第二哈希表,所述第一哈希表中存储有已添加节点的命名字符串及节点标识,所述第二哈希表中存储有已添加节点的标识以及已添加节点的数据结构访问地址信息。
可选地,基于所述添加节点的请求生成待添加节点的格式化命名字符串的步骤包括:基于所述添加节点的请求获得包括待添加节点的运算信息和基于源数据节点的数据结构信息获得的源数据标识信息在内的多段数据,将获得的多段数据按照预定的顺序排列并通过预定的分隔符进行分隔,而生成待添加节点的命名字符串。
可选地,对于对源数据节点的顺序有要求的运算,所述预定的顺序包括运算中源数据节点的逻辑顺序;对于对源数据节点的顺序无要求的运算,所述预定的顺序包括运算中源数据标识信息从小到大的顺序。
可选地,所述格式化节点命名字符串具有预定长度。
根据本发明是另一方面,还提供一种计算流图构建装置,该装置包括处理器和存储器,所述存储器中存储有计算机指令,所述处理器用于执行所述存储器中存储的计算机指令,当所述计算机指令被处理器执行时该装置实现如前所述方法的步骤。
根据本发明的另一方面,还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如前所述方法的步骤。
本发明能够清晰、无歧义地记录每一个节点的信息,确保用户即使在重复调用多次完全相同的新建节点请求时也不会造成图结构的混乱或者冗余。借助本方法,在建图过程中可以使得计算流图的结构严谨、鲁棒、无歧义。另外,本发明方法能够在建图的同时防止在计算流图中产生重复子表达式,通过构造命名字符串并查询哈希表中命名字符串等的操作,在合理的应用场景下,都能够在常数时间内完成建图以及重复子表达式的检查和消除,具有高效、同步的优点。
本领域技术人员将会理解的是,能够用本发明实现的目的和优点不限于以上具体所述,并且根据以下详细说明将更清楚地理解本发明能够实现的上述和其他目的。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,并不构成对本发明的限定。在附图中:
图1示出了本发明实施例中在计算流图建图过程中防止产生重复子表达式的方法流程图。
图2示出用户调用API进行建图的伪代码示例。
图3示出了基于图2所示的伪代码进行计算流图的建图和重复子表达式查重处理流程的一个示例性流程。
图4示出基于图2的伪代码和图3的流程构建的计算流图结构的示例。
图5示出了本发明另一实施例中计算流图的建图过程中防止产生重复子表达式的一个流程图示例。
图6示出了基于图2的伪代码和图3的流程构建的计算流图结构的示例。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施方式和附图,对本发明做进一步详细说明。在此,本发明的示意性实施方式及其说明用于解释本发明,但并不作为对本发明的限定。
在此,还需要说明的是,为了避免因不必要的细节而模糊了本发明,在附图中仅仅示出了与根据本发明的方案密切相关的结构和/或处理步骤,而省略了与本发明关系不大的其他细节。
应该强调,术语“包括/包含/具有”在本文使用时指特征、要素、步骤或组件的存在,但并不排除一个或更多个其它特征、要素、步骤或组件的存在或附加。
在此,还需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互结合。
发明人在进行计算流图构建平台的设计和研究过程中,发现通过全局哈希表加形式化字符串命名相结合的办法,可以为计算流图中重复子表达式的检查和纠正提供一种明确的、高效的解决方法。因此,在本发明中,构造了一个全局哈希表T,在全局哈希表中存储有已在流图中构建的节点的命名字符串,在构建的流图中要添加新节点(即要构建节点)时,生成该要添加的节点的唯一确定的无歧义的格式化命名字符串,并以该命名字符串作为关键码值在全局哈希表T中进行检索。如果找到已存在的匹配条目,表明存在重复的子表达式,则在已构建的流图结构中不添加该新节点;如果未找到已存在的匹配条目,表明不存在重复的子表达式,则在已构建的流图结构中添加该新节点。由此来高效地完成重复子表达式的检查和消除。
本发明实施例要构建的计算流图,由节点和有向边构成,每个节点代表一个基本运算/算法/函数,每个节点有若干条有向边以本节点为起点,每条有向边从本节点出发,指向一个将本节点的运算结果作为源数据的节点;对于每个节点对应的运算,其每一个源数据节点对应一条以本节点为终点的有向边,这些边的起点即源数据产生的节点。
图1为本发明实施例中在计算流图建图过程中防止产生重复子表达式的方法流程图,该流程图同时也可以看成是体现计算流图构建方法的部分步骤的流程示意图。本发明实施例中的方法步骤可以通过计算机软件在处理器上运行而实现的计算流图的构建平台来实现。该计算流图的构建平台可包括内部建图软件以及一组提供给平台使用者的API(Application Programming Interface,应用程序编程接口),平台使用者可以通过编程的方式调用API进行计算流图的构建。流图构建的大致过程为:用户调用API提供的操作,以节点为单位构建计算流图,首先输入起点节点,后续每次添加新节点,需要指定这个节点所进行的对数据的处理类型(各种运算/算法/函数等),同时指定这个节点需要的源数据结构,此外还可指定额外的和具体应用有关的运算参数。每次要添加新节点时都会对全局图结构进行一定的更新。如图1所示,计算流图建图过程中消除重复子表达式的方法包括如下步骤(步骤S110-步骤S150):
步骤S110,计算流图的构建平台的处理器通过API接收添加新节点的请求,该请求中包含:待添加节点的运算信息和源数据节点的数据结构信息。
由于本发明实施例要查找出重复的子表达式,因此涉及的待添加的新节点为具有运算表达式的节点,而非起始节点。对于起始节点,不在本发明关注的范围内,其可由计算流图构建平台通过input()而构建。
在一实施例中,添加新节点的请求中包含的待添加的新节点的运算信息例如可以是节点运算类型,但并不限于此。添加新节点的请求中包含的源数据节点的数据结构信息例如可以是源数据节点的数据结构访问地址或源数据节点的整型数据ID等信息,但也并不限于此。此外,请求中还可以包含运算需要的参数等其他和具体应用有关的信息。
步骤S120,基于添加节点的请求生成待添加节点的格式化命名字符串,该格式化命名字符串包含待添加节点运算信息和基于源数据节点的数据结构信息获得的待添加节点的源数据节点标识。
即,本步骤中,基于添加节点的请求对待添加的节点进行命名,依照预定的严格的规则生成一个格式化字符串,称为命名字符串,该字符串中可包含:待添加节点的运算信息、待添加节点的源数据节点的标识(如源数据节点的整型数据ID)等,其中,待添加节点的源数据节点的标识信息可以从添加节点的请求中直接获得,或者,在添加节点的请求中携带的是源数据节点的数据结构访问地址的情况下,待添加节点的源数据节点的标识信息(如整型数据ID)保存在源数据节点的数据结构中,可以通过基于访问地址访问源数据节点的数据结构而获得。此外,还可以包含运算需要的参数等其他和具体应用有关的信息,本发明并不限于此。
在本发明实施例中,节点命名字符串可被设计为具有固定长度。固定长度值可事先设置,并且可更改。
在本发明实施例中,这些信息按照规定好的严格的先后顺序连接,并且数据之间带有无歧义的分割符,即按照预定的顺序将包括待添加节点的运算信息和源数据节点标识在内的多段数据进行排列并通过预定的分隔符进行分隔,来生成待添加节点的命名字符串。例如,对于对源数据节点的顺序有要求的运算(如除法运算),预定的顺序可包括运算中源数据节点的逻辑顺序。对于对源数据节点的顺序无要求的运算(如加法运算),预定的顺序可包括运算中源数据标识信息从小到大的顺序。
步骤S130,将生成的待添加节点的命名字符串作为关键码值在已构建的全局哈希表中进行检索,该全局哈希表中包括已添加节点的命名字符串。
在本发明实施例中,预先或在开始构建计算流图时构造一个全局哈希表T。该全局哈希表T用于记录已添加节点的运算表达字符串(在本发明实施例中又称为已添加节点的命名字符串),初始哈希表可以为空。该全局哈希表T的关键码值(key)可以是字符串。
在本发明另一实施例中,全局哈希表T中还可存储有已添加节点的数据结构信息,该数据结构信息例如可以是数据结构访问地址信息,此外全局哈希表T中还可存储有已添加节点的ID等信息。
步骤S140,在全局哈希表中检索到与命名字符串相匹配的条目的情况下,在已构建的流图结构中不添加待添加的新节点;在全局哈希表中未检索到与命名字符串相匹配的条目的情况下,在已构建的流图结构中添加待添加的新节点,获取新节点的数据结构访问地址,并通过全局ID分配操作得到新节点的ID。
在本步骤中,如果在全局哈希表T中检索到相匹配的条目,如相同的命名字符串,则表示已构建的流图结构中已存在与新节点相同的子运算表达式,因此不再添加该待添加的新节点,从而可以避免重复的子运算表达式,从而消除了可能带来的歧义。
如果在全局哈希表T中检索不到相匹配的条目,则表示已构建的流图结构中不存在与新节点相同的子运算表达式,于是允许在已构建的流图结构中添加该待添加的新节点,并获取新节点的数据结构访问地址。进一步地,可通过全局ID分配操作得到新节点的全局整型数据ID。其中,该全局ID分配操作可由在计算流图构建期间运行的全局整型数据ID分配模块来实现,ID分配模块可以通过软件来实现,但并不排除通过硬件组件或软硬件的组合来实现。更具体地,计算流图的构建平台每次向全局整型数据ID分配模块请求一个ID,该ID分配模块会提供一个整型数据,并且分配算法保证这个整型数据具有唯一性,即在全局范围内一个图节点会获得一个唯一确定的ID。
步骤S150,在全局哈希表中添加新节点对应的条目,该新节点对应的条目包括生成的命名字符串。
除了包括已构建节点的命名字符串外,在本发明另一实施例中,全局哈希表T还可包括已添加节点的数据结构信息。此时,全局哈希表T中添加的新节点对应的条目不仅包括新节点的命名字符串,还可包括该新构建的节点的数据结构信息,该数据结构信息例如可包括数据结构访问地址信息。此外全局哈希表T中还可存储有已添加节点的ID等信息。
作为一示例,全局哈希表T可包括第一全局哈希表T1和第二全局哈希表T2,其中第一全局哈希表T1中存储有已添加节点的命名字符串及节点ID,第二全局哈希表T2中存储有已添加节点的ID以及已添加节点的数据结构。
基于如上的构建结果,计算流图的构建平台可将已构建的所有节点或新加节点的数据结构信息进行输出和/或存储,例如通过人机交互设备向构建平台的使用者输出新加节点的数据结构信息。
如果在步骤S140中新节点构建失败,则计算流图的构建平台可将新节点构建失败的结果反馈/输出给平台的使用者。作为示例,反馈/输出给平台的使用者的表征新节点构建失败的信息可以仅包括该新节点的构建成功与否的结果,也可以包括该节点ID对应的节点数据结构。
在当前节点处理完毕后,构建平台继续处理未处理的添加节点的请求,即重复步骤S110-S150,直至所述的添加节点的请求处理完毕。
经过如上处理流程构建出的计算流图或子流图,能够在常数时间内快速地消除计算流图中产生重复子表达式的风险,消除了可能带来的歧义,从而消除了由歧义带来的不可复现、不可分析或不可调试等问题。
在本发明实施例中,在前述步骤S120中生成的节点命名字符串,其长度可控,因此可以根据具体应用场景设置为一个预定长度。该节点命名字符串通常由以下几个部分组成:
1)分隔符;在本发明实施例中,分隔符由无歧义的符号组成,如“_”,还可以有其他形式,本发明不作限制;
2)源数据节点ID,ID长度可控,比如,将ID定为不超过8位的十进制整型数据,这个范围在所有应用场景下都是非常充足的。源数据节点ID数目同样可控,直接等于运算所需要的源数据节点数目,而绝大多数数据处理都是单目运算或双目运算。
3)运算类型,针对绝大多数应用场景,定义一组运算的类型的名称都是简单且长度可控的。
4)其他参数,可依照应用场景而定,长度可控。
字符串的组成成分的数量可控,每一部分的长度有明确限制,因此字符串长度可控,不会发生字符串数据过长的情况。
本发明所述的节点命名字符串,是基于节点运算信息和节点的源数据节点的标识信息而生成,具有无歧义的特点,对于用同样的方法操作同样源数据的节点,确保生成唯一确定的命名字符串。
如果所述,本发明能够清晰、无歧义地记录每一个节点的信息,确保用户重复调用多次完全相同的新建节点请求不会造成图结构的混乱或者冗余。借助本发明的方法,在建图过程中可以确保计算流图的结构严谨、鲁棒、无歧义。另外,本发明方法通过构造命名字符串并查询哈希表中命名字符串等的操作,在合理的应用场景下,能够快速完成建图以及重复子表达式的检查和消除,具有高效、同步的优点。
下面结合具体实例表述本发明的在计算流图建图过程中消除重复子表达式的方法。
实施例1
如2所示为本发明实施例中用户调用API进行建图的伪代码示例。图3示出了基于图2所示的伪代码进行计算流图的建图和重复子表达式查重和处理流程的一个示例性流程。基于图2所示的构图为代码,要构建的计算流图涉及a、b、c、d、e五个节点,如图3所示,构建流程包括:
在本实施例的计算流图构建流程中,通过输入(input)操作在图结构中添加源数据节点a和b,并在构造的全局哈希表T中存储有已添加节点的命名字符串和已添加节点的数据结构信息。接着在图3中的S1流程中,计算流图构建平台处理一个添加节点c的请求,该请求中例如包含有要增加的节点c的运算关系(c=sub(a,b))以及源数据节点(节点a和b)的数据结构访问地址。基于请求中的信息,对节点c进行命名,生成体现运算表达的命名字符串“sub_1_2”,该字符串包含节点c的运算信息(运算关系)、源数据节点的ID以及分隔符“_”。通过将生成的字符串作为关键码值在全局哈希表T中进行搜索,发现不存在相同的字符串,即不存在重复的子运算表达式,于是在图结构中添加节点c,并获取节点c的数据结构访问地址,并向在构图过程中处于启动状态的全局整型数据ID分配功能模块A请求新的整型数据ID作为新建节点c的ID(在本示例中节点c的ID为“3”)。此外,在全局哈希表T中增加新的条目,该新的条目的关键码值为生成节点c的命名字符串,存储的数据为新建的节点c的数据结构访问地址。图3中的“node_class_ptr”表示存放节点数据类的指针,即为节点的数据结构访问地址。
接着,计算流图构建平台处理一个添加节点d的请求,该请求中例如包含有要增加的节点d的运算关系(c=add(c,b))以及源数据节点(节点b和c)的数据结构访问地址。基于请求中的信息,对节点d进行命名,在命名过程中,按照如下规则:对于对源数据节点的顺序有要求的运算,将按照运算中源数据节点的逻辑顺序排列并通过预定的分隔符进行分隔,来生成新节点的命名字符串;对于对源数据节点的顺序无要求的运算,将按照源数据标识信息从小到大的顺序排列并通过预定的分隔符进行分隔,来生成新节点的命名字符串。如图3的S2流程所述,生成体现运算表达的命名字符串“add_2_3”,该字符串包含节点d的运算信息(运算关系)、源数据节点的ID以及分隔符“_”。通过将生成的字符串作为关键码值在全局哈希表T中进行搜索,发现不存在相同的字符串,即不存在重复的子运算表达式,于是在图结构中添加节点d,并获取节点d的数据结构访问地址,并向在构图过程中处于启动状态的全局整型数据ID分配功能模块A请求新的整型数据ID作为新建节点d的ID(在本示例中节点d的ID为“4”)。此外,在全局哈希表T中增加新的条目,该新的条目的关键码值为生成节点d的命名字符串,存储的数据为新建的节点d的数据结构访问地址。
接着,计算流图构建平台处理一个添加节点e的请求,该请求中例如包含有要增加的节点e的运算关系(c=add(b,c))以及源数据节点(节点b和c)的数据结构访问地址。基于请求中的信息,按照命名规则对节点e进行命名,生成体现运算表达的命名字符串“add_2_3”。通过将生成的字符串作为关键码值在全局哈希表T中进行搜索,发现存在相同的字符串,节点e生成的命名字符串被指向节点d,即存在重复的子运算表达式,于是如图3中的流程S4所示,在图结构中不允许添加节点e,节点e被消除。由于没有在图结构中构建新的节点,在全局哈希表T中不增加新的条目。
在本发明实施例中,无论新建节点成功或是失败,计算流图构建平台都可以向用户返回当前节点的构建结果信息。如果节点新建成功,则返回给平台使用者的节点构建结果信息中可以包括新建节点的节点数据结构信息。如果节点新建失败,则返回给平台使用者的节点构建结果信息中可以包括T中检索到的、重复的子运算表达式对应的节点的数据结构信息。
本实施例通过构造命名字符串并查询哈希表中命名字符串等的操作,在合理的应用场景下,能够快速完成建图并防止在计算流图中产生重复子表达式,具有高效、同步的优点。
实施例2
在本实施例中,全局哈希表T中包括第一哈希表T1和第二哈希表T2,其中,第一哈希表中存储有已添加节点的命名字符串及节点ID,第二哈希表中存储有已添加节点的ID以及已添加节点的数据结构。图5示出了本实施例中计算流图的建图过程中消除重复子表达式的一个流程图示例。图6示出了基于图2的伪代码和图5的流程构建的计算流图结构的示例。
如图5所示,本实施例中的计算流图构建和重复子运算表达式的消除流程包括以下步骤:
步骤S611,启动计算流图的构建平台,并构造一个全局哈希表T,同时启动ID分配功能模块A。
本实施例中,全局哈希表T包括两个哈希表:第一哈希表T1和第二哈希表T2,第一哈希表用于存储已添加节点的命名字符串及该已添加节点的ID,第二哈希表用于存储已添加节点的ID以及已添加节点的数据结构地址信息,如已添加节点的数据结构的访问地址,作为示例,该访问地址可以是存放节点数据类的指针。
步骤S612,计算流图的构建平台处理一个添加新节点的请求,请求中包含:节点运算类型和源数据节点的数据结构访问地址。此外,还可包含其他和具体应用有关的信息(包括但不仅限于运算需要的参数)。
步骤S613,对待添加的新节点进行命名,依照前面描述的规则生成一个格式化的命名字符串,其中包括:节点的运算信息、源数据节点的整型数据ID(该ID保存在源数据节点的数据结构中,源数据节点的数据结构可通过访问源数据节点的数据结构访问地址而得到)。这些信息按照预定的先后顺序连接,数据之间带有无歧义的分割符。
步骤S614,对于步骤S613中生成的节点命名字符串,将其作为关键码值首先在T1中进行检索。如果找到已存在的条目(步骤S61中的“是”),则进入步骤S618,否则(步骤S615中的“否”)进入步骤S616。
步骤S616,在全局的图结构中添加该新节点,并获取新节点的数据结构访问地址。同时向全局ID分配模块A请求一个新的整型数据ID作为新建节点的ID。
步骤S617,在T1、T2中添加新的条目,在T1中添加的新的条目为添加的该新节点的命名字符串及该新节点的ID,在T2中添加的新条目为添加的该新节点的ID及该新节点的数据结构访问地址信息。
步骤S618,将检索到的节点ID作为关键码值在T2表中检索节点数据结构信息。
步骤S619,向平台使用者反馈当前节点的构建结果信息,该信息中包含新构建节点或检索到的节点的数据结构。
此处,如果节点新建成功,则返回给平台使用者的节点数据结构优选地可以是新建节点的节点数据结构。如果节点新建失败,则返回给平台使用者的节点数据结构是T2中检索到的、重复的子运算表达式对应的节点的数据结构。
步骤S620,等待下一个新建节点的请求;若没有,则建图过程结束。
本实施例通过构造命名字符串并查询哈希表中命名字符串等的操作,在合理的应用场景下,同样能够快速完成建图以及重复子表达式的检查和消除,具有高效、同步的优点。
与前述方法相应地,本发明还提供一种计算流图构建装置,该装置包括处理器和存储器,该存储器用于存储计算机指令,该处理器用于执行存储器中存储的计算机指令,当计算机指令被处理器执行时该装置实现如前所述各个方法步骤。
本公开还涉及存储介质,其上可以存储有计算机程序代码,当程序代码被执行时可以实现本发明的方法的各种实施例,该存储介质可以是有形存储介质,诸如光盘、U盘、软盘、硬盘等。
本领域普通技术人员应该可以明白,结合本文中所公开的实施方式描述的各示例性的组成部分、系统和方法,能够以硬件、软件或者二者的结合来实现。具体究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。当以硬件方式实现时,其可以例如是电子电路、专用集成电路(ASIC)、适当的固件、插件、功能卡等等。当以软件方式实现时,本发明的元素是被用于执行所需任务的程序或者代码段。程序或者代码段可以存储在机器可读介质中,或者通过载波中携带的数据信号在传输介质或者通信链路上传送。“机器可读介质”可以包括能够存储或传输信息的任何介质。机器可读介质的例子包括电子电路、半导体存储器设备、ROM、闪存、可擦除ROM(EROM)、软盘、CD-ROM、光盘、硬盘、光纤介质、射频(RF)链路,等等。代码段可以经由诸如因特网、内联网等的计算机网络被下载。
还需要说明的是,本发明中提及的示例性实施例,基于一系列的步骤或者装置描述一些方法或系统。但是,本发明不局限于上述步骤的顺序,也就是说,可以按照实施例中提及的顺序执行步骤,也可以不同于实施例中的顺序,或者若干步骤同时执行。
本发明中,针对一个实施方式描述和/或例示的特征,可以在一个或更多个其它实施方式中以相同方式或以类似方式使用,和/或与其他实施方式的特征相结合或代替其他实施方式的特征。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明实施例可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (8)
1.一种计算流图构建方法,其特征在于,该方法包括:
接收添加节点的请求,该请求中包含:待添加节点的运算信息和源数据节点的数据结构信息;
基于所述添加节点的请求生成待添加节点的格式化命名字符串,所述格式化命名字符串包含待添加节点运算信息和基于源数据节点的数据结构信息获得的待添加节点的源数据节点标识;
将生成的格式化命名字符串作为关键码值在已构建的全局哈希表中进行检索,所述全局哈希表中包括已添加节点的格式化命名字符串;
在所述全局哈希表中检索到与格式化命名字符串相匹配的条目的情况下,在已构建的流图结构中不添加所述待添加的节点;在所述全局哈希表中未检索到与格式化命名字符串相匹配的条目的情况下,在已构建的流图结构中添加所述待添加的节点,获取新加节点的数据结构访问地址,并通过全局标识分配操作得到新加节点的标识;
在所述全局哈希表中添加新加节点对应的条目,所述新加节点对应的条目包括所述生成的格式化命名字符串;
基于所述添加节点的请求生成待添加节点的格式化命名字符串的步骤包括:基于所述添加节点的请求获得包括待添加节点的运算信息和基于源数据节点的数据结构信息获得的源数据节点标识在内的多段数据,将获得的多段数据按照预定的顺序排列并通过预定的分隔符进行分隔,而生成待添加节点的格式化命名字符串;
对于对源数据节点的顺序有要求的运算,所述预定的顺序包括运算中源数据节点的逻辑顺序;
对于对源数据节点的顺序无要求的运算,所述预定的顺序包括运算中源数据标识信息从小到大的顺序。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
将已构建流图的所有节点或新加节点的数据结构信息进行输出和/或存储。
3.根据权利要求1所述的方法,其特征在于,
所述全局哈希表中还包括已添加节点的数据结构信息,所述全局哈希表中添加的新加节点对应的条目还包括所述新加节点的数据结构信息。
4.根据权利要求3所述的方法,其特征在于,所述全局哈希表中的数据结构信息包括数据结构访问地址信息;所述方法还包括:
在所述全局哈希表中检索到与格式化命名字符串相匹配的条目情况下,基于相匹配的条目中的数据结构访问地址信息将对应节点的数据结构进行输出;
在所述全局哈希表中未检索到与格式化命名字符串相匹配的条目情况下,基于所述全局哈希表中新加节点对应的条目中的数据结构访问地址信息将新加节点的数据结构进行输出。
5.根据权利要求4所述的方法,其特征在于,所述全局哈希表包括第一哈希表和第二哈希表,所述第一哈希表中存储有已添加节点的格式化命名字符串及节点标识,所述第二哈希表中存储有已添加节点的标识以及已添加节点的数据结构访问地址信息。
6.根据权利要求1所述的方法,其特征在于,所述格式化命名字符串具有预定长度。
7.一种计算流图构建装置,该装置包括处理器和存储器,其特征在于,所述存储器中存储有计算机指令,所述处理器用于执行所述存储器中存储的计算机指令,当所述计算机指令被处理器执行时该装置实现权利要求1-6中任意一项所述方法的步骤。
8.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1至6中任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910246712.4A CN109960751B (zh) | 2019-03-29 | 2019-03-29 | 计算流图构建方法、装置和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910246712.4A CN109960751B (zh) | 2019-03-29 | 2019-03-29 | 计算流图构建方法、装置和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109960751A CN109960751A (zh) | 2019-07-02 |
CN109960751B true CN109960751B (zh) | 2020-02-18 |
Family
ID=67025311
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910246712.4A Active CN109960751B (zh) | 2019-03-29 | 2019-03-29 | 计算流图构建方法、装置和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109960751B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115437756A (zh) * | 2021-06-03 | 2022-12-06 | 北京希姆计算科技有限公司 | 计算流图调度方案的生成方法、装置、电子设备及计算机可读存储介质 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102289738A (zh) * | 2011-07-28 | 2011-12-21 | 冶金自动化研究设计院 | 流程网络模型的建立方法 |
US10467217B2 (en) * | 2013-03-19 | 2019-11-05 | Texas Instruments Incorporated | Loop detection in cuckoo hashtables |
CN103677811B (zh) * | 2013-11-26 | 2017-02-15 | 中国空间技术研究院 | 一种航天器研制流程设计系统及方法 |
CN104820705B (zh) * | 2015-05-13 | 2017-11-10 | 华中科技大学 | 一种可扩展的面向关联的流式图数据划分方法 |
US10242065B1 (en) * | 2016-06-30 | 2019-03-26 | EMC IP Holding Company LLC | Combining merkle trees in graph databases |
-
2019
- 2019-03-29 CN CN201910246712.4A patent/CN109960751B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN109960751A (zh) | 2019-07-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113691486B (zh) | 报文修改的方法、装置、设备及存储介质 | |
US20210109920A1 (en) | Method for Validating Transaction in Blockchain Network and Node for Configuring Same Network | |
US10360002B2 (en) | Method, apparatus, and computer-readable medium for generating an alternative implementation of a program on one or more engines | |
US11494448B2 (en) | Database server device, server system and request processing method | |
US9043757B2 (en) | Identifying differences between source codes of different versions of a software when each source code is organized using incorporated files | |
US20140222870A1 (en) | System, Method, Software, and Data Structure for Key-Value Mapping and Keys Sorting | |
JP2015064876A (ja) | 二分木を用いてモデル化される工業製品を設計するためのコンピュータ実装方法 | |
KR20160130256A (ko) | 데이터 유형에 관련된 데이터 프로파일링 동작 관리 | |
US8381218B2 (en) | Managing groups of computing entities | |
US10891307B2 (en) | Distributed data synchronization in a distributed computing system | |
CN111737228B (zh) | 数据库的分库分表方法及装置 | |
CN116822422B (zh) | 数字逻辑电路的分析优化方法及相关设备 | |
US9002899B2 (en) | Method of merging and incremental construction of minimal finite state machines | |
CN109960751B (zh) | 计算流图构建方法、装置和存储介质 | |
CN115618010A (zh) | 融合图谱的存储和处理方法及装置 | |
CN113515303B (zh) | 一种项目转型方法、装置和设备 | |
CN114020840A (zh) | 一种数据处理方法、装置、服务器、存储介质及产品 | |
US10545741B2 (en) | Information processing apparatus, method of compiling, and storage medium | |
US8689200B1 (en) | Method and system for optimizing an executable program by generating special operations for identical program entities | |
CN113157720A (zh) | 查询语句的处理方法、装置、设备及介质 | |
CN115130043B (zh) | 基于数据库的数据处理方法、装置、设备及存储介质 | |
CN112579151A (zh) | 一种模型文件的生成方法和装置 | |
CN113688289B (zh) | 数据包关键字段匹配方法、装置、设备及存储介质 | |
US8683455B1 (en) | Method and system for optimizing an executable program by selectively merging identical program entities | |
CN114490095B (zh) | 请求结果的确定方法和装置、存储介质及电子装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |