掌桥专利:专业的专利平台
掌桥专利
首页

一种基于图论的拓扑排序方法、装置及系统

文献发布时间:2024-04-18 19:58:30


一种基于图论的拓扑排序方法、装置及系统

技术领域

本发明涉及图论的拓扑排序技术领域,特别是涉及一种基于图论的拓扑排序方法、装置及系统。

背景技术

对有向无环图进行拓扑排序的方法是:将有向无环图G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序的序列,简称拓扑序列,又可以被说成由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。

在进行拓扑排序时,需要计算有向无环图每个节点的入度。目前的节点入度计算方法通常采用其他数据结构或算法来计算,这种方式计算节点入度的操作过于繁琐,因此对计算节点入度的方法进行优化是有必要的。

发明内容

本发明提供了一种基于图论的拓扑排序方法、装置及系统,优化了计算节点入度的方法,提高了拓扑排序结果的准确性。

为了解决上述技术问题,本发明的第一方面提供了一种基于图论的拓扑排序方法,包括:

通过遍历待测图片所有的边,更新待测图片中所有节点的入度信息;

根据所述待测图片中所有节点的入度信息,确定若干个起始节点,并将所述起始节点添加至第一队列中;

依次将若干个起始节点从第一队列转移至结果列表,同时遍历所述起始节点的所有邻居节点,在所述结果列表中获取第一拓扑序列;

通过检测所述待测图片所有的边是否都被访问,结合所述第一拓扑序列,得出待测图片的拓扑排序结果。

进一步地,所述通过遍历待测图片所有的边,更新待测图片中所有节点的入度信息,具体为:

依次遍历待测图片所有的边,将遍历到的边的顶点节点的入度加一,并更新所述顶点节点的入度信息。

进一步地,所述根据所述待测图片中所有节点的入度信息,确定若干个起始节点,具体为:

将所述待测图片中入度为0的节点确定为起始节点。

进一步地,所述依次将若干个起始节点从第一队列转移至结果列表,同时遍历所述起始节点的所有邻居节点,在所述结果列表中获取第一拓扑序列,具体为:

每个起始节点从第一队列转移至结果列表时,在所述待测图片的所有节点中确定所述起始节点的邻居节点,并将所述邻居节点的入度减一;

当所述邻居节点的入度减为0时,将所述邻居节点添加至第一队列中,确定为起始节点;

当第一队列的所有起始节点都转移至结果列表后,根据起始节点转移到结果列表顺序,确定第一拓扑序列。

进一步地,所述通过检测所述待测图片所有的边是否都被访问,结合所述第一拓扑序列,得出待测图片的拓扑排序结果,具体为:

在获取所述第一拓扑序列后,检测所述待测图片所有的边是否都被访问;

若所述待测图片中不存在未被访问的边,则将所述第一拓扑序列确定为待测图片的拓扑排序结果;

若所述待测图片中存在未被访问的边,则确定所述第一拓扑序列为错误的排序结果,报告错误。

本发明的第一方面提供了一种基于图论的拓扑排序方法,通过采用遍历待测图片中的所有边的方式,计算待测图片中每个节点的入度,根据图中每个节点的入度信息确定起始节点,并将其存储在第一队列中,从第一队列中依次取出一个起始节点,将该节点添加到结果列表中,同时遍历该节点的所有邻居节点,最后在结果列表中获取第一拓扑序列,检测待测图片所有的边是否都被访问,确定待测图片的拓扑排序结果。本发明优化了计算节点入度的方法,使其更方便进行操作,同时确定节点的依赖关系,进而提高了拓扑排序结果的准确性。

本发明的第二方面提供了一种基于图论的拓扑排序装置,包括:更新模块、添加模块、获取模块和检测模块;

所述更新模块用于通过遍历待测图片所有的边,更新待测图片中所有节点的入度信息;

所述添加模块用于根据所述待测图片中所有节点的入度信息,确定若干个起始节点,并将所述起始节点添加至第一队列中;

所述获取模块用于依次将若干个起始节点从第一队列转移至结果列表,同时遍历所述起始节点的所有邻居节点,在所述结果列表中获取第一拓扑序列;

