2013-02-18 115 views
-4

我想多次运行我的函数并获得不同的答案(因为它处理随机数),并从所有可能的答案中获得最小值。但函数总是返回相同的值。我怎样才能纠正循环,每次得到不同的答案并找到最小值? 这里是我的代码循环内运行函数

int n = 0; 
    KargerMinimumCut karger = new KargerMinimumCut(); 
    ArrayList<Integer> answers = new ArrayList<Integer>(); 
    for(int i = 0; i < 10; i++) { 
     n = karger.minCut(vertices); 
     answers.add(n); 
    } 
    int min = minimum(answers); 
    System.out.println("Minimum Number is: " + min); 

和最小功能

public static int minimum(ArrayList<Integer> array) { 
    int min = array.get(0); 
    for(int i = 1; i < array.size(); i++) { 
     if(array.get(i) < min) 
      min = array.get(i); 
    } 
    return min; 
} 
+4

哪里是随机性? – Dukeling 2013-02-18 13:04:59

+0

rnadomness在minCut函数中。当我运行它时,它会返回不同的答案,但在循环内部它总是返回相同的答案 – user2081119 2013-02-18 13:07:39

+1

小心向我们展示minCut方法? – 2013-02-18 13:07:58

回答

1

编辑:

看到你的算法后

好吧,你需要做到这一点。 (顺便说一下,我会用一个简单的整数二维数组)。

int min = Integer.MAX_VALUE; 
KargerMinimumCut karger = new KargerMinimumCut(); 
for(int i = 0; i < 10; i++) { 
    int cut = karger.minCut(copyOfVertices(vertices)); 
    System.err.println(cut); 
    min = Math.min(min,cut); 
} 
System.out.println("Minimum Number is: " + min); 

public ArrayList<ArrayList<Integer>> copyOfVertices(ArrayList<ArrayList<Integer>> vertices) { 
    ArrayList<ArrayList<Integer>> copy = new ArrayList<ArrayList<Integer>>(); 
    int size = vertices.size(); 
    for (int i=0; i<size; i++) { 
    int innerSize = vertices.get(i).size(); 
    ArrayList<Integer> row = new ArrayList<Integer>(); 
    for (int j=0; j<innerSize; j++) { 
     row.add(new Integer(vertices.get(i).get(j))); 
    } 
    copy.add(row); 
    } 
    return copy; 
} 
+0

谢谢!但是,如何在每次迭代过程中查看返回minCut的值? – user2081119 2013-02-18 13:12:24

+0

我编辑了我的答案,实际上并不需要打印出顶点,但如果需要的话,您可以打印出顶点。 – Sanchit 2013-02-18 13:17:45

+0

非常感谢!我试过了,它打印出相同的cut值10次:(有趣的是,当我在循环外运行时,每次运行时都会得到不同的答案 – user2081119 2013-02-18 13:30:59