2012-02-26 32 views
0

配列内で最小の数を見つける再帰アルゴリズムの疑似コードがあります。配列内の最小要素を見つける再帰アルゴリズム

ここにアルゴリズムがあります。私はこの擬似コードについて理解していない

Min(A[0..n - 1]) 
If n = 1 return A[0] 
else 
{ 
    temp <-- Min(A[0..n - 2]) 
    if temp <= A[n - 1] 
    return temp 
    else return A[n - 1] 
} 

一部はライン " - MIN([0..N - 2])TEMP <" です。特に "n - 1"の代わりに再帰呼び出しで "n - 2"となるのはなぜですか?

私の他の質問は、コードでその行を実装する方法です。私はJavaを使用しています。

ご協力いただきありがとうございます。

+0

あなたは再帰の終わりに近づく一つであることが必要に再帰するたびに。 (あなたが1つの要素しか持たないとき) –

+0

応答をありがとう。この擬似コードはどのように実装すればよいですか?コード内でその行をどのように扱うかは不明です。 – user695752

答えて

5

配列は0からn-1までのインデックスが付いているためです。 1つ小さい要素、つまりn-2のサブアレイで再帰する必要があります。

0

私の他の質問は、コード内にその行を実装する方法です。

アレイを使用している場合。

// create an array with one less element. 
A a2 = new A[a.length-1]; 
// copy the elements 
System.arrayCopy(a,0,a2,0,a2.length); 

あなたの第一の質問には一覧

List<A> a2 = a.subList(0, a.length-1); 
1

を使用している場合:

は、あなたが問題を解決するために、再帰的なアルゴリズムを使用しているので、あなたが最初に解決しなければなりませんより小さなサイズで同じ問題。この擬似コードでは、長さがnの配列の最小値を見つけるために、最初にn-1のサイズを持つ同じ配列の最小値を見つけてから、最小値をn番目の要素と比較します。あなたの配列は0からn-1(これは長さ= nになる)のインデックスが付けられているので、再帰呼び出しでは、インデックスをインデックス0からn-2(n-1要素)で呼び出す必要があります。あなたの第二の質問には

: これは私がJavaでコードを実装する方法を次のとおりです。

public class Minimum { 
    public Minimum(int[] A) { 
    findMin(A, 0, A.length-1); 
} 

public int findMin(int [] A, int start, int end){ 
    if (start== end-1) 
     return A[0]; 
    else{ 
     int temp=findMin(A, start, end-1); 
     if (temp<=A[end]) 
      return temp; 
     else 
      return A[end]; 
    } 
} 

} 
+0

これはあなたが尋ねた行です - > 'int temp = findMin(A、start、end-1);' – Peggy

関連する問題