所述检测模块用于通过检测所述待测图片所有的边是否都被访问,结合所述第一拓扑序列,得出待测图片的拓扑排序结果。

本发明的第二方面提供了一种基于图论的拓扑排序装置,以模块间的有机结合为基础,通过采用遍历待测图片中的所有边的方式,计算待测图片中每个节点的入度,根据图中每个节点的入度信息确定起始节点,并将其存储在第一队列中,从第一队列中依次取出一个起始节点,将该节点添加到结果列表中,同时遍历该节点的所有邻居节点,最后在结果列表中获取第一拓扑序列,检测待测图片所有的边是否都被访问,确定待测图片的拓扑排序结果。本发明优化了计算节点入度的方法,使其更方便进行操作,同时确定节点的依赖关系,进而提高了拓扑排序结果的准确性。

本发明的第三方面提供了一种基于图论的拓扑排序系统,包括:

对本发明的第一方面提供的基于图论的拓扑排序方法定义输入为待测图片,定义输出为拓扑排序结果;

创建一个空列表变量和一个字典变量,并将所述空列表变量和所述字典变量进行初始化,执行所述基于图论的拓扑排序方法,具体为:

通过遍历待测图片所有的边,更新待测图片中所有节点的入度信息,并将所述所有节点的入度信息存储在所述字典变量中;

根据所述待测图片中所有节点的入度信息,确定若干个起始节点,并将所述起始节点添加至第一队列中;

依次将若干个起始节点从第一队列转移至结果列表,同时遍历所述起始节点的所有邻居节点,在所述结果列表中获取第一拓扑序列;

通过检测所述待测图片所有的边是否都被访问,结合所述第一拓扑序列,返回空列表变量。

进一步地,所述通过遍历待测图片所有的边,更新待测图片中所有节点的入度信息,具体为:

依次遍历待测图片所有的边,将遍历到的边的顶点节点的入度加一,并更新所述顶点节点的入度信息。

进一步地,所述依次将若干个起始节点从第一队列转移至结果列表,同时遍历所述起始节点的所有邻居节点,在所述结果列表中获取第一拓扑序列,具体为:

每个起始节点从第一队列转移至结果列表时,在所述待测图片的所有节点中确定所述起始节点的邻居节点,并将所述邻居节点的入度减一;

当所述邻居节点的入度减为0时,将所述邻居节点添加至第一队列中,确定为起始节点;

当第一队列的所有起始节点都转移至结果列表后,根据起始节点转移到结果列表顺序,确定第一拓扑序列。

进一步地,所述通过检测所述待测图片所有的边是否都被访问,结合所述第一拓扑序列,返回空列表变量,具体为:

若所述待测图片中不存在未被访问的边,则确定所述待测图片不存在环路,返回空列表变量;其中,所述空列表变量包括所述第一拓扑序列;所述第一拓扑序列为待测图片的拓扑排序结果;

若所述待测图片中存在未被访问的边,则确定所述待测图片存在环路,返回空列表变量或报告错误;其中,所述空列表变量表示所述第一拓扑序列为错误的排序结果。

本发明的第三方面提供了一种基于图论的拓扑排序系统,通过采用遍历待测图片中的所有边的方式,计算待测图片中每个节点的入度,根据图中每个节点的入度信息确定起始节点,并将其存储在第一队列中,从第一队列中依次取出一个起始节点,将该节点添加到结果列表中,同时遍历该节点的所有邻居节点,最后在结果列表中获取第一拓扑序列,检测待测图片所有的边是否都被访问,确定待测图片的拓扑排序结果。本发明优化了计算节点入度的方法,使其更方便进行操作,同时确定节点的依赖关系,进而提高了拓扑排序结果的准确性。

附图说明

图1为本发明提供的基于图论的拓扑排序方法的一种实施例的流程示意图;

图2为本发明提供的基于图论的拓扑排序装置的一种实施例的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

实施例1

参见图1,是本发明提供的基于图论的拓扑排序方法的一种实施例的流程示意图,该方法包括步骤101至步骤104,各步骤具体如下:

步骤101:通过遍历待测图片所有的边,更新待测图片中所有节点的入度信息。

