发明内容
本说明书一个或多个实施例描述了一种目标实体资源分布的确定方法和装置,能够应对复杂交叉或循环资源占有结构。
第一方面,提供了一种目标实体资源分布的确定方法,方法包括:
获取第一有向图,所述第一有向图包括代表多个实体的多个节点,所述多个节点中包括代表目标实体的目标节点,所述多个节点中,具有资源占有关系的节点之间通过有向边连接,所述有向边的方向示出资源占有方向,并对应具有资源占有比例;
判断所述第一有向图中是否具有强连通分量;
当判断出所述第一有向图中具有至少一个强连通分量,且至少一个强连通分量中目标强连通分量包含的节点不具有所述目标强连通分量之外的资源占有方节点时,将所述目标强连通分量所对应的子图压缩成一个压缩节点,将子图中节点与子图外节点之间的有向边,作为压缩节点与子图外节点之间的有向边,得到压缩后的第二有向图;
根据压缩后的所述第二有向图,确定所述目标实体的资源分布。
在一种可能的实施方式中,所述根据压缩后的所述第二有向图,确定所述目标实体的资源分布,包括:
判断压缩后的所述第二有向图中是否具有强连通分量;
当判断出压缩后的所述第二有向图中具有至少一个强连通分量时,通过迭代算法计算所述第二有向图中各节点对所述目标实体的资源占有比例,在迭代算法的每次迭代中,按照某个节点的有向边对应的资源占有比例,将该节点的资源分配给通过有向边连接的其他节点。
进一步地,所述通过迭代算法计算所述第二有向图中各节点对所述目标实体的资源占有比例,包括:
构建序列,初始化所述序列包含代表目标实体的目标节点;
若所述序列不为空,则对所述序列循环执行:
从所述序列中去除首元素;
若所述首元素有资源占有方节点,则按照首元素的有向边对应的资源占有比例,将首元素的资源分配给通过有向边连接的其他资源占有方节点;
若首元素的资源占有方节点对所述目标实体的资源占有比例大于预设阈值,则把该资源占有方节点加入所述序列的已有元素之后;
直到所述序列为空时,将当前确定的各节点对所述目标实体的资源占有比例作为各节点对所述目标实体的最终资源占有比例。
进一步地,所述根据压缩后的所述第二有向图,确定所述目标实体的资源分布,还包括:
当判断出压缩后的所述第二有向图中不具有强连通分量时,以各节点之间的资源占有关系为依赖对各节点进行拓扑排序;其中,若第一节点是第二节点的资源占有方,则在排序结果中第二节点必须出现在第一节点之前;
按排序后的顺序,依次计算出各节点对所述目标实体的资源占有比例。
在一种可能的实施方式中,所述方法还包括:
当判断出所述第一有向图中不具有强连通分量时,以各节点之间的资源占有关系为依赖对各节点进行拓扑排序;其中,若第一节点是第二节点的资源占有方,则在排序结果中第二节点必须出现在第一节点之前;
按排序后的顺序,依次计算出各节点对所述目标实体的资源占有比例。
进一步地,所述按排序后的顺序,依次计算出各节点对所述目标实体的资源占有比例,包括:
初始化目标实体对目标实体的资源占有比例为100%;
从序列的第二个节点作为待计算节点开始计算,若该待计算节点是多个在先节点的资源占有方,则根据在先节点对目标实体的资源占有比例,以及该待计算节点对在先节点的资源占有比例,确定该待计算节点对目标实体的资源占有比例。
在一种可能的实施方式中,所述方法还包括:
当判断出所述第一有向图中不具有强连通分量时,通过构建资源占有比例矩阵,并对该资源占有比例矩阵求逆的方法计算所述第一有向图中各节点对所述目标实体的资源占有比例。
在一种可能的实施方式中,所述根据压缩后的所述第二有向图,确定所述目标实体的资源分布,包括:
判断压缩后的所述第二有向图中是否具有强连通分量;
当判断出压缩后的所述第二有向图中具有至少一个强连通分量时,通过构建资源占有比例矩阵,并对该资源占有比例矩阵求逆的方法计算所述第二有向图中各节点对所述目标实体的资源占有比例。
在一种可能的实施方式中,所述根据压缩后的所述第二有向图,确定所述目标实体的资源分布之后,所述方法还包括:
针对所述第二有向图,将压缩节点对应的原强连通分量所在子图复原,用以表示该子图各节点作为一个循环整体持有目标实体的资源,资源占有比例为确定的该压缩节点对目标实体的资源占有比例。
第二方面,提供了一种目标实体资源分布的确定装置,装置包括:
获取单元,用于获取第一有向图,所述第一有向图包括代表多个实体的多个节点,所述多个节点中包括代表目标实体的目标节点,所述多个节点中,具有资源占有关系的节点之间通过有向边连接,所述有向边的方向示出资源占有方向,并对应具有资源占有比例;
判断单元,用于判断所述获取单元获取的第一有向图中是否具有强连通分量;
压缩单元,用于当所述判断单元判断出所述第一有向图中具有至少一个强连通分量,且至少一个强连通分量中目标强连通分量包含的节点不具有所述目标强连通分量之外的资源占有方节点时,将所述目标强连通分量所对应的子图压缩成一个压缩节点,将子图中节点与子图外节点之间的有向边,作为压缩节点与子图外节点之间的有向边,得到压缩后的第二有向图;
确定单元,用于根据所述压缩单元压缩后的所述第二有向图,确定所述目标实体的资源分布。
第三方面,提供了一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行第一方面的方法。
第四方面,提供了一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现第一方面的方法。
通过本说明书实施例提供的方法和装置,首先获取第一有向图,所述第一有向图包括代表多个实体的多个节点,所述多个节点中包括代表目标实体的目标节点,所述多个节点中,具有资源占有关系的节点之间通过有向边连接,所述有向边的方向示出资源占有方向,并对应具有资源占有比例;接着判断所述第一有向图中是否具有强连通分量;然后当判断出所述第一有向图中具有至少一个强连通分量,且至少一个强连通分量中目标强连通分量包含的节点不具有所述目标强连通分量之外的资源占有方节点时,将所述目标强连通分量所对应的子图压缩成一个压缩节点,将子图中节点与子图外节点之间的有向边,作为压缩节点与子图外节点之间的有向边,得到压缩后的第二有向图;最后根据压缩后的所述第二有向图,确定所述目标实体的资源分布。本说明书实施例中,通过有向图来表示实体之间的资源占有关系,通过识别并压缩有向图中的强连通分量,从而能够应对复杂交叉或循环资源占有结构。
具体实施方式
下面结合附图,对本说明书提供的方案进行描述。
图1为本说明书披露的一个实施例的实施场景示意图。该实施场景涉及目标实体资源分布的确定,预先建立有向图,通过有向图来表示实体之间的资源占有关系,通过识别并压缩有向图中的强连通分量,从而能够应对复杂交叉或循环资源占有结构。
本说明书实施例中,实体可以理解为设备、公司或个人;当实体为设备时,该实体的资源可以理解为存储资源、处理资源等;当实体为公司时,该实体的资源可以理解为股权等;当实体为个人时,该实体的资源可以理解为劳务资源等。
强连通分量:在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。有向图的强连通子图,称为强连通分量(strongly connected components)。
参照图1,在该有向图中,包括节点{1,2,3,4,5,6},其中,节点{1,2,3,4}构成一个强连通分量。
本说明书实施例中,赋予有向图中的节点以特殊的含义,有向图包括代表多个实体的多个节点,所述多个节点中包括代表目标实体的目标节点,所述多个节点中,具有资源占有关系的节点之间通过有向边连接,所述有向边的方向示出资源占有方向,并对应具有资源占有比例。有向图中的强连通分量实际上就代表了一种交叉或循环资源占有结构,相应地,通过识别并压缩有向图中的强连通分量,从而能够应对复杂交叉或循环资源占有结构。
图2示出根据一个实施例的目标实体资源分布的确定方法流程图。如图2所示,该实施例中目标实体资源分布的确定方法包括以下步骤:步骤21,获取第一有向图,所述第一有向图包括代表多个实体的多个节点,所述多个节点中包括代表目标实体的目标节点,所述多个节点中,具有资源占有关系的节点之间通过有向边连接,所述有向边的方向示出资源占有方向,并对应具有资源占有比例;步骤22,判断所述第一有向图中是否具有强连通分量;步骤23,当判断出所述第一有向图中具有至少一个强连通分量,且至少一个强连通分量中目标强连通分量包含的节点不具有所述目标强连通分量之外的资源占有方节点时,将所述目标强连通分量所对应的子图压缩成一个压缩节点,将子图中节点与子图外节点之间的有向边,作为压缩节点与子图外节点之间的有向边,得到压缩后的第二有向图;步骤24,根据压缩后的所述第二有向图,确定所述目标实体的资源分布。下面描述以上各个步骤的具体执行方式。
首先在步骤21,获取第一有向图,所述第一有向图包括代表多个实体的多个节点,所述多个节点中包括代表目标实体的目标节点,所述多个节点中,具有资源占有关系的节点之间通过有向边连接,所述有向边的方向示出资源占有方向,并对应具有资源占有比例。可以理解的是,上述实体具体可以为公司或个人(即自然人),上述资源具体可以为股权,上述资源占有方向具体可以为节点A对节点B持股,或上述资源占有方向具体可以为节点B对节点A持股,上述资源占有比例具体可以为持股比例。
图3所示为本说明书实施例提供的一种第一有向图的示意图。参照图3,节点A、C、D代表的实体为公司,节点B代表的实体为自然人或公司,节点A代表的实体为目标实体,节点B对节点A的持股比例为50%,节点C对节点A的持股比例为50%,节点D对节点C的持股比例为100%,节点C对节点D的持股比例为100%。参照图3,确定目标实体的资源分布,实质上是确定节点B、C、D对节点A的持股比例。可以理解的是,节点B是简化了的不含循环的节点。
接着在步骤22,判断所述第一有向图中是否具有强连通分量。可以理解的是,当第一有向图中具有强连通分量时,可以采用特定的方式来确定目标实体的资源分布。
其中,判断所述第一有向图中是否具有强连通分量可以采用通常的算法,在此不做赘述。以图3所示的第一有向图为例,其中,存在节点C和节点D构成的强连通分量。
然后在步骤23,当判断出所述第一有向图中具有至少一个强连通分量,且至少一个强连通分量中目标强连通分量包含的节点不具有所述目标强连通分量之外的资源占有方节点时,将所述目标强连通分量所对应的子图压缩成一个压缩节点,将子图中节点与子图外节点之间的有向边,作为压缩节点与子图外节点之间的有向边,得到压缩后的第二有向图。可以理解的是,第一有向图中可能具有一个或多个强连通分量,以图3所示的第一有向图为例,其中,存在一个强连通分量,且该强连通分量不具有该强连通分量之外的资源占有方节点,该强连通分量可以被压缩为一个压缩节点。
图4为图3所示的第一有向图对应的压缩后的第二有向图的示意图。其中,节点C和节点D构成的强连通分量压缩后成为一个压缩节点X,压缩节点X对节点A的持股比例为50%,代表节点C和节点D作为整体对节点A的持股比例为50%。
最后在步骤24,根据压缩后的所述第二有向图,确定所述目标实体的资源分布。可以理解的是,步骤24中,具体是确定包括压缩节点在内的各节点对目标节点的资源占有比例。上述资源占有比例具体可以为持股比例。
以图4所示的压缩后的第二有向图为例,节点B对节点A的持股比例为50%,压缩节点X对节点A的持股比例为50%。图4所示的有向图较为简单,大多数情况下,有向图包含的节点较多,有向图较为复杂,需要特定的算法来确定包括压缩节点在内的各节点对目标节点的资源占有比例。
在一个示例中,判断压缩后的所述第二有向图中是否具有强连通分量;当判断出压缩后的所述第二有向图中具有至少一个强连通分量时,通过迭代算法计算所述第二有向图中各节点对所述目标实体的资源占有比例,在迭代算法的每次迭代中,按照某个节点的有向边对应的资源占有比例,将该节点的资源分配给通过有向边连接的其他节点。
图5为本说明书实施例提供的一种迭代计算方法流程图,参照图5,该迭代计算方法包括:
步骤51,构建序列,初始化所述序列包含代表目标实体的目标节点。
例如,初始化序列S=[目标公司T]。
步骤52,判断所述序列是否为空序列。
若所述序列为空序列,则结束流程;若所述序列不为空序列,则执行步骤53。
步骤53,从所述序列中去除首元素,并判断所述首元素是否有资源占有方节点。
例如,判断所述首元素是否有股东。
若判断出所述首元素有资源占有方节点,则执行步骤54;若判断出所述首元素无资源占有方节点,则执行步骤52。
步骤54,若所述首元素有资源占有方节点,则按照首元素的有向边对应的资源占有比例,将首元素的资源分配给通过有向边连接的其他资源占有方节点;若首元素的资源占有方节点对所述目标实体的资源占有比例大于预设阈值(即预设精度),则把该资源占有方节点加入所述序列的已有元素之后。
可以理解的,直到所述序列为空时,将当前确定的各节点对所述目标实体的资源占有比例,作为各节点对所述目标实体的最终资源占有比例。
图6为本说明书实施例提供的另一种压缩后的第二有向图的示意图。参照图6,压缩后的所述第二有向图中具有一个强连通分量,即节点B、C、D构成的强连通分量,由于该强连通分量具有该强连通分量之外的资源占有方,因此该强连通分量不能被压缩为压缩节点。下面对照图6,对前述迭代算法进行举例说明。
参照图6,节点A、F、G代表自然人,节点B、C、D、E代表公司,节点E为目标节点,该目标节点代表目标公司。各节点之间的持股关系及持股比例分别为:节点A对节点B的持股比例为0.7(即70%),节点B对节点C的持股比例为0.4,节点C对节点E的持股比例为0.1,节点G对节点C的持股比例为0.6,节点F对节点D的持股比例为0.8,节点D对节点B的持股比例为0.3,节点C对节点D的持股比例为0.2,节点D对节点E的持股比例为0.9。
图7为本说明书实施例提供的图6所示第二有向图对应的迭代步骤示意图,其中,节点A、B、C、D、F、G对目标节点E的持股比例按迭代顺序依次计算,参见图7,迭代包括以下步骤:迭代步骤0,初始构建序列(也称队列)[E],该队列包括目标节点E,节点E对节点E的持股比例为1;迭代步骤1,节点E出队列,在队列尾部加入节点E的股东节点C和节点D,队列变成[C,D],将节点E的持股分配给节点C和节点D,节点C的持股比例为0.1,节点D的持股比例为0.9;迭代步骤2,节点C出队列,节点C的股东为节点B和节点G,节点G为自然人没有股东,因此节点G不用加入队列,在队列尾部加入节点C的股东节点B,队列变成[D,B],将节点C的持股分配给节点B和节点G,节点B的持股比例为0.04,节点G的持股比例为0.06;迭代步骤3至迭代步骤11与前述步骤的做法类似,在此不再赘述;迭代步骤12,节点D出队列,节点D的股东为节点C和节点F,将节点D的持股分配给节点C和节点F,更新节点C和节点F的持股比例,节点C的持股比例为0.0000576,节点F的持股比例为0.7471104,节点F为自然人没有股东,节点C的持股比例低于设定的精度,因此节点C和F不用加入队列,队列变成[B];迭代步骤13和14与前述步骤的做法类似,在此不再赘述;迭代步骤15,节点C出队列,节点C的股东为节点B和节点G,将节点C的持股分配给节点B和节点G,更新节点B和节点G的持股比例,节点G为自然人没有股东,节点B的持股比例低于设定的精度,因此节点B和G不用加入队列,队列变成[];迭代步骤16,队列为空,迭代结束,此时,节点A对节点E的最终持股比例为0.0802816,节点F对节点E的最终持股比例为0.74752512,节点G对节点E的最终持股比例为0.172128768。
在一个示例中,当判断出压缩后的所述第二有向图中不具有强连通分量时,以各节点之间的资源占有关系为依赖对各节点进行拓扑排序;其中,若第一节点是第二节点的资源占有方,则在排序结果中第二节点必须出现在第一节点之前;按排序后的顺序,依次计算出各节点对所述目标实体的资源占有比例。
在一个示例中,当判断出所述第一有向图中不具有强连通分量时,以各节点之间的资源占有关系为依赖对各节点进行拓扑排序;其中,若第一节点是第二节点的资源占有方,则在排序结果中第二节点必须出现在第一节点之前;按排序后的顺序,依次计算出各节点对所述目标实体的资源占有比例。
进一步地,所述按排序后的顺序,依次计算出各节点对所述目标实体的资源占有比例,包括:初始化目标实体对目标实体的资源占有比例为100%;从序列的第二个节点作为待计算节点开始计算,若该待计算节点是多个在先节点的资源占有方,则根据在先节点对目标实体的资源占有比例,以及该待计算节点对在先节点的资源占有比例,确定该待计算节点对目标实体的资源占有比例。
下面结合具体例子对前述拓扑排序的算法进行说明。
图8为本说明书实施例提供的另一种压缩后的第二有向图的示意图。参照图8,由于节点A是节点B的股东,因此拓扑排序时节点A排在节点B的后面,因此图8对应的一种排序结果为[E、D、F、C、G、B、A],按顺序计算各节点对目标节点E的持股比例,过程如下:
节点E对节点E的持股比例为:1
节点D对节点E的持股比例为:0.9
节点F对节点E的持股比例为:0.9×0.6=0.54
节点C对节点E的持股比例为:1×0.1+0.9×0.2=0.28
节点G对节点E的持股比例为:0.28×0.6=0.168
节点B对节点E的持股比例为:0.28×0.4+0.9×0.2=0.292
节点A对节点E的持股比例为:0.292
在一个示例中,当判断出所述第一有向图中不具有强连通分量时,通过构建资源占有比例矩阵,并对该资源占有比例矩阵求逆的方法计算所述第一有向图中各节点对所述目标实体的资源占有比例。
在一个示例中,判断压缩后的所述第二有向图中是否具有强连通分量;当判断出压缩后的所述第二有向图中具有至少一个强连通分量时,通过构建资源占有比例矩阵,并对该资源占有比例矩阵求逆的方法计算所述第二有向图中各节点对所述目标实体的资源占有比例。
下面结合具体例子对前述构建矩阵的算法进行说明。
参照图6所示的第二有向图,构建直接持股矩阵X,图9为本说明书实施例提供的与图6所示第二有向图相对应的直接持股矩阵X的示意图。参照图9,矩阵X的元素xij表示i对j的直接持股比例,综合持股矩阵Y与直接持股矩阵X之间的关系用公式表示为:Y=X+Y·X
由上述公式可推导出:Y=X·(I-X)-1
图10为本说明书实施例提供的由矩阵X推导出矩阵Y的示意图。参照图10,计算得到节点A对节点E的综合持股比例为0.08032787,节点F对节点E的综合持股比例为0.74754098,节点G对节点E的综合持股比例为0.17213115。
在一个示例中,所述根据压缩后的所述第二有向图,确定所述目标实体的资源分布之后,针对所述第二有向图,将压缩节点对应的原强连通分量所在子图复原,用以表示该子图各节点作为一个循环整体持有目标实体的资源,资源占有比例为确定的该压缩节点对目标实体的资源占有比例。
通过本说明书实施例提供的方法,首先获取第一有向图,所述第一有向图包括代表多个实体的多个节点,所述多个节点中包括代表目标实体的目标节点,所述多个节点中,具有资源占有关系的节点之间通过有向边连接,所述有向边的方向示出资源占有方向,并对应具有资源占有比例;接着判断所述第一有向图中是否具有强连通分量;然后当判断出所述第一有向图中具有至少一个强连通分量,且至少一个强连通分量中目标强连通分量包含的节点不具有所述目标强连通分量之外的资源占有方节点时,将所述目标强连通分量所对应的子图压缩成一个压缩节点,将子图中节点与子图外节点之间的有向边,作为压缩节点与子图外节点之间的有向边,得到压缩后的第二有向图;最后根据压缩后的所述第二有向图,确定所述目标实体的资源分布。本说明书实施例中,通过有向图来表示实体之间的资源占有关系,通过识别并压缩有向图中的强连通分量,从而能够应对复杂交叉或循环资源占有结构。
图11示出根据另一个实施例的目标实体资源分布的确定方法流程图。如图11所示,该实施例中目标实体资源分布的确定方法包括以下步骤:
步骤1,构建有向图,节点为公司名/组织机构名/人名/机关名称等,边具备方向以区分A是B的股东。图中可能有环的存在,譬如A是B的股东,B也是A的股东。
步骤2,通过tarjan或其他算法判断图中是否有强连通分量。
若判断结果为是,则执行步骤3;否则,执行步骤5。
步骤3,将强连通分量所在子图G压缩成一个节点X时,备份子图G的节点/边数据,由于子图没有G之外的股东,只需保留子图作为G之外节点的股东边即可,譬如A节点在G内,B在G外,A是B的股东,缩点后A点被移除,增加了X节点,原A是B的股东边变成X是B的股东,持股比数据不变。
步骤4,通过tarjan或其他算法判断图中是否有强连通分量。
若判断结果为是,则执行步骤7;否则,执行步骤5。
步骤5,若A是B的股东,则在排序结果中B必须出现在A之前。以此为依赖条件对全部节点进行拓扑排序。
步骤6,拓扑排序后目标公司节点T一定出现在序列头部。初始化T对T的持股r_{T}为100%。从序列的第二个节点A开始计算。若A是{N_1.N_2,…,N_m}的股东,则A对T的持股可算为r_A=sum(r_{N_i}*d_{A,N_i}),其中r_i表示节点i对目标公司T的最终持股比例,d_{i,j}表示节点i对节点j的直接持股比例。
步骤7,循环迭代算法可先构建序列S,初始化包含目标公司节点T。若S不为空,则对S中的节点A进行如下计算过程:a.从S中去除A。b.若A有股东,将A持有的T的股权按其股东持股比例分出去。若其股东持有T的股权满足精度要求,譬如>1e-5,则把该股东节点加入S。循环结束时每个节点持有的股权即为其对目标公司T的最终持股比例。
步骤8,若前面进行了第3步缩点过程,这里去除X节点,把原强连通分量所在子图复原。表示该子图各节点作为一个循环整体持有目标公司T的股权,比例为去除的X节点持有目标公司T的股权数额。
需要说明的是,图11中步骤5和6也可以用步骤7的方法计算,但是前者利用了图中无环的特性,计算效率更高;图11中步骤5和6也可以替换成构建持股比矩阵的方法计算,二者计算效率近似;图11中第7步也可以替换成构建持股比矩阵的方法计算,前者理解更直观,后者计算效率更高。
本说明书实施例中,通过将循环体最终受益集团“缩点”,解决其他方案无法处理循环体受益的问题;在有向图中无环时能快速计算出最终持股比例,时间复杂度O(n),n为总节点数;可以不依赖矩阵运算库同时达到较高的计算效率。综上,将最终受益的循环集团缩点,使得目标公司的股权分布可通过多种方法精确计算。
根据另一方面的实施例,还提供一种目标实体资源分布的确定装置,所述装置用于执行本说明书实施例提供的目标实体资源分布的确定方法。图12示出根据一个实施例的目标实体资源分布的确定装置的示意性框图。如图12所示,该装置1200包括:
获取单元121,用于获取第一有向图,所述第一有向图包括代表多个实体的多个节点,所述多个节点中包括代表目标实体的目标节点,所述多个节点中,具有资源占有关系的节点之间通过有向边连接,所述有向边的方向示出资源占有方向,并对应具有资源占有比例;
判断单元122,用于判断所述获取单元121获取的第一有向图中是否具有强连通分量;
压缩单元123,用于当所述判断单元122判断出所述第一有向图中具有至少一个强连通分量,且至少一个强连通分量中目标强连通分量包含的节点不具有所述目标强连通分量之外的资源占有方节点时,将所述目标强连通分量所对应的子图压缩成一个压缩节点,将子图中节点与子图外节点之间的有向边,作为压缩节点与子图外节点之间的有向边,得到压缩后的第二有向图;
确定单元124,用于根据所述压缩单元123压缩后的所述第二有向图,确定所述目标实体的资源分布。
可选地,作为一个实施例,所述确定单元124,具体包括:
判断子单元,用于判断压缩后的所述第二有向图中是否具有强连通分量;
迭代子单元,用于当所述判断子单元判断出压缩后的所述第二有向图中具有至少一个强连通分量时,通过迭代算法计算所述第二有向图中各节点对所述目标实体的资源占有比例,在迭代算法的每次迭代中,按照某个节点的有向边对应的资源占有比例,将该节点的资源分配给通过有向边连接的其他节点。
进一步地,所述迭代子单元,具体用于:
构建序列,初始化所述序列包含代表目标实体的目标节点;
若所述序列不为空,则对所述序列循环执行:
从所述序列中去除首元素;
若所述首元素有资源占有方节点,则按照首元素的有向边对应的资源占有比例,将首元素的资源分配给通过有向边连接的其他资源占有方节点;
若首元素的资源占有方节点对所述目标实体的资源占有比例大于预设阈值,则把该资源占有方节点加入所述序列的已有元素之后;
直到所述序列为空时,将当前确定的各节点对所述目标实体的资源占有比例作为各节点对所述目标实体的最终资源占有比例。
进一步地,所述确定单元124,还包括:
排序子单元,用于当判断出压缩后的所述第二有向图中不具有强连通分量时,以各节点之间的资源占有关系为依赖对各节点进行拓扑排序;其中,若第一节点是第二节点的资源占有方,则在排序结果中第二节点必须出现在第一节点之前;
顺序计算子单元,用于按所述排序子单元排序后的顺序,依次计算出各节点对所述目标实体的资源占有比例。
可选地,作为一个实施例,所述装置还包括:
排序子单元,用于当判断出所述第一有向图中不具有强连通分量时,以各节点之间的资源占有关系为依赖对各节点进行拓扑排序;其中,若第一节点是第二节点的资源占有方,则在排序结果中第二节点必须出现在第一节点之前;
顺序计算子单元,用于按所述排序子单元排序后的顺序,依次计算出各节点对所述目标实体的资源占有比例。
进一步地,所述顺序计算子单元,具体用于:
初始化目标实体对目标实体的资源占有比例为100%;
从序列的第二个节点作为待计算节点开始计算,若该待计算节点是多个在先节点的资源占有方,则根据在先节点对目标实体的资源占有比例,以及该待计算节点对在先节点的资源占有比例,确定该待计算节点对目标实体的资源占有比例。
可选地,作为一个实施例,所述确定单元124,还用于当判断出所述第一有向图中不具有强连通分量时,通过构建资源占有比例矩阵,并对该资源占有比例矩阵求逆的方法计算所述第一有向图中各节点对所述目标实体的资源占有比例。
可选地,作为一个实施例,所述确定单元124,包括:
判断子单元,用于判断压缩后的所述第二有向图中是否具有强连通分量;
确定子单元,用于当判断出压缩后的所述第二有向图中具有至少一个强连通分量时,通过构建资源占有比例矩阵,并对该资源占有比例矩阵求逆的方法计算所述第二有向图中各节点对所述目标实体的资源占有比例。
可选地,作为一个实施例,所述装置还包括:
复原单元,用于在所述确定单元124根据压缩后的所述第二有向图,确定所述目标实体的资源分布之后,针对所述第二有向图,将压缩节点对应的原强连通分量所在子图复原,用以表示该子图各节点作为一个循环整体持有目标实体的资源,资源占有比例为确定的该压缩节点对目标实体的资源占有比例。
通过本说明书实施例提供的装置,首先由获取单元121获取第一有向图,所述第一有向图包括代表多个实体的多个节点,所述多个节点中包括代表目标实体的目标节点,所述多个节点中,具有资源占有关系的节点之间通过有向边连接,所述有向边的方向示出资源占有方向,并对应具有资源占有比例;接着由判断单元122判断所述第一有向图中是否具有强连通分量;然后由压缩单元123当判断出所述第一有向图中具有至少一个强连通分量,且至少一个强连通分量中目标强连通分量包含的节点不具有所述目标强连通分量之外的资源占有方节点时,将所述目标强连通分量所对应的子图压缩成一个压缩节点,将子图中节点与子图外节点之间的有向边,作为压缩节点与子图外节点之间的有向边,得到压缩后的第二有向图;最后由确定单元124根据压缩后的所述第二有向图,确定所述目标实体的资源分布。本说明书实施例中,通过有向图来表示实体之间的资源占有关系,通过识别并压缩有向图中的强连通分量,从而能够应对复杂交叉或循环资源占有结构。
根据另一方面的实施例,还提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行结合图2至图11所描述的方法。
根据再一方面的实施例,还提供一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现结合图2至图11所描述的方法。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。