code: def get_link_map(self, nslave):
          
          tree_map, parent_map = self.get_tree(nslave)
          ring_map = self.get_ring(tree_map, parent_map)
          rmap = {0 : 0}
          k = 0
          for i in range(nslave - 1):
              k = ring_map[k][1]
              rmap[k] = i + 1
  
          ring_map_ = {}
          tree_map_ = {}
          parent_map_ ={}
          for k, v in ring_map.items():
              ring_map_[rmap[k]] = (rmap[v[0]], rmap[v[1]])
          for k, v in tree_map.items():
              tree_map_[rmap[k]] = [rmap[x] for x in v]
          for k, v in parent_map.items():
              if k != 0:
                  parent_map_[rmap[k]] = rmap[v]
              else:
                  parent_map_[rmap[k]] = -1
          return tree_map_, parent_map_, ring_map_
docs: get the link map, this is a bit hacky, call for better algorithm
          to place similar nodes together