进一步地,在本发明第一实施例中,通过遍历待测图片所有的边,更新待测图片中所有节点的入度信息,具体为:

依次遍历待测图片所有的边,将遍历到的边的顶点节点的入度加一,并更新所述顶点节点的入度信息。

作为本发明第一实施例的一种举例,计算待测图片中每个节点的入度具体是:对于一条边(u,v),节点v的入度加1。入度表示有多少条边指向该节点,因此,通过遍历图中的所有边并更新节点的入度信息,可以准确地确定每个节点之间的依赖关系,可以了解到哪些节点依赖于其他节点,从而确定节点之间的顺序关系。

步骤102:根据所述待测图片中所有节点的入度信息,确定若干个起始节点,并将所述起始节点添加至第一队列中。

进一步地,在本发明第一实施例中,根据所述待测图片中所有节点的入度信息,确定若干个起始节点,具体为:

将所述待测图片中入度为0的节点确定为起始节点。

在本发明第一实施例中,入度为0的节点表示没有任何依赖关系,在拓扑排序中,将入度为0的节点作为起始节点,可以为拓扑排序提供了一个初始状态。当所有边都被遍历并更新入度信息后,如果不存在入度不为0的节点,即所有节点的入度都为0,则说明图中不存在环路,即是一个有向无环图,该图片可以进行拓扑排序。

步骤103:依次将若干个起始节点从第一队列转移至结果列表,同时遍历所述起始节点的所有邻居节点,在所述结果列表中获取第一拓扑序列。

进一步地,在本发明第一实施例中,依次将若干个起始节点从第一队列转移至结果列表,同时遍历所述起始节点的所有邻居节点,在所述结果列表中获取第一拓扑序列,具体为:

每个起始节点从第一队列转移至结果列表时,在所述待测图片的所有节点中确定所述起始节点的邻居节点,并将所述邻居节点的入度减一;

当所述邻居节点的入度减为0时,将所述邻居节点添加至第一队列中,确定为起始节点;

当第一队列的所有起始节点都转移至结果列表后,根据起始节点转移到结果列表顺序,确定第一拓扑序列。

作为本发明第一实施例的一种举例,依次将若干个起始节点从第一队列转移至结果列表的步骤具体为:首先从第一队列中取出一个节点u,其次将节点u添加到结果列表中,最后遍历节点u的所有邻居节点v。其中,遍历节点u的所有邻居节点v的操作方式为:将节点v的入度减1,此时若节点v的入度减为0,则将节点v添加到第一队列中。具体的,从队列中取出一个起始节点u,并将其添加到结果列表中,可以保证拓扑排序的结果中,起始节点u位于其所有邻居节点之前;通过依次从第一队列中取出起始节点,可以实现对待测图片中所有节点的线性排序,同时有利于更新邻居节点入度;遍历起始节点u的所有邻居节点v,将其入度减1,这是因为起始节点u作为当前处理的节点,其邻居节点v在拓扑排序中必须位于节点u之后,通过减少邻居节点v的入度,可以保障它们在结果列表中的正确顺序,同时有利于发现环路。

步骤104:通过检测所述待测图片所有的边是否都被访问,结合所述第一拓扑序列,得出待测图片的拓扑排序结果。

进一步地,在本发明第一实施例中,通过检测所述待测图片所有的边是否都被访问,结合所述第一拓扑序列,得出待测图片的拓扑排序结果,具体为:

在获取所述第一拓扑序列后,检测所述待测图片所有的边是否都被访问;

若所述待测图片中不存在未被访问的边,则将所述第一拓扑序列确定为待测图片的拓扑排序结果;

若所述待测图片中存在未被访问的边,则确定所述第一拓扑序列为错误的排序结果,报告错误。

