2013-05-03 31 views
1

我想知道是否有任何算法或一些简单的过程来生成interval graph
我需要生成带有n节点的区间图,其中n正在从1变为10000.
如果有可能,我需要图的关联矩阵表示。
一个额外的限制是不完成所有这些图。生成区间图的算法

谢谢大家提前!

== ==加成

这是在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

任何限制?完整的图是一个区间图。 – 2013-05-03 13:06:14

+0

@JanDvorak,谢谢你的回应!实际上,它们可以是完整的图形,但对于我来说完成所有这些生成的图形是不可接受的。将根据您的评论更新我的问题,再次感谢! – 2013-05-03 13:09:03

+1

是否有其他限制?缺少一条边的完整图是间隔图。您需要一些更坚实的要求,比如“所有具有给定数量节点的区间图都必须可以使用此算法生成”。 – 2013-05-03 13:16:01

回答

3

一种可能的方式来生成的间隔图形用N个节点:

  • 创建阵列[1,1,2,2,... N,N-]
  • 洗牌阵列
  • 创建一个图:
    • 每个节点v_i对应的混洗阵列中的对i OCCURENCES的
    • 两个节点v_iv_j用边连接,如果ij在数组中交织。这是i j i ji j j i,但不是i i j j。换句话说,间隔ij相交。

此图被保证是一个间隔图形(每个节点是原始阵列中的间隔),和每一个图形是可能创造这样。

+0

谢谢Jan!我试图实现这个算法,并工作,至少在大多数情况下:)事情是,在某些情况下,它不能产生区间图。你可以看看我的实施?查看编辑的问题。 – 2013-05-03 22:10:55

+0

@ mr.nothing我检查了你的代码,我可以看到一些(性能,可读性)问题,但没有任何可能导致错误的东西。我应该发布这些吗?另外,'Graph'构造函数或区间图检查器中是否存在错误?我认为他们是你的?根据你的实现你可以发布导出非间隔图的混洗阵列吗? – 2013-05-04 03:12:50

+1

再次感谢,Jan! :)其实,我遇到的唯一问题是本文提出的算法(http://perso.prism.uvsq.fr/~qst/Tarjan/Lex-BFS.pdf)不能正常工作。现在我对该算法进行了一些更正,并且所有内容都作为魅力发挥作用! 关于性能问题在上面的实现中使用LinkedList应该更好,而不是ArrayList,对吧?如果您对发生器中的性能问题有任何其他想法,请将它与我分享,以便我可以改变实现? – 2013-05-05 15:39:43