我想知道是否有任何算法或一些简单的程序来生成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);
}
虽然在某些情况下它无法生成区间图。
答案 0 :(得分:3)
生成具有N个节点的区间图的一种可能方法:
v_i
对应于混洗数组中i
的出现对v_i
和v_j
与边缘连接iff i
和j
在数组中交错。这是i j i j
或i j j i
,但不是i i j j
。换句话说,区间i
和j
相交。这个图保证是一个区间图(每个节点都是原始数组中的一个区间),每个图都可以用这种方式创建。