一.算法的目的与意义
当前数据中心网络拓扑结构通常采用层次结构,如业界最常用的树形拓扑结构中,所有设备可以分为服务器层、边界交换机层、核心交换机层。每层设备的功能,配置,类型等都存在很大的差异,又由于数据中心中设备数量巨大,因此,设计一个算法,自动分析出每个设备具体属于那一层次是很有必要的。
二.算法输入与输出
算法输入:设备间连接关系,设备类型(服务器或交换机)
算法输出:设备所属层次(最底层是服务器---层次0)
三.算法实现
1)首先将所有设备的层次都置为0,把它们放入同一个集合中,我们称之为未分层集合,并在当中查找设备类型为服务器的节点,将这些设备从所有设备的集合中取出,形成一个新的集合,我们称之为 支点集合。
2)将未分配集合中所有设备的层次加1,然后根据支点集合,在未分配集合中寻找与支点集合中设备有连接关系的设备,将他们从未分配集合中取出,形成新的支点集合。
3)重复执行步骤2),直到未分配集合为空,算法结束,这是所有设备的层次已分出。
伪代码如下:
Layer_Finding(Device) /*初始化,以所有设备的集合作为输入*/
foreach vertex v∈Device
If (v.type==server){
delete v from Device;
add v into Pivot;
}
foreach vertex v∈Device
V.layer++; //所有设备层数加一
While(true){
If(Device is empty){
Return true;}
Foreach vertex v∈Device
Foreach vertex v'∈Pivot
If ( v connect with v'){
delete v from Device;
Add v into new Piovt;
}
foreach vertex v∈Device
V.layer++; //所有设备层数加一
}
Java版原型系统见附件
<!--EndFragment-->