2013-02-18 161 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