生成区间图的算法

时间:2013-05-03 13:04:54

标签: math graph

我想知道是否有任何算法或一些简单的程序来生成interval graph
我需要生成包含n个节点的区间图,其中n正在更改为1,例如10000。 如果可能,我需要图表的关联矩阵表示 另一个限制是不要让所有这些图表都完整。

提前感谢大家!

== ADDITION ==

这是Java中的一个实现:

public Object generate(int numberOfNodes) {
    int listCapacity = numberOfNodes * 2;
    List<Integer> arr = new ArrayList<Integer>();
    int[][] adjacencyMatrix = new int[numberOfNodes][numberOfNodes];
    Integer nodeNumber = 0;
    for (int i = 0; i < listCapacity; i = i + 2) {
        arr.add(nodeNumber);
        arr.add(nodeNumber);
        nodeNumber++;
    }

    Collections.shuffle(arr);

    for (int i = 0; i < numberOfNodes; i++) {
        for (int j = arr.indexOf(i); j < arr.lastIndexOf(i); j++) {
            adjacencyMatrix[i][arr.get(j)] = 1;
            adjacencyMatrix[arr.get(j)][i] = 1;
        }
        adjacencyMatrix[i][i] = 0;
    }

    return new Graph(adjacencyMatrix);
}  

虽然在某些情况下它无法生成区间图。

1 个答案:

答案 0 :(得分:3)

生成具有N个节点的区间图的一种可能方法:

  • 创建一个数组[1,1,2,2,... n,n]
  • 洗牌阵列
  • 创建图表:
    • 每个节点v_i对应于混洗数组中i的出现对
    • 两个节点v_iv_j与边缘连接iff ij在数组中交错。这是i j i ji j j i,但不是i i j j。换句话说,区间ij相交。

这个图保证是一个区间图(每个节点都是原始数组中的一个区间),每个图都可以用这种方式创建。