在本发明第一实施例中,在获取所述第一拓扑序列后,需要检测待测图片所有的边是否都被访问,若检测出待测图片中存在未被访问的边,则说明待测图片中存在环路,环路意味着存在循环依赖,即无法确定节点之间的线性排序,所以获取的第一拓扑序列是错误的排序结果,此时考虑返回一个空列表或报告错误,可以明确地告知用户存在待测图片循环依赖的问题,帮助用户及时发现问题,这样可以避免基于错误的排序结果做出错误的决策或产生错误的行为,同时有利于返回可行的排序结果。若检测出待测图片所有的边都被访问,则表示待测图片中所有节点成功排序,节点之间的依赖关系得到满足,可以考虑返回一个空列表,空列表中存储了第一拓扑序列,因此用户可以在空列表中直接获取到拓扑排序的结果,可用于后续的任务调度、依赖关系管理等应用,进而有利于提供对拓扑排序结果的正确性和可行性的判断,帮助用户获取准确的排序结果或及时发现问题。其中,在待测图片中存在未被访问的边和不存在未被访问的边的两种情况下返回的空列表是不等同的,两种空列表的名称、类型、长度和内容都不相同。

综上,本发明第一实施例提供了一种基于图论的拓扑排序方法,通过采用遍历待测图片中的所有边的方式,计算待测图片中每个节点的入度,根据图中每个节点的入度信息确定起始节点,并将其存储在第一队列中,从第一队列中依次取出一个起始节点,将该节点添加到结果列表中,同时遍历该节点的所有邻居节点,最后在结果列表中获取第一拓扑序列,检测待测图片所有的边是否都被访问,确定待测图片的拓扑排序结果。本发明优化了计算节点入度的方法,使其更方便进行操作,同时确定节点的依赖关系,进而提高了拓扑排序结果的准确性。

实施例2

参见图2,是本发明提供的基于图论的拓扑排序装置的一种实施例的结构示意图,该装置包括更新模块201、添加模块202、获取模块203和检测模块204;

更新模块201用于通过遍历待测图片所有的边,更新待测图片中所有节点的入度信息;

添加模块202用于根据所述待测图片中所有节点的入度信息,确定若干个起始节点,并将所述起始节点添加至第一队列中;

获取模块203用于依次将若干个起始节点从第一队列转移至结果列表,同时遍历所述起始节点的所有邻居节点,在所述结果列表中获取第一拓扑序列;

检测模块204用于通过检测所述待测图片所有的边是否都被访问,结合所述第一拓扑序列,得出待测图片的拓扑排序结果。

进一步地,在本发明第二实施例中,更新模块201,包括遍历单元:

遍历单元用于依次遍历待测图片所有的边,将遍历到的边的顶点节点的入度加一,并更新所述顶点节点的入度信息。

进一步地,在本发明第二实施例中,添加模块202,包括起始节点确定单元:

起始节点确定单元用于将所述待测图片中入度为0的节点确定为起始节点。

进一步地,在本发明第二实施例中,获取模块203,包括入度更新单元、添加单元和拓扑序列确定单元:

入度更新单元用于每个起始节点从第一队列转移至结果列表时,在所述待测图片的所有节点中确定所述起始节点的邻居节点,并将所述邻居节点的入度减一;

添加单元用于当所述邻居节点的入度减为0时,将所述邻居节点添加至第一队列中,确定为起始节点;

拓扑序列确定单元用于当第一队列的所有起始节点都转移至结果列表后,根据起始节点转移到结果列表顺序,确定第一拓扑序列。

进一步地,在本发明第二实施例中,检测模块204,包括检测单元、第一结果确定单元和第二结果确定单元:

检测单元在获取所述第一拓扑序列后,检测所述待测图片所有的边是否都被访问;

第一结果确定单元用于若所述待测图片中不存在未被访问的边,则将所述第一拓扑序列确定为待测图片的拓扑排序结果;

第二结果确定单元用于若所述待测图片中存在未被访问的边,则确定所述第一拓扑序列为错误的排序结果,报告错误。

综上,本发明第二实施例提供了一种基于图论的拓扑排序装置,以模块间的有机结合为基础,通过采用遍历待测图片中的所有边的方式,计算待测图片中每个节点的入度,根据图中每个节点的入度信息确定起始节点,并将其存储在第一队列中,从第一队列中依次取出一个起始节点,将该节点添加到结果列表中,同时遍历该节点的所有邻居节点,最后在结果列表中获取第一拓扑序列,检测待测图片所有的边是否都被访问,确定待测图片的拓扑排序结果。本发明优化了计算节点入度的方法,使其更方便进行操作,同时确定节点的依赖关系,进而提高了拓扑排序结果的准确性。

实施例3

本发明提供了一种基于图论的拓扑排序系统,包括:

对本发明第一实施例的基于图论的拓扑排序方法定义输入为待测图片,定义输出为拓扑排序结果;

创建一个空列表变量和一个字典变量,并将所述空列表变量和所述字典变量进行初始化,执行所述基于图论的拓扑排序方法,具体为:

通过遍历待测图片所有的边,更新待测图片中所有节点的入度信息,并将所述所有节点的入度信息存储在所述字典变量中;

根据所述待测图片中所有节点的入度信息,确定若干个起始节点,并将所述起始节点添加至第一队列中;

依次将若干个起始节点从第一队列转移至结果列表,同时遍历所述起始节点的所有邻居节点,在所述结果列表中获取第一拓扑序列;

通过检测所述待测图片所有的边是否都被访问,结合所述第一拓扑序列,返回空列表变量。

在本发明第三实施例中,对拓扑排序方法进行定义输入和输出,可以使得所有的边从前面的节点指向后面的节点,使输入和输出有相应的图和线性排序,以便输入和输出对后续进行操作。创建一个空列表是用于存储最终的排序结果,同时创建一个字典是用于记录每个节点的入度,完成对这个两个初始化变量,有利于提高代码可读性和可维护性,通过明确初始化所使用的变量,可以使代码的意图更加清晰,提高代码的可读性,在后续的开发或维护过程中,其他开发者或自己可以更容易地理解代码的目的和逻辑,同时,通过明确初始化,也可以保证在不同的执行环境中都能正确运行,进而有利于可以降低代码出错的概率,提高代码的可维护性。

进一步地,在本发明第三实施例中,通过遍历待测图片所有的边,更新待测图片中所有节点的入度信息,具体为:

依次遍历待测图片所有的边,将遍历到的边的顶点节点的入度加一,并更新所述顶点节点的入度信息。

进一步地,在本发明第三实施例中,依次将若干个起始节点从第一队列转移至结果列表,同时遍历所述起始节点的所有邻居节点,在所述结果列表中获取第一拓扑序列,具体为:

每个起始节点从第一队列转移至结果列表时,在所述待测图片的所有节点中确定所述起始节点的邻居节点,并将所述邻居节点的入度减一;

当所述邻居节点的入度减为0时,将所述邻居节点添加至第一队列中,确定为起始节点;

当第一队列的所有起始节点都转移至结果列表后,根据起始节点转移到结果列表顺序,确定第一拓扑序列。

进一步地,在本发明第三实施例中,通过检测所述待测图片所有的边是否都被访问,结合所述第一拓扑序列,返回空列表变量,具体为:

若所述待测图片中不存在未被访问的边,则确定所述待测图片不存在环路,返回空列表变量;其中,所述空列表变量包括所述第一拓扑序列;所述第一拓扑序列为待测图片的拓扑排序结果;

若所述待测图片中存在未被访问的边,则确定所述待测图片存在环路,返回空列表变量或报告错误;其中,所述空列表变量表示所述第一拓扑序列为错误的排序结果。

综上,本发明第三实施例提供了一种基于图论的拓扑排序系统,通过采用遍历待测图片中的所有边的方式,计算待测图片中每个节点的入度,根据图中每个节点的入度信息确定起始节点,并将其存储在第一队列中,从第一队列中依次取出一个起始节点,将该节点添加到结果列表中,同时遍历该节点的所有邻居节点,最后在结果列表中获取第一拓扑序列,检测待测图片所有的边是否都被访问,确定待测图片的拓扑排序结果。本发明优化了计算节点入度的方法,使其更方便进行操作,同时确定节点的依赖关系,进而提高了拓扑排序结果的准确性。

以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步的详细说明,应当理解,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围。特别指出,对于本领域技术人员来说,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

相关技术
  • 一种数据的排序方法、系统、协处理装置和主处理装置
  • 一种基于JavaScript与Unicode的字符排序方法、系统及装置
  • 一种基于可控硅管压降的排序方法、系统、装置及存储介质
技术分类

06120116497204