CN116127667A - 有向图的层次布局方法、装置、电子设备及存储介质 - Google Patents
有向图的层次布局方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN116127667A CN116127667A CN202310162927.4A CN202310162927A CN116127667A CN 116127667 A CN116127667 A CN 116127667A CN 202310162927 A CN202310162927 A CN 202310162927A CN 116127667 A CN116127667 A CN 116127667A
- Authority
- CN
- China
- Prior art keywords
- node
- nodes
- hierarchical
- graph
- link
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/10—Geometric CAD
- G06F30/18—Network design, e.g. design based on topological or interconnect aspects of utility systems, piping, heating ventilation air conditioning [HVAC] or cabling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/20—Design optimisation, verification or simulation
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Geometry (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Evolutionary Computation (AREA)
- Computational Mathematics (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Optimization (AREA)
- Mathematical Analysis (AREA)
- Computer Networks & Wireless Communication (AREA)
- Document Processing Apparatus (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及人工智能技术领域,提供一种有向图的层次布局方法、装置、电子设备及存储介质,在获取到有向图的有向权信息后,根据有向权信息构建第一层次图,通过对所述第一层次图中的环路进行消环,得到没有环路的第二层次图,接着对第二层次图进行断网,得到没有网状结构的初始层次树,最后在确定所述层次树中节点的位置及节点的枝宽,即可根据所述节点的位置及节点的枝宽对所述初始层次树中具有父子关系的两个节点进行连线,得到目标层次树,从而完成了对有向图的层次布局。本发明没有采用交叉排除算法,直接在生成层次树的时候获得枝宽,线从枝缝里穿梭,不会发生成节点交叉,因此易于实现,提高了布局效率。
Description
技术领域
本发明涉及人工智能技术领域,具体涉及一种有向图的层次布局方法、装置、电子设备及存储介质。
背景技术
图是一种常见的数据结构和表示形式,可视化场景也经常会用到图来展现有关联关系的数据。进行图的可视化时,往往需要将其自动布局。
然而,发明人在实现本发明的过程中发现,现有技术中,针对图的布局,布局效率较低,且大多只适用于无环图,无法适用于环图。
发明内容
鉴于以上内容,有必要提出一种有向图的层次布局方法、装置、电子设备及存储介质,不仅能够体现出具有环网结构的拓扑图中的层次结构,且可以提高布局效率。
本发明的第一方面提供一种有向图的层次布局方法,所述方法包括:
响应于对有向图进行布局的指令,获取所述有向图的有向权信息;
根据所述有向图的有向权信息构建第一层次图;
对所述第一层次图中的环路进行消环,得到第二层次图;
对所述第二层次图进行断网,得到初始层次树;
确定所述层次树中节点的位置及节点的枝宽;
根据所述节点的位置及节点的枝宽对所述初始层次树中具有父子关系的两个节点进行连线,得到目标层次树。
在一个可选的实施方式中,所述根据所述有向图的有向权信息构建第一层次图包括:
根据所述有向图的有向权信息确定所述有向图中的父节点及叶子节点;
根据所述父节点的节点标识及所述父节点的叶子节点的节点标识生成节点数组,并将所述节点数组存储于所述父节点中;
根据所述父节点、所述叶子节点及所述叶子节点的层次构建第一层次图。
在一个可选的实施方式中,所述根据所述父节点、所述叶子节点及所述叶子节点的层次构建第一层次图包括:
计算所述父节点的数量;
判断所述数量是否为1;
当所述数量为1时,将所述父节点确定为所述第一层次图中的根节点;
当所述数量大于1时,生成一个伪节点,并将所述伪节点作为所述第一层次图中多个所述父节点的根节点。
在一个可选的实施方式中,所述对所述第一层次图中的环路进行消环,得到第二层次图包括:
初始化链路路径数组;
从所述第一层次图的根节点开始沿所述叶子节点方向进行遍历;
每遍历到一个节点,判断所述遍历到的节点是否在所述链路路径数组中;
当确定所述遍历到的节点不在所述链路路径数组中,根据所述遍历到的节点更新所述链路路径数组,并继续遍历所述节点的叶子节点,判断遍历到的叶子是否在更新后的链路路径数组中;
当确定所述遍历到的节点在所述链路路径数组中,根据所述节点数组将所述遍历到的节点与所述遍历到的节点的父节点之间的链路断开,得到所述第二层次图。
在一个可选的实施方式中,所述对所述第二层次图进行断网,得到初始层次树包括:
从所述第二层次图的根节点开始进行遍历;
每遍历到一个节点,获取从所述根节点到所述节点的链路;
当所述链路有多条时,计算每条所述链路的链路长度;
从多条所述链路中获取最大的链路长度对应的链路,作为目标链路;
将多条所述链路中除所述目标链路外的每一条所述链路与所述目标链路从末尾向前进行比较,得到每一条所述链路中与所述目标链路的不同节点;
根据所述节点数组将每一条所述链路中所述不同节点与所述不同节点的叶子节点之间的链路进行断开,得到所述初始层次树。
在一个可选的实施方式中,所述确定所述层次树中节点的位置及节点的枝宽包括:
从所述根节点开始进行遍历至目标叶子节点,作为目标叶子节点;
确定所述目标叶子节点的第一位置;
根据所述第一位置依次确定所述目标叶子节点的兄弟节点,直至最右兄弟节点的第二位置;
根据所述第一位置及所述第二位置确定所述目标叶子节点的父节点的第三位置;
根据所述第一位置、所述第二位置及所述第三位置确定所述父节点的枝宽。
在一个可选的实施方式中,所述根据所述节点的位置及节点的枝宽对所述初始层次树中具有父子关系的两个节点进行连线,得到目标层次树包括:
在具有父子关系的两个节点之间,生成预设个数的虚拟节点;
根据预设坐标计算规则确定每个虚拟节点的位置;
对每两个相邻的虚拟节点之间进行连线,得到所述目标层次树。
本发明的第二方面提供一种有向图的层次布局装置,所述装置包括:
获取模块,用于响应于对有向图进行布局的指令,获取所述有向图的有向权信息;
构建模块,用于根据所述有向图的有向权信息构建第一层次图;
消环模块,用于对所述第一层次图中的环路进行消环,得到第二层次图;
断网模块,用于对所述第二层次图进行断网,得到初始层次树;
计算模块,用于确定所述层次树中节点的位置及节点的枝宽;
连线模块,用于根据所述节点的位置及节点的枝宽对所述初始层次树中具有父子关系的两个节点进行连线,得到目标层次树。
本发明的第三方面提供一种电子设备,所述电子设备包括处理器和存储器,所述处理器用于执行所述存储器中存储的计算机程序时实现所述有向图的层次布局方法。
本发明的第四方面提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现所述有向图的层次布局方法。
本发明在获取到有向图的有向权信息后,根据有向图的有向权信息构建第一层次图,由于第一层次图可能存在环路(包括自环)和网状结构,则通过对所述第一层次图中的环路进行消环,得到第二层次图,接着对所述第二层次图进行断网,得到初始层次树;得到的初始层次树中既没有环路,也没有网状结构,因而在确定所述层次树中节点的位置及节点的枝宽,即可根据所述节点的位置及节点的枝宽对所述初始层次树中具有父子关系的两个节点进行连线,得到目标层次树,从而完成了对有向图的层次布局。本发明实施方式没有采用交叉排除算法,直接在生成层次树的时候获得枝宽,线从枝缝里穿梭,不会发生成节点交叉,因此易于实现,提高了布局效率。
附图说明
图1是本发明实施例一提供的有向图的层次布局方法的流程图。
图2是有向无环图的示意图。
图3是有向有环图的示意图。
图4是生成虚拟节点作为有向树的根节点的示意图。
图5是带有自环的层次图的示意图。
图6是带有环路的层次图的示意图。
图7是具有网状结构的层次图的示意图。
图8是层次树的示意图。
图9是在具有父子关系的两个节点之间生成的多个虚拟节点的示意图。
图10是本发明实施例二提供的有向图的层次布局装置的结构图。
图11是本发明实施例三提供的电子设备的结构示意图。
具体实施方式
为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施例对本发明进行详细描述。在不冲突的情况下,本发明的实施例及实施例中的特征可以相互组合。
除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中在本发明的说明书中所使用的术语只是为了描述在一个可选的实施方式中实施例的目的,不是旨在于限制本发明。
本发明实施例提供的有向图的层次布局方法由电子设备执行,相应地,有向图的层次布局装置运行于电子设备中。
本发明实施例可以基于人工智能技术对症状进行标准化处理。其中,人工智能(Artificial Intelligence,AI)是利用数字计算机或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用系统。
人工智能基础技术一般包括如传感器、专用人工智能芯片、云计算、分布式存储、大数据处理技术、操作/交互系统、机电一体化等技术。人工智能软件技术主要包括计算机视觉技术、机器人技术、生物识别技术、语音处理技术、自然语言处理技术以及机器学习/深度学习等几大方向。
实施例一
图是一种常见的数据结构和表示形式,可视化场景也经常会用到图来展现有关联关系的数据。进行图的可视化时,往往需要将其自动布局,而针对不同的问题和场景,需要不同的布局方法。在数据有一定层级结构或先后顺序时,经常会用到层次布局来展现,一般对应的数据结构是有向无环图(Directed Acyclic Graph,DAG)。常用的场景包括:流程图、组织架构图、状态转移图等。层次布局的方法又被称为Sugiyama布局(简称S布局)。S布局分别从分层,交叉,平衡进行考虑,每一点实现起来都很复杂。从分层而言,若穿过了一层则在相应层增加一个伪节点,在建立过程中要消耗伪节点,到最后还要消掉伪节点,这当中的算法很复杂,需要消耗较多的资源。从分叉而言,需要用很复杂的算法来交换各层的顺序,从而来减少交叉,而且还不一定保证没有交叉。此外,S布局仅适用于无环图,无法适用于环图,对于环图而言,需要先消环,而消环需要有消环算法。消环算法实现非常复杂,导致用S布局进行布局,效率非常低下。
图1是本发明实施例一提供的有向图的层次布局方法的流程图。所述有向图的层次布局方法具体包括以下步骤,根据不同的需求,该流程图中步骤的顺序可以改变,某些可以省略。
S11,响应于对有向图进行布局的指令,获取所述有向图的有向权信息。
本发明实施方式中的有向图可以包括有向无环图及有向有环图。
如果用箭头标明了边是有方向性的,则这样的图称为有向图。如果一个有向图无法从某个节点出发经过若干条边回到该节点,则这个图是一个有向无环图(DirectedAcyclic Graph,DAG),有向无环图是一个无回路的有向图。如图2所示,为有向无环图,图2中的任意一个节点,从该节点出发经若干条边后均无法回到该节点。如果一个有向图能够从某个节点出发经过若干条边回到该节点,则这个图是一个有向有环图,有向有环图是一个有回路的有向图。如图3所示,为有向有环图,图3中的节点B出发向节点D经节点E又到节点B,形成一个环路。如果将图3中从节点E到节点B的边方向改为从节点B到节点E,则变成有向无环图。
用户可以将有向图上传至本地,也可以将有向图上传至服务器,还可以将有向图上传至区块链,相应地,电子设备可以从本地获取有向图,也可以从服务器获取有向图,还可以从区块链获取有向图。电子设备在获取到有向图后,确定触发了对获取的有向图进行层次布局的指令,响应于该指令,获取有向图的有向权信息。
其中,有向权信息可以包括,但不限于,节点标识、节点之间的边方向、节点宽度。节点标识是指唯一区别节点的字符串,节点宽度是指节点的字符串的宽度。例如,节点A的字符串为company,则节点A的节点宽度可以为7,节点A的字符串为department,则节点A的节点宽度可以为10。
S12,根据所述有向图的有向权信息构建第一层次图。
电子设备在获取到有向图的有向权信息之后,根据所述有向权信息,建立具有层次结构的第一层次图。
在一个可选的实施方式中,所述根据所述有向图的有向权信息构建第一层次图包括:
根据所述有向图的有向权信息确定所述有向图中的父节点及叶子节点;
根据所述父节点的节点标识及所述父节点的叶子节点的节点标识生成节点数组,并将所述节点数组存储于所述父节点中;
根据所述父节点、所述叶子节点及所述叶子节点的层次构建第一层次图。
在有向图中,箭头是具有方向的,即从一个节点指向另一个节点,每个节点被指向的箭头个数,就是节点的入度,从节点指出去的箭头个数,就是节点的出度。电子设备根据有向权信息中的边方向,确定每个节点的出度和入度,将入度为零的节点确定为父节点。父节点指向的节点确定为叶子节点,叶子节点指向的节点确定为叶子节点。
如图3所示,图3中的节点标识为A,B,C,D,E。其中,节点A的入度为零,则将节点A确定为父节点,父节点指向的节点B和节点C确定为节点A的叶子节点,节点B指向的D节点确定为节点B的叶子节点,节点D指向的节点E确定为节点D的叶子节点,节点E指向的节点B确定为节点E的叶子节点。如此,节点A中存储的节点数组为[A:B,C],节点B中存储的节点数组为[B:D],节点C中存储的节点数组为[C:],节点D中存储的节点数组为[D:E],节点E中存储的节点数组为[E:B]。
应当理解的是,本实施方式中的父节点可以为一个,也可以为多个。
在一个可选的实施方式中,所述根据所述父节点、所述叶子节点及所述叶子节点的层次构建第一层次图包括:
计算所述父节点的数量;
判断所述数量是否为1;
当所述数量为1时,将所述父节点确定为所述第一层次图中的根节点;
当所述数量大于1时,生成一个伪节点,并将所述伪节点作为所述第一层次图中多个所述父节点的根节点。
本发明的目的是为了将有向图进行层次布局,从而得到有向树,而有向树只能有一个根节点,因此,当第一层次图中的父节点的数量为1时,可以将这个父节点作为第一层次图的根节点,即后续生成的有向树中的根节点。但当父节点为多个时,则需要生成一个虚拟节点作为多个父节点的根节点,即,将这个虚拟节点伪造为后续生成的有向树中的根节点。
如图4所示,图中有两个父节点A和F,生成一个虚拟节点,作为有向树的根节点。
S13,对所述第一层次图中的环路进行消环,得到第二层次图。
电子设备遍历所述第一层次图,并将所述第一层次图中的环路切断,从而实现第一层次图中的环路的消除,得到第二层次图。
其中,环路还包括自环。
在一个可选的实施方式中,所述对所述第一层次图中的环路进行消环,得到第二层次图包括:
初始化链路路径数组;
从所述第一层次图的根节点开始沿所述叶子节点方向进行遍历;
每遍历到一个节点,判断所述遍历到的节点是否在所述链路路径数组中;
当确定所述遍历到的节点不在所述链路路径数组中,根据所述遍历到的节点更新所述链路路径数组,并继续遍历所述节点的叶子节点,判断遍历到的叶子是否在更新后的链路路径数组中;
当确定所述遍历到的节点在所述链路路径数组中,根据所述节点数组将所述遍历到的节点与所述遍历到的节点的父节点之间的链路断开,得到所述第二层次图。
电子设备初始化的链路路径数组可以为一个空数组。电子设备从所述根节点开始,沿所述叶子节点方向,采用深度优先递归的方式对所述第一层次图进行遍历。电子设备在遍历到根节点之后,更新初始化的链路路径数组,然后接着从根节点开始沿着叶子节点的方向进行深度递归,每遍历到一个节点,判断该节点是否在更新后的链路路径数组中。
如果该节点不在更新后的链路路径数组中,表明没有自环或者环路产生,则将该节点写入链路路径数组中,从而实现对链路路径数组的更新,并遍历该节点的叶子节点,重复上述过程,直至完成对所有节点的遍历,并得到最终的链路路径数组。
如果该节点在更新后的链路路径数组中,表明有自环或者环路产生,则根据所述节点数组将所述遍历到的节点与所述遍历到的节点的父节点之间的链路断开包括:从链路路径数组中取出最后一个节点,并将遍历到的节点从取出的节点对应的节点数组中移除,从而实现将所述遍历到的节点与所述遍历到的节点的父节点之间的链路断开,进而实现对第一层次图中的自环或者环路进行消环的目的。
如图5所示,为带有自环的第一层次图的示意图,其中,节点A为根节点,节点B和节点C分别是根节点A的叶子节点,且节点B的叶子节点为节点B自身,即,节点B处产生了一个自环。图5中,节点A中存储的节点数组为[A:B,C],节点B中存储的节点数组为[B:B],节点C中存储的节点数组为[C:]。
电子设备从节点A开始,沿着叶子节点进行深度优先遍历。首先遍历节点A,由于节点A为根节点,自然不在初始化的链路路径数组(空数组)中,则根据节点A更新链路路径数组为[A]。接着,电子设备遍历节点A的叶子节点B,判断节点B是否在更新后的链路路径数组[A]中,由于节点B不在更新后的链路路径数组[A]中,则根据节点B更新链路路径数组为[A,B]。电子设备继续遍历节点B的叶子节点B。显然,节点B在更新后的链路路径数组[A,B]中,则电子设备从链路路径数组[A,B]中取出最后一个节点B,并把将遍历到的节点B从取出的节点B对应的节点数组[B:B]中移除,则节点B中存储的节点数组为[B:],如此电子设备将遍历到的叶子节点B与其父节点B之间的链路断开。电子设备再遍历节点A的叶子节点C,判断节点C是否在更新后的链路路径数组[A,B]中,由于节点C不在更新后的链路路径数组[A,B]中,则根据节点C更新链路路径数组为[A,B,C]。
如图6所示,为带有环路的第一层次图的示意图,其中,节点A为根节点,节点B是根节点A的叶子节点,节点D是节点B的叶子节点,节点E是节点D的叶子节点,而节点B为节点E的叶子节点,可见,在节点B、D、E之间产生了一个环路。图6中,节点A中存储的节点数组为[A:B],节点B中存储的节点数组为[B:D],节点D中存储的节点数组为[D:E],节点E中存储的节点数组为[E:B]。
电子设备从节点A开始,沿着叶子节点进行深度优先遍历,首先遍历节点A,由于节点A为根节点,自然不在初始化的链路路径数组(空数组)中,则根据节点A更新链路路径数组为[A]。接着,电子设备遍历节点A的叶子节点B,判断节点B是否在更新后的链路路径数组[A]中,由于节点B不在更新后的链路路径数组[A]中,则根据节点B更新链路路径数组为[A,B],继续遍历节点B的叶子节点D。判断节点D是否在更新后的链路路径数组[A,B]中,由于节点D不在更新后的链路路径数组[A,B]中,则根据节点D更新链路路径数组为[A,B,D]。再遍历节点D的叶子节点E,从而更新链路路径数组为[A,B,D,E]。当电子设备继续遍历节点E的叶子节点B时,确定节点B在更新后的链路路径数组[A,B,D,E]中,电子设备从链路路径数组[A,B,D,E]中取出最后一个节点E,并将遍历到的节点B从取出的节点E对应的节点数组[E:B]中移除,如此电子设备将遍历到的节点B与其父节点E之间的链路断开,从而实现了将环路BDE进行消环的目的。
S14,对所述第二层次图进行断网,得到初始层次树。
虽然得到的第二层次图中不包括了环路,但是第二层次图可能是树状图,也可能是网状图。如果是树状图,则从根节点出发到任意一个叶子节点只有一条链路。如果是网状图,则从根节点出发到某一个叶子节点有多条链路,网状结构表明第二层次图中至少有一个叶子节点存在多个父节点。
对于网状结构的第二层次图,电子设备将多条链路中最大的链路长度对应的链路进行保留,多条链路中的其他链路进行切断,从而实现对第二层次图的网状结构的断网,得到初始层次树。
在一个可选的实施方式中,所述对所述第二层次图进行断网,得到初始层次树包括:
从所述第二层次图的根节点开始进行遍历;
每遍历到一个节点,获取从所述根节点到所述节点的链路;
当所述链路有多条时,计算每条所述链路的链路长度;
从多条所述链路中获取最大的链路长度对应的链路,作为目标链路;
将多条所述链路中除所述目标链路外的每一条所述链路与所述目标链路从末尾向前进行比较,得到每一条所述链路中与所述目标链路的不同节点;
根据所述节点数组将每一条所述链路中所述不同节点与所述不同节点的叶子节点之间的链路进行断开,得到所述初始层次树。
电子设备从所述根节点开始,沿所述叶子节点方向,采用广度优先递归的方式对所述第二层次图进行遍历。每遍历到一个节点,电子设备获取从根节点到所遍历到的节点之间的所有链路。如果从根节点到所遍历到的节点之间的链路只有一条,表明从根节点到所遍历到的节点之间不存在网状结构。如果从根节点到所遍历到的节点之间的链路有多条,表明从根节点到所遍历到的节点之间存在网状结构。
电子设备可以将多条链路按照链路长度进行升序排序或者进行降序排序,并根据排序结果获取最大的链路长度,从而将多条链路分成两组,第一组是最大的链路长度对应的链路,确定为目标链路,第二组是多条链路中除目标链路之外的所有链路,确定为剩余链路。电子设备将剩余链路中的每一条链路与目标链路从末尾开始向前进行比较,如果判定末尾的两个节点是同一个节点,则继续将倒数第二的两个节点进行比较。如果判定倒数第二的两个节点是同一个节点,则继续将倒数第三的两个节点进行比较,直到判定出两个节点不同。如果判定某两个节点不是同一个节点,则根据所述节点数组将每一条所述链路中所述不同节点与所述不同节点的叶子节点之间的链路进行断开包括:从该节点的节点数组里将该节点的后一个节点移除,从而实现将所述不同节点与所述不同节点的叶子节点之间的链路进行断开,进而实现对第二层次图中的网状结构进行断网的目的。
当电子设备将剩余链路中的每一条链路均与目标链路进行了比较,并进行了移除操作之后,广度优先遍历结束,即可生成层次树。
如图7所示,为具有网状结构的层次图。图7中,节点A中存储的节点数组为[A:B,C],节点B中存储的节点数组为[B:D],节点C中存储的节点数组为[C:H],节点D中存储的节点数组为[D:E,F],节点E中存储的节点数组为[E:],节点F中存储的节点数组为[F:H],节点H中存储的节点数组为[H:E]。
从图7中可以发现,对于节点E,有多条链路,例如,链路1为A-B-D-E,链路2为A-B-D-F-H-E,链路3为A-C-H-E。
第一步,由于链路2的链路长度最大,则将链路2确定为目标链路。
第二步,将链路1与链路2从末尾进行比较,具体而言,将链路1的最后一个节点E与链路2的最后一个节点E进行比较,由于这两个节点相同,则将链路1的倒数第二个节点D与链路2的倒数第二个节点H进行比较,这两个节点不同。则从节点D的节点数组[D:E,F]中,将链路1中的节点D的后一个节点E移除,从而实现了将节点D与其叶子节点E之间的链路断开的目的。
第三步,将链路3与链路2从末尾进行比较,具体而言,将链路3的最后一个节点E与链路2的最后一个节点E进行比较,由于这两个节点相同,则将链路3的倒数第二个节点H与链路2的倒数第二个节点H进行比较,这两个节点相同,再将链路3的倒数第三个节点C与链路2的倒数第三个节点F进行比较,这两个节点不同。则则从节点C的节点数组[C:H]中,将链路3中的节点C的后一个节点H移除,从而实现了将节点C与其叶子节点H之间的链路断开的目的。
S15,确定所述层次树中节点的位置及节点的枝宽。
电子设备根据第二层次图得到层次树之后,为了进一步实现层次树的可视化效果,则需要将同一层节点设置于同一水平线上,且不重叠。通过计算层次树中节点的位置及节点间的枝宽后,即可将层次树进行重新布局。
在一个可选的实施方式中,所述确定所述层次树中节点的位置及节点的枝宽包括:
从所述根节点开始进行遍历至目标叶子节点,作为目标叶子节点;
确定所述目标叶子节点的第一位置;
根据所述第一位置依次确定所述目标叶子节点的兄弟节点,直至最右兄弟节点的第二位置;
根据所述第一位置及所述第二位置确定所述目标叶子节点的父节点的第三位置;
根据所述第一位置、所述第二位置及所述第三位置确定所述父节点的枝宽。
电子设备可以采用深度优先遍历的方式从层次树的根节点进行遍历,深度优先遍历的好处是能够快速的遍历到目标叶子节点。
电子设备可以根据显示屏幕的尺寸确定目标叶子节点的第一位置。例如,显示屏幕的尺寸为W*H,以显示屏幕左上角为坐标原点,以显示屏幕水平向右的方向为X轴,以显示屏幕垂直向下的方向为Y轴,则可以确定层次树中目标叶子节点的第一位置为(目标叶子节点的节点宽度,H)。
如果目标叶子节点有兄弟节点,最靠近目标叶子节点的第一兄弟节点的第二位置,则根据目标叶子节点的位置、第一兄弟节点的节点宽度、预设的两个节点之间的水平间距确定。第二靠近目标叶子节点的第二兄弟节点的第二位置,则根据第一兄弟节点的位置、第二兄弟节点的节点宽度、预设的两个节点之间的水平间距确定。以此类推,直到确定最右兄弟节点的第二位置。
电子设备根据所述第一位置及所述第二位置确定所述目标叶子节点的父节点的第三位置。具体而言,电子设备根据目标叶子节点的第一位置与最右兄弟节点的第二位置确定所述目标叶子节点的父节点的第三位置。目标叶子节点的父节点的第三位置可以根据最左叶子节点与最右兄弟节点的中心点及及预设节点之间的垂直间距及预设节点之间的垂直间距确定。
电子设备根据所述第一位置、所述第二位置及所述第三位置确定所述父节点的枝宽。具体而言,电子设备计算目标叶子节点的第一位置与最右兄弟节点的第一位置之间的差值,再将差值与目标叶子节点的父节点的节点宽度进行比较。当差值大于目标叶子节点的父节点的节点宽度,则将目标叶子节点的父节点的枝宽确定为差值。当差值小于目标叶子节点的父节点的节点宽度,则将目标叶子节点的父节点的枝宽确定为目标叶子节点的父节点的节点宽度。
电子设备在确定目标叶子节点的父节点的位置之后,即可确定父节点的兄弟节点的位置,再根据父节点的位置及父节点的兄弟节点的位置确定父节点的父节点的位置及枝宽。以此类推,直至确定根节点的位置及枝宽。
如图8所示,节点A为根节点,节点B为节点A的叶子节点,节点C、节点D及节点E均为节点B的叶子节点,且节点C、节点D及节点E为兄弟节点。
假设显示屏幕的宽度为W,长度为H,两个节点之间的水平间距为L1,两个节点之间的垂直间距为L2,节点i的节点宽度表示为i.X(i=A,B,C,D,E,例如,节点A的节点宽度表示为A.X),电子设备采用深度优先递归的方式从根节点A开始沿着叶子节点的方向进行遍历,找到最后一层最左叶子节点为节点C,确定叶子节点C的位置(C.X,H)。节点D为最靠近节点C的兄弟节点,电子设备根据节点C的位置(C.X,H)确定节点D的位置(C.X+D.X+L1,H),接着根据节点D的位置确定兄弟节点E的位置(C.X+D.X+E.X+2L1,H)。
电子设备根据最左叶子节点C和最右叶子节点E确定叶子节点C的父节点B的位置(1/2(2C.X++D.X+E.X+2L1),H-L2)。
电子设备确定节点B的父节点A的位置(1/2(2C.X++D.X+E.X+2L1),H-2L2)。
S16,根据所述节点的位置及节点的枝宽对所述初始层次树中具有父子关系的两个节点进行连线,得到目标层次树。
电子设备根据节点的位置及节点的枝宽对具有父子关系的两个节点进行连线,当所有具有父子关系的两个节点均进行了连线,则层次树就生成了,从而完成了对有向图的层次布局。
在一个可选的实施方式中,所述根据所述节点的位置及节点的枝宽对所述初始层次树中具有父子关系的两个节点进行连线,得到目标层次树包括:
在具有父子关系的两个节点之间,生成预设个数的虚拟节点;
根据预设坐标计算规则确定每个虚拟节点的位置;
对每两个相邻的虚拟节点之间进行连线,得到所述目标层次树。
其中,预设个数可以为7,即电子设备在具有父子关系的两个节点之间生成7个虚拟节点,从而将具有父子关系的两个节点的连线抽象成6条线段。
如图9所示,具有父子关系的两个节点为P和Q,节点Q为节点P的叶子节点,生成的7个虚拟节点依次为P1、P2、P3,T、Q1、Q2、Q3,则线段分别是P1P2,P2P3,P3T,TQ3,Q3Q2,Q2Q1。
节点P的横坐标用P.x表示,纵坐标用P.y表示,节点P的节点宽度用P.width表示,节点P的节点高度用P.height表示,节点Q的横坐标用Q.x表示,纵坐标用Q.y表示,节点Q的节点宽度用Q.width表示,节点Q的节点高度用Q.height表示,则预设的这7个虚拟节点的坐标计算规则如下:
Q1(Q.x+Q.width/2,Q.y);
Q2(Q1.x,Q.y-Q.height/2);
Q3(Q2.x+dir*(Q.width/2+space),Q2.y);dir是节点Q在节点P的左边,dir为1,节点Q在节点P的右边,dir为-1,space是节点之间的空隙距离。
P1(P.x+P.width/2,P.y+p.height);
P2(P1.x,P1.y+P.height/2);
P3(P2.x,P2.y-P.height/2);
T(P3.x,Q3.y)。
上述可选的实施方式,通过生成虚拟节点,并在两个相邻的虚拟节点之间进行连线,从而实现对具有父子关系的两个节点进行连线,能够有效的避免节点的连线出现交叉的现象,减少了连线的相互干扰。
在一个可选的实施方式中,在生成虚拟节点的时候,可能会出现虚拟节点塌陷的情况,比如,当虚拟节点Q3与虚拟节点P3点共线(但不是平行的情况),此时,电子设备将虚拟节点Q3与虚拟节点Q2进行重合,虚拟节点P3与虚拟节点P2进行重合。又比如,当虚拟节点T与虚拟节点Q2共线(但不是平行的情况),则电子设备将虚拟节点T与虚拟节点Q3进行重合。
在完成对有向图的层次布局得到目标层次树之后,电子设备还可以采用第一显示方式显示所述目标层次树中的最短链路、采用第二显示方式显示所述目标层次树中的最长链路,第一显示方式和第二显示方式不同,目的是为了区分最短链路和最长链路,方便用户查看,第一显示方式可以是红色标记,第二显示方式可以是蓝色标记。当电子设备侦测到所述目标层次树中的某个节点接收到触摸指令时,可以获取包含被触摸的节点的所有链路并高亮显示。电子设备侦测到目标层次树上接收到缩放指令时,对目标层次树进行缩放显示。
综上,本发明实施方式提供的有向图的层次布局方法,获取到有向图的有向权信息后,根据有向图的有向权信息构建第一层次图,由于第一层次图可能存在环路(包括自环)和网状结构,则通过对所述第一层次图中的环路进行消环,得到第二层次图,接着对所述第二层次图进行断网,得到初始层次树;得到的初始层次树中既没有环路,也没有网状结构,因而在确定所述层次树中节点的位置及节点的枝宽,即可根据所述节点的位置及节点的枝宽对所述初始层次树中具有父子关系的两个节点进行连线,得到目标层次树,从而完成了对有向图的层次布局。本发明实施方式没有采用交叉排除算法,直接在生成层次树的时候获得枝宽,线从枝缝里穿梭,不会发生成节点交叉,因此易于实现,提高了布局效率。
实施例二
图10是本发明实施例二提供的有向图的层次布局装置的结构图。
在一些实施例中,所述有向图的层次布局装置100可以包括多个由计算机程序段所组成的功能模块。所述有向图的层次布局装置100中的各个程序段的计算机程序可以存储于电子设备的存储器中,并由至少一个处理器所执行,以执行(详见图1描述)有向图的层次布局的功能。
本实施例中,所述有向图的层次布局装置100根据其所执行的功能,可以被划分为多个功能模块。所述功能模块可以包括:获取模块1001、构建模块1002、消环模块1003、断网模块1004、计算模块1005及连线模块1006。本发明所称的模块是指一种能够被至少一个处理器所执行并且能够完成固定功能的一系列计算机程序段,其存储在存储器中。在本实施例中,关于各模块的功能将在后续的实施例中详述。
所述获取模块1001,用于响应于对有向图进行布局的指令,获取所述有向图的有向权信息。
本发明实施方式中的有向图可以包括有向无环图及有向有环图。
如果用箭头标明了边是有方向性的,则这样的图称为有向图。如果一个有向图无法从某个节点出发经过若干条边回到该节点,则这个图是一个有向无环图(DirectedAcyclic Graph,DAG),有向无环图是一个无回路的有向图。如图2所示,为有向无环图,图2中的任意一个节点,从该节点出发经若干条边后均无法回到该节点。如果一个有向图能够从某个节点出发经过若干条边回到该节点,则这个图是一个有向有环图,有向有环图是一个有回路的有向图。如图3所示,为有向有环图,图3中的节点B出发向节点D经节点E又到节点B,形成一个环路。如果将图3中从节点E到节点B的边方向改为从节点B到节点E,则变成有向无环图。
用户可以将有向图上传至本地,也可以将有向图上传至服务器,还可以将有向图上传至区块链,相应地,电子设备可以从本地获取有向图,也可以从服务器获取有向图,还可以从区块链获取有向图。电子设备在获取到有向图后,确定触发了对获取的有向图进行层次布局的指令,响应于该指令,获取有向图的有向权信息。
其中,有向权信息可以包括,但不限于,节点标识、节点之间的边方向、节点宽度。节点标识是指唯一区别节点的字符串,节点宽度是指节点的字符串的宽度。例如,节点A的字符串为company,则节点A的节点宽度可以为7,节点A的字符串为department,则节点A的节点宽度可以为10。
所述构建模块1002,用于根据所述有向图的有向权信息构建第一层次图。
电子设备在获取到有向图的有向权信息之后,根据所述有向权信息,建立具有层次结构的第一层次图。
在一个可选的实施方式中,所述根据所述有向图的有向权信息构建第一层次图包括:
根据所述有向图的有向权信息确定所述有向图中的父节点及叶子节点;
根据所述父节点的节点标识及所述父节点的叶子节点的节点标识生成节点数组,并将所述节点数组存储于所述父节点中;
根据所述父节点、所述叶子节点及所述叶子节点的层次构建第一层次图。
在有向图中,箭头是具有方向的,即从一个节点指向另一个节点,每个节点被指向的箭头个数,就是节点的入度,从节点指出去的箭头个数,就是节点的出度。电子设备根据有向权信息中的边方向,确定每个节点的出度和入度,将入度为零的节点确定为父节点。父节点指向的节点确定为叶子节点,叶子节点指向的节点确定为叶子节点。
如图3所示,图3中的节点标识为A,B,C,D,E。其中,节点A的入度为零,则将节点A确定为父节点,父节点指向的节点B和节点C确定为节点A的叶子节点,节点B指向的D节点确定为节点B的叶子节点,节点D指向的节点E确定为节点D的叶子节点,节点E指向的节点B确定为节点E的叶子节点。如此,节点A中存储的节点数组为[A:B,C],节点B中存储的节点数组为[B:D],节点C中存储的节点数组为[C:],节点D中存储的节点数组为[D:E],节点E中存储的节点数组为[E:B]。
应当理解的是,本实施方式中的父节点可以为一个,也可以为多个。
在一个可选的实施方式中,所述根据所述父节点、所述叶子节点及所述叶子节点的层次构建第一层次图包括:
计算所述父节点的数量;
判断所述数量是否为1;
当所述数量为1时,将所述父节点确定为所述第一层次图中的根节点;
当所述数量大于1时,生成一个伪节点,并将所述伪节点作为所述第一层次图中多个所述父节点的根节点。
本发明的目的是为了将有向图进行层次布局,从而得到有向树,而有向树只能有一个根节点,因此,当第一层次图中的父节点的数量为1时,可以将这个父节点作为第一层次图的根节点,即后续生成的有向树中的根节点。但当父节点为多个时,则需要生成一个虚拟节点作为多个父节点的根节点,即,将这个虚拟节点伪造为后续生成的有向树中的根节点。
如图4所示,图中有两个父节点A和F,生成一个虚拟节点,作为有向树的根节点。
所述消环模块1003,用于对所述第一层次图中的环路进行消环,得到第二层次图。
电子设备遍历所述第一层次图,并将所述第一层次图中的环路切断,从而实现第一层次图中的环路的消除,得到第二层次图。
其中,环路还包括自环。
在一个可选的实施方式中,所述对所述第一层次图中的环路进行消环,得到第二层次图包括:
初始化链路路径数组;
从所述第一层次图的根节点开始沿所述叶子节点方向进行遍历;
每遍历到一个节点,判断所述遍历到的节点是否在所述链路路径数组中;
当确定所述遍历到的节点不在所述链路路径数组中,根据所述遍历到的节点更新所述链路路径数组,并继续遍历所述节点的叶子节点,判断遍历到的叶子是否在更新后的链路路径数组中;
当确定所述遍历到的节点在所述链路路径数组中,根据所述节点数组将所述遍历到的节点与所述遍历到的节点的父节点之间的链路断开,得到所述第二层次图。
电子设备初始化的链路路径数组可以为一个空数组。电子设备从所述根节点开始,沿所述叶子节点方向,采用深度优先递归的方式对所述第一层次图进行遍历。电子设备在遍历到根节点之后,更新初始化的链路路径数组,然后接着从根节点开始沿着叶子节点的方向进行深度递归,每遍历到一个节点,判断该节点是否在更新后的链路路径数组中。
如果该节点不在更新后的链路路径数组中,表明没有自环或者环路产生,则将该节点写入链路路径数组中,从而实现对链路路径数组的更新,并遍历该节点的叶子节点,重复上述过程,直至完成对所有节点的遍历,并得到最终的链路路径数组。
如果该节点在更新后的链路路径数组中,表明有自环或者环路产生,则根据所述节点数组将所述遍历到的节点与所述遍历到的节点的父节点之间的链路断开包括:从链路路径数组中取出最后一个节点,并将遍历到的节点从取出的节点对应的节点数组中移除,从而实现将所述遍历到的节点与所述遍历到的节点的父节点之间的链路断开,进而实现对第一层次图中的自环或者环路进行消环的目的。
如图5所示,为带有自环的第一层次图的示意图,其中,节点A为根节点,节点B和节点C分别是根节点A的叶子节点,且节点B的叶子节点为节点B自身,即,节点B处产生了一个自环。图5中,节点A中存储的节点数组为[A:B,C],节点B中存储的节点数组为[B:B],节点C中存储的节点数组为[C:]。
电子设备从节点A开始,沿着叶子节点进行深度优先遍历。首先遍历节点A,由于节点A为根节点,自然不在初始化的链路路径数组(空数组)中,则根据节点A更新链路路径数组为[A]。接着,电子设备遍历节点A的叶子节点B,判断节点B是否在更新后的链路路径数组[A]中,由于节点B不在更新后的链路路径数组[A]中,则根据节点B更新链路路径数组为[A,B]。电子设备继续遍历节点B的叶子节点B。显然,节点B在更新后的链路路径数组[A,B]中,则电子设备从链路路径数组[A,B]中取出最后一个节点B,并把将遍历到的节点B从取出的节点B对应的节点数组[B:B]中移除,则节点B中存储的节点数组为[B:],如此电子设备将遍历到的叶子节点B与其父节点B之间的链路断开。电子设备再遍历节点A的叶子节点C,判断节点C是否在更新后的链路路径数组[A,B]中,由于节点C不在更新后的链路路径数组[A,B]中,则根据节点C更新链路路径数组为[A,B,C]。
如图6所示,为带有环路的第一层次图的示意图,其中,节点A为根节点,节点B是根节点A的叶子节点,节点D是节点B的叶子节点,节点E是节点D的叶子节点,而节点B为节点E的叶子节点,可见,在节点B、D、E之间产生了一个环路。图6中,节点A中存储的节点数组为[A:B],节点B中存储的节点数组为[B:D],节点D中存储的节点数组为[D:E],节点E中存储的节点数组为[E:B]。
电子设备从节点A开始,沿着叶子节点进行深度优先遍历,首先遍历节点A,由于节点A为根节点,自然不在初始化的链路路径数组(空数组)中,则根据节点A更新链路路径数组为[A]。接着,电子设备遍历节点A的叶子节点B,判断节点B是否在更新后的链路路径数组[A]中,由于节点B不在更新后的链路路径数组[A]中,则根据节点B更新链路路径数组为[A,B],继续遍历节点B的叶子节点D。判断节点D是否在更新后的链路路径数组[A,B]中,由于节点D不在更新后的链路路径数组[A,B]中,则根据节点D更新链路路径数组为[A,B,D]。再遍历节点D的叶子节点E,从而更新链路路径数组为[A,B,D,E]。当电子设备继续遍历节点E的叶子节点B时,确定节点B在更新后的链路路径数组[A,B,D,E]中,电子设备从链路路径数组[A,B,D,E]中取出最后一个节点E,并将遍历到的节点B从取出的节点E对应的节点数组[E:B]中移除,如此电子设备将遍历到的节点B与其父节点E之间的链路断开,从而实现了将环路BDE进行消环的目的。
所述断网模块1004,用于对所述第二层次图进行断网,得到初始层次树。
虽然得到的第二层次图中不包括了环路,但是第二层次图可能是树状图,也可能是网状图。如果是树状图,则从根节点出发到任意一个叶子节点只有一条链路。如果是网状图,则从根节点出发到某一个叶子节点有多条链路,网状结构表明第二层次图中至少有一个叶子节点存在多个父节点。
对于网状结构的第二层次图,电子设备将多条链路中最大的链路长度对应的链路进行保留,多条链路中的其他链路进行切断,从而实现对第二层次图的网状结构的断网,得到初始层次树。
在一个可选的实施方式中,所述对所述第二层次图进行断网,得到初始层次树包括:
从所述第二层次图的根节点开始进行遍历;
每遍历到一个节点,获取从所述根节点到所述节点的链路;
当所述链路有多条时,计算每条所述链路的链路长度;
从多条所述链路中获取最大的链路长度对应的链路,作为目标链路;
将多条所述链路中除所述目标链路外的每一条所述链路与所述目标链路从末尾向前进行比较,得到每一条所述链路中与所述目标链路的不同节点;
根据所述节点数组将每一条所述链路中所述不同节点与所述不同节点的叶子节点之间的链路进行断开,得到所述初始层次树。
电子设备从所述根节点开始,沿所述叶子节点方向,采用广度优先递归的方式对所述第二层次图进行遍历。每遍历到一个节点,电子设备获取从根节点到所遍历到的节点之间的所有链路。如果从根节点到所遍历到的节点之间的链路只有一条,表明从根节点到所遍历到的节点之间不存在网状结构。如果从根节点到所遍历到的节点之间的链路有多条,表明从根节点到所遍历到的节点之间存在网状结构。
电子设备可以将多条链路按照链路长度进行升序排序或者进行降序排序,并根据排序结果获取最大的链路长度,从而将多条链路分成两组,第一组是最大的链路长度对应的链路,确定为目标链路,第二组是多条链路中除目标链路之外的所有链路,确定为剩余链路。电子设备将剩余链路中的每一条链路与目标链路从末尾开始向前进行比较,如果判定末尾的两个节点是同一个节点,则继续将倒数第二的两个节点进行比较。如果判定倒数第二的两个节点是同一个节点,则继续将倒数第三的两个节点进行比较,直到判定出两个节点不同。如果判定某两个节点不是同一个节点,则根据所述节点数组将每一条所述链路中所述不同节点与所述不同节点的叶子节点之间的链路进行断开包括:从该节点的节点数组里将该节点的后一个节点移除,从而实现将所述不同节点与所述不同节点的叶子节点之间的链路进行断开,进而实现对第二层次图中的网状结构进行断网的目的。
当电子设备将剩余链路中的每一条链路均与目标链路进行了比较,并进行了移除操作之后,广度优先遍历结束,即可生成层次树。
如图7所示,为具有网状结构的层次图。图7中,节点A中存储的节点数组为[A:B,C],节点B中存储的节点数组为[B:D],节点C中存储的节点数组为[C:H],节点D中存储的节点数组为[D:E,F],节点E中存储的节点数组为[E:],节点F中存储的节点数组为[F:H],节点H中存储的节点数组为[H:E]。
从图7中可以发现,对于节点E,有多条链路,例如,链路1为A-B-D-E,链路2为A-B-D-F-H-E,链路3为A-C-H-E。
第一步,由于链路2的链路长度最大,则将链路2确定为目标链路。
第二步,将链路1与链路2从末尾进行比较,具体而言,将链路1的最后一个节点E与链路2的最后一个节点E进行比较,由于这两个节点相同,则将链路1的倒数第二个节点D与链路2的倒数第二个节点H进行比较,这两个节点不同。则从节点D的节点数组[D:E,F]中,将链路1中的节点D的后一个节点E移除,从而实现了将节点D与其叶子节点E之间的链路断开的目的。
第三步,将链路3与链路2从末尾进行比较,具体而言,将链路3的最后一个节点E与链路2的最后一个节点E进行比较,由于这两个节点相同,则将链路3的倒数第二个节点H与链路2的倒数第二个节点H进行比较,这两个节点相同,再将链路3的倒数第三个节点C与链路2的倒数第三个节点F进行比较,这两个节点不同。则则从节点C的节点数组[C:H]中,将链路3中的节点C的后一个节点H移除,从而实现了将节点C与其叶子节点H之间的链路断开的目的。
所述计算模块1005,用于确定所述层次树中节点的位置及节点的枝宽。
电子设备根据第二层次图得到层次树之后,为了进一步实现层次树的可视化效果,则需要将同一层节点设置于同一水平线上,且不重叠。通过计算层次树中节点的位置及节点间的枝宽后,即可将层次树进行重新布局。
在一个可选的实施方式中,所述确定所述层次树中节点的位置及节点的枝宽包括:
从所述根节点开始进行遍历至目标叶子节点,作为目标叶子节点;
确定所述目标叶子节点的第一位置;
根据所述第一位置依次确定所述目标叶子节点的兄弟节点,直至最右兄弟节点的第二位置;
根据所述第一位置及所述第二位置确定所述目标叶子节点的父节点的第三位置;
根据所述第一位置、所述第二位置及所述第三位置确定所述父节点的枝宽。
电子设备可以采用深度优先遍历的方式从层次树的根节点进行遍历,深度优先遍历的好处是能够快速的遍历到目标叶子节点。
电子设备可以根据显示屏幕的尺寸确定目标叶子节点的第一位置。例如,显示屏幕的尺寸为W*H,以显示屏幕左上角为坐标原点,以显示屏幕水平向右的方向为X轴,以显示屏幕垂直向下的方向为Y轴,则可以确定层次树中目标叶子节点的第一位置为(目标叶子节点的节点宽度,H)。
如果目标叶子节点有兄弟节点,最靠近目标叶子节点的第一兄弟节点的第二位置,则根据目标叶子节点的位置、第一兄弟节点的节点宽度、预设的两个节点之间的水平间距确定。第二靠近目标叶子节点的第二兄弟节点的第二位置,则根据第一兄弟节点的位置、第二兄弟节点的节点宽度、预设的两个节点之间的水平间距确定。以此类推,直到确定最右兄弟节点的第二位置。
电子设备根据所述第一位置及所述第二位置确定所述目标叶子节点的父节点的第三位置。具体而言,电子设备根据目标叶子节点的第一位置与最右兄弟节点的第二位置确定所述目标叶子节点的父节点的第三位置。目标叶子节点的父节点的第三位置可以根据最左叶子节点与最右兄弟节点的中心点及及预设节点之间的垂直间距及预设节点之间的垂直间距确定。
电子设备根据所述第一位置、所述第二位置及所述第三位置确定所述父节点的枝宽。具体而言,电子设备计算目标叶子节点的第一位置与最右兄弟节点的第一位置之间的差值,再将差值与目标叶子节点的父节点的节点宽度进行比较。当差值大于目标叶子节点的父节点的节点宽度,则将目标叶子节点的父节点的枝宽确定为差值。当差值小于目标叶子节点的父节点的节点宽度,则将目标叶子节点的父节点的枝宽确定为目标叶子节点的父节点的节点宽度。
电子设备在确定目标叶子节点的父节点的位置之后,即可确定父节点的兄弟节点的位置,再根据父节点的位置及父节点的兄弟节点的位置确定父节点的父节点的位置及枝宽。以此类推,直至确定根节点的位置及枝宽。
如图8所示,节点A为根节点,节点B为节点A的叶子节点,节点C、节点D及节点E均为节点B的叶子节点,且节点C、节点D及节点E为兄弟节点。
假设显示屏幕的宽度为W,长度为H,两个节点之间的水平间距为L1,两个节点之间的垂直间距为L2,节点i的节点宽度表示为i.X(i=A,B,C,D,E,例如,节点A的节点宽度表示为A.X),电子设备采用深度优先递归的方式从根节点A开始沿着叶子节点的方向进行遍历,找到最后一层最左叶子节点为节点C,确定叶子节点C的位置(C.X,H)。节点D为最靠近节点C的兄弟节点,电子设备根据节点C的位置(C.X,H)确定节点D的位置(C.X+D.X+L1,H),接着根据节点D的位置确定兄弟节点E的位置(C.X+D.X+E.X+2L1,H)。
电子设备根据最左叶子节点C和最右叶子节点E确定叶子节点C的父节点B的位置(1/2(2C.X++D.X+E.X+2L1),H-L2)。
电子设备确定节点B的父节点A的位置(1/2(2C.X++D.X+E.X+2L1),H-2L2)。
所述连线模块1006,用于根据所述节点的位置及节点的枝宽对所述初始层次树中具有父子关系的两个节点进行连线,得到目标层次树。
电子设备根据节点的位置及节点的枝宽对具有父子关系的两个节点进行连线,当所有具有父子关系的两个节点均进行了连线,则层次树就生成了,从而完成了对有向图的层次布局。
在一个可选的实施方式中,所述根据所述节点的位置及节点的枝宽对所述初始层次树中具有父子关系的两个节点进行连线,得到目标层次树包括:
在具有父子关系的两个节点之间,生成预设个数的虚拟节点;
根据预设坐标计算规则确定每个虚拟节点的位置;
对每两个相邻的虚拟节点之间进行连线,得到所述目标层次树。
其中,预设个数可以为7,即电子设备在具有父子关系的两个节点之间生成7个虚拟节点,从而将具有父子关系的两个节点的连线抽象成6条线段。
如图9所示,具有父子关系的两个节点为P和Q,节点Q为节点P的叶子节点,生成的7个虚拟节点依次为P1、P2、P3,T、Q1、Q2、Q3,则线段分别是P1P2,P2P3,P3T,TQ3,Q3Q2,Q2Q1。
节点P的横坐标用P.x表示,纵坐标用P.y表示,节点P的节点宽度用P.width表示,节点P的节点高度用P.height表示,节点Q的横坐标用Q.x表示,纵坐标用Q.y表示,节点Q的节点宽度用Q.width表示,节点Q的节点高度用Q.height表示,则预设的这7个虚拟节点的坐标计算规则如下:
Q1(Q.x+Q.width/2,Q.y);
Q2(Q1.x,Q.y-Q.height/2);
Q3(Q2.x+dir*(Q.width/2+space),Q2.y);dir是节点Q在节点P的左边,dir为1,节点Q在节点P的右边,dir为-1,space是节点之间的空隙距离。
P1(P.x+P.width/2,P.y+p.height);
P2(P1.x,P1.y+P.height/2);
P3(P2.x,P2.y-P.height/2);
T(P3.x,Q3.y)。
上述可选的实施方式,通过生成虚拟节点,并在两个相邻的虚拟节点之间进行连线,从而实现对具有父子关系的两个节点进行连线,能够有效的避免节点的连线出现交叉的现象,减少了连线的相互干扰。
在一个可选的实施方式中,在生成虚拟节点的时候,可能会出现虚拟节点塌陷的情况,比如,当虚拟节点Q3与虚拟节点P3点共线(但不是平行的情况),此时,电子设备将虚拟节点Q3与虚拟节点Q2进行重合,虚拟节点P3与虚拟节点P2进行重合。又比如,当虚拟节点T与虚拟节点Q2共线(但不是平行的情况),则电子设备将虚拟节点T与虚拟节点Q3进行重合。
在完成对有向图的层次布局得到目标层次树之后,电子设备还可以采用第一显示方式显示所述目标层次树中的最短链路、采用第二显示方式显示所述目标层次树中的最长链路,第一显示方式和第二显示方式不同,目的是为了区分最短链路和最长链路,方便用户查看,第一显示方式可以是红色标记,第二显示方式可以是蓝色标记。当电子设备侦测到所述目标层次树中的某个节点接收到触摸指令时,可以获取包含被触摸的节点的所有链路并高亮显示。电子设备侦测到目标层次树上接收到缩放指令时,对目标层次树进行缩放显示。
综上,本发明实施方式提供的有向图的层次布局装置,获取到有向图的有向权信息后,根据有向图的有向权信息构建第一层次图,由于第一层次图可能存在环路(包括自环)和网状结构,则通过对所述第一层次图中的环路进行消环,得到第二层次图,接着对所述第二层次图进行断网,得到初始层次树;得到的初始层次树中既没有环路,也没有网状结构,因而在确定所述层次树中节点的位置及节点的枝宽,即可根据所述节点的位置及节点的枝宽对所述初始层次树中具有父子关系的两个节点进行连线,得到目标层次树,从而完成了对有向图的层次布局。本发明实施方式没有采用交叉排除算法,直接在生成层次树的时候获得枝宽,线从枝缝里穿梭,不会发生成节点交叉,因此易于实现,提高了布局效率。
实施例三
本实施例提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述有向图的层次布局方法实施例中的步骤,例如图1所示的S11-S16:
S11,响应于对有向图进行布局的指令,获取所述有向图的有向权信息;
S12,根据所述有向图的有向权信息构建第一层次图;
S13,对所述第一层次图中的环路进行消环,得到第二层次图;
S14,对所述第二层次图进行断网,得到初始层次树;
S15,确定所述层次树中节点的位置及节点的枝宽;
S16,根据所述节点的位置及节点的枝宽对所述初始层次树中具有父子关系的两个节点进行连线,得到目标层次树。
或者,该计算机程序被处理器执行时实现上述装置实施例中各模块/单元的功能,例如图10中的模块1001-1006:
所述获取模块1001,用于响应于对有向图进行布局的指令,获取所述有向图的有向权信息;
所述构建模块1002,用于根据所述有向图的有向权信息构建第一层次图;
所述消环模块1003,用于对所述第一层次图中的环路进行消环,得到第二层次图;
所述断网模块1004,用于对所述第二层次图进行断网,得到初始层次树;
所述计算模块1005,用于确定所述层次树中节点的位置及节点的枝宽;
所述连线模块1006,用于根据所述节点的位置及节点的枝宽对所述初始层次树中具有父子关系的两个节点进行连线,得到目标层次树。
实施例四
参阅图11所示,为本发明实施例三提供的电子设备的结构示意图。在本发明较佳实施例中,所述电子设备110包括存储器1101、至少一个处理器1102、至少一条通信总线1103及收发器1104。
本领域技术人员应该了解,图11示出的电子设备的结构并不构成本发明实施例的限定,既可以是总线型结构,也可以是星形结构,所述电子设备110还可以包括比图示更多或更少的其他硬件或者软件,或者不同的部件布置。
在一些实施例中,所述电子设备110是一种能够按照事先设定或存储的指令,自动进行数值计算和/或信息处理的设备,其硬件包括但不限于微处理器、专用集成电路、可编程门阵列、数字处理器及嵌入式设备等。所述电子设备110还可包括客户设备,所述客户设备包括但不限于任何一种可与客户通过键盘、鼠标、遥控器、触摸板或声控设备等方式进行人机交互的电子产品,例如,个人计算机、平板电脑、智能手机、数码相机等。
所述电子设备110仅为举例,其他现有的或今后可能出现的电子产品如可适应于本发明,也应包含在本发明的保护范围以内,并以引用方式包含于此。
在一些实施例中,所述存储器1101中存储有计算机程序,所述计算机程序被所述至少一个处理器1102执行时实现如所述的有向图的层次布局方法中的全部或者部分步骤。所述存储器1101包括只读存储器(Read-Only Memory,ROM)、可编程只读存储器(Programmable Read-Only Memory,PROM)、可擦除可编程只读存储器(ErasableProgrammable Read-Only Memory,EPROM)、一次可编程只读存储器(One-timeProgrammable Read-Only Memory,OTPROM)、电子擦除式可复写只读存储器(Electrically-Erasable Programmable Read-Only Memory,EEPROM)、只读光盘(CompactDisc Read-Only Memory,CD-ROM)或其他光盘存储器、磁盘存储器、磁带存储器、或者能够用于携带或存储数据的计算机可读的任何其他介质。
进一步地,所述计算机可读存储介质可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等;存储数据区可存储根据区块链节点的使用所创建的数据等。
本发明所指区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层等。
在一些实施例中,所述至少一个处理器1102是所述电子设备110的控制核心(Control Unit),利用各种接口和线路连接整个电子设备110的各个部件,通过运行或执行存储在所述存储器1101内的程序或者模块,以及调用存储在所述存储器1101内的数据,以执行电子设备110的各种功能和处理数据。例如,所述至少一个处理器1102执行所述存储器中存储的计算机程序时实现本发明实施例中所述的有向图的层次布局方法的全部或者部分步骤;或者实现有向图的层次布局装置的全部或者部分功能。所述至少一个处理器1102可以由集成电路组成,例如可以由单个封装的集成电路所组成,也可以是由多个相同功能或不同功能封装的集成电路所组成,包括一个或者多个中央处理器(Central Processingunit,CPU)、微处理器、数字处理芯片、图形处理器及各种控制芯片的组合等。
在一些实施例中,所述至少一条通信总线1103被设置为实现所述存储器1101以及所述至少一个处理器1102等之间的连接通信。
尽管未示出,所述电子设备110还可以包括给各个部件供电的电源(比如电池),优选的,电源可以通过电源管理装置与所述至少一个处理器1102逻辑相连,从而通过电源管理装置实现管理充电、放电、以及功耗管理等功能。电源还可以包括一个或一个以上的直流或交流电源、再充电装置、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。所述电子设备110还可以包括多种传感器、蓝牙模块、Wi-Fi模块等,在此不再赘述。
上述以软件功能模块的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能模块存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,电子设备,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的部分。
在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理单元,既可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能模块的形式实现。
对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或,单数不排除复数。说明书中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
最后应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或等同替换,而不脱离本发明技术方案的精神和范围。
Claims (10)
1.一种有向图的层次布局方法,其特征在于,所述方法包括:
响应于对有向图进行布局的指令,获取所述有向图的有向权信息;
根据所述有向图的有向权信息构建第一层次图;
对所述第一层次图中的环路进行消环,得到第二层次图;
对所述第二层次图进行断网,得到初始层次树;
确定所述层次树中节点的位置及节点的枝宽;
根据所述节点的位置及节点的枝宽对所述初始层次树中具有父子关系的两个节点进行连线,得到目标层次树。
2.如权利要求1所述的有向图的层次布局方法,其特征在于,所述根据所述有向图的有向权信息构建第一层次图包括:
根据所述有向图的有向权信息确定所述有向图中的父节点及叶子节点;
根据所述父节点的节点标识及所述父节点的叶子节点的节点标识生成节点数组,并将所述节点数组存储于所述父节点中;
根据所述父节点、所述叶子节点及所述叶子节点的层次构建第一层次图。
3.如权利要求2所述的有向图的层次布局方法,其特征在于,所述根据所述父节点、所述叶子节点及所述叶子节点的层次构建第一层次图包括:
计算所述父节点的数量;
判断所述数量是否为1;
当所述数量为1时,将所述父节点确定为所述第一层次图中的根节点;
当所述数量大于1时,生成一个伪节点,并将所述伪节点作为所述第一层次图中多个所述父节点的根节点。
4.如权利要求2所述的有向图的层次布局方法,其特征在于,所述对所述第一层次图中的环路进行消环,得到第二层次图包括:
初始化链路路径数组;
从所述第一层次图的根节点开始沿所述叶子节点方向进行遍历;
每遍历到一个节点,判断所述遍历到的节点是否在所述链路路径数组中;
当确定所述遍历到的节点不在所述链路路径数组中,根据所述遍历到的节点更新所述链路路径数组,并继续遍历所述节点的叶子节点,判断遍历到的叶子是否在更新后的链路路径数组中;
当确定所述遍历到的节点在所述链路路径数组中,根据所述节点数组将所述遍历到的节点与所述遍历到的节点的父节点之间的链路断开,得到所述第二层次图。
5.如权利要求4所述的有向图的层次布局方法,其特征在于,所述对所述第二层次图进行断网,得到初始层次树包括:
从所述第二层次图的根节点开始进行遍历;
每遍历到一个节点,获取从所述根节点到所述节点的链路;
当所述链路有多条时,计算每条所述链路的链路长度;
从多条所述链路中获取最大的链路长度对应的链路,作为目标链路;
将多条所述链路中除所述目标链路外的每一条所述链路与所述目标链路从末尾向前进行比较,得到每一条所述链路中与所述目标链路的不同节点;
根据所述节点数组将每一条所述链路中所述不同节点与所述不同节点的叶子节点之间的链路进行断开,得到所述初始层次树。
6.如权利要求1至5中任意一项所述的有向图的层次布局方法,其特征在于,所述确定所述层次树中节点的位置及节点的枝宽包括:
从所述根节点开始进行遍历至目标叶子节点,作为目标叶子节点;
确定所述目标叶子节点的第一位置;
根据所述第一位置依次确定所述目标叶子节点的兄弟节点,直至最右兄弟节点的第二位置;
根据所述第一位置及所述第二位置确定所述目标叶子节点的父节点的第三位置;
根据所述第一位置、所述第二位置及所述第三位置确定所述父节点的枝宽。
7.如权利要求1至5中任意一项所述的有向图的层次布局方法,其特征在于,所述根据所述节点的位置及节点的枝宽对所述初始层次树中具有父子关系的两个节点进行连线,得到目标层次树包括:
在具有父子关系的两个节点之间,生成预设个数的虚拟节点;
根据预设坐标计算规则确定每个虚拟节点的位置;
对每两个相邻的虚拟节点之间进行连线,得到所述目标层次树。
8.一种有向图的层次布局装置,其特征在于,所述装置包括:
获取模块,用于响应于对有向图进行布局的指令,获取所述有向图的有向权信息;
构建模块,用于根据所述有向图的有向权信息构建第一层次图;
消环模块,用于对所述第一层次图中的环路进行消环,得到第二层次图;
断网模块,用于对所述第二层次图进行断网,得到初始层次树;
计算模块,用于确定所述层次树中节点的位置及节点的枝宽;
连线模块,用于根据所述节点的位置及节点的枝宽对所述初始层次树中具有父子关系的两个节点进行连线,得到目标层次树。
9.一种电子设备,其特征在于,所述电子设备包括处理器和存储器,所述处理器用于执行所述存储器中存储的计算机程序时实现如权利要求1至7中任意一项所述有向图的层次布局方法。
10.一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7中任意一项所述有向图的层次布局方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310162927.4A CN116127667A (zh) | 2023-02-15 | 2023-02-15 | 有向图的层次布局方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310162927.4A CN116127667A (zh) | 2023-02-15 | 2023-02-15 | 有向图的层次布局方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116127667A true CN116127667A (zh) | 2023-05-16 |
Family
ID=86308157
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310162927.4A Pending CN116127667A (zh) | 2023-02-15 | 2023-02-15 | 有向图的层次布局方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116127667A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116561386A (zh) * | 2023-07-12 | 2023-08-08 | 北京惠每云科技有限公司 | 一种基于dag图实体上下位关系判别方法、装置及电子设备 |
-
2023
- 2023-02-15 CN CN202310162927.4A patent/CN116127667A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116561386A (zh) * | 2023-07-12 | 2023-08-08 | 北京惠每云科技有限公司 | 一种基于dag图实体上下位关系判别方法、装置及电子设备 |
CN116561386B (zh) * | 2023-07-12 | 2023-11-21 | 北京惠每云科技有限公司 | 一种基于dag图实体上下位关系判别方法、装置及电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110050257A (zh) | 可执行数据流图的差分 | |
CN111462137A (zh) | 一种基于知识蒸馏和语义融合的点云场景分割方法 | |
CN110443222A (zh) | 用于训练脸部关键点检测模型的方法和装置 | |
CN112650899B (zh) | 数据可视化渲染方法、装置、计算机设备及存储介质 | |
CN103473636A (zh) | 一种收集、分析和分发网络商业信息的系统数据组件 | |
CN116127667A (zh) | 有向图的层次布局方法、装置、电子设备及存储介质 | |
CN109672554A (zh) | 确定故障根因的方法及装置 | |
CN106845630A (zh) | 无序经过必经点的最短路径获取方法及装置 | |
CN114202027A (zh) | 执行配置信息的生成方法、模型训练方法和装置 | |
CN108304318A (zh) | 设备兼容性的测试方法及终端设备 | |
CN113904941A (zh) | 一种生成拓扑图的方法、系统及电子设备 | |
CN111966361A (zh) | 用于确定待部署模型的方法、装置、设备及其存储介质 | |
CN112527281A (zh) | 基于人工智能的算子升级方法、装置、电子设备及介质 | |
JP5937038B2 (ja) | トポロジー図の作成方法及び作成プログラム | |
JP2009134520A (ja) | ソーシャルネットワーク表示システム、方法、及びプログラム | |
CN108959391A (zh) | 展现数据库集群架构图的设备、系统、方法、存储介质 | |
US20140067339A1 (en) | Method and device for managing cabling in a cluster | |
CN116823437A (zh) | 基于配置化风控策略的准入方法、装置、设备及介质 | |
CN116436791A (zh) | 工业互联网场景构建方法、系统、设备及存储介质 | |
CN104516735B (zh) | 实现云计算环境自动化运维的二维分层方法 | |
CN113986380B (zh) | 数据处理方法、装置和系统、电子设备及存储介质 | |
CN115840738A (zh) | 一种数据迁移方法、装置、电子设备及存储介质 | |
KR20220121680A (ko) | 딥러닝 네트워크 구성 방법, 딥러닝 자동화 플랫폼 서비스 시스템 및 이를 위한 컴퓨터 프로그램 | |
CN112579402A (zh) | 一种应用系统故障定位的方法和装置 | |
JP2008299641A (ja) | 連立一次方程式の並列求解方法およびノード順序付け方法 |
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 |