2

宿題だと言って前置きします。私はただいくつかのポインタを探しています。私はこれで頭を悩ませてきました、そして私の人生の間、私はそれを手に入れていません。リストから最小の要素を見つけるように求められます。ここにサブリストが必要なことはわかっていますが、その後はわかりません。どんなポインタも素晴らしいでしょう。ありがとう。

/** Find the minimum element in a list.
 * 
 * @param t a list of integers
 * 
 * @return the minimum element in the list
 */ 
  public static int min(List<Integer> t) { 
  if (t.size() == 1){ 
  return t.get(0); 
  } 
  else{ 
      List<Integer> u = t.subList(1, t.size());
4

5 に答える 5

3

再帰的アルゴリズムのポイントは、計算する必要のあるすべてが戻り値または追加のパラメーターを介して行われることです。再帰ステップのローカル呼び出し以外には何もありません。

最小要素を見つける必要があるため、いくつかの考慮事項を考慮する必要があります。

  • 1つの要素で構成されるリストの最小要素はその要素です
  • ジェネリックリストの最小要素は、最初の要素と残りのリストの最小値の間の最小値です。

これらを考慮に入れることにより、実装が容易になるはずです。特に、再帰的アルゴリズムには、アルゴリズムの説明と非常によく似ているという便利さがあります。

于 2013-03-27T02:29:52.090 に答える
1

リストに適用される関数minとサブリストに適用される関数minの関係を見つける必要があります。

min([abcde ...])= f(a、min([bcde ...]))

ここで、関数fを見つける必要があります。関係ができたら、それを実装するのは簡単です。幸運を。

于 2013-03-27T02:34:26.727 に答える
0

最も一般的な意味では、再帰とは、作業を分解し、作業の小さなチャンクを自分のコピーに委任することに基づく概念です。再帰が機能するには、次の3つの主要な要素が必要です。

  1. 仕事の内訳。各ステップをどのように「シンプル」にしますか?
  2. 再帰呼び出し。ある時点で、関数はそれ自体を呼び出す必要がありますが、「作業」は少なくなります。
  3. ベースケース。再帰プロセスを停止する(通常は些細な)エンドケースとは何ですか?

あなたの場合、minリストを操作する関数を作成しようとしています。毎回リストを1つ小さくする(最初の要素をサブリストに入れる)ことで、なんらかの方法で作業を減らす(内訳)ことができると考えるのは正しいです。他の人が述べているように、アイデアは「リストの残りの部分」に対して最初の要素(あなたがちょうど外した)をチェックすることです。ここで、信頼の飛躍が始まります。この時点で、min関数がサブリストで機能すると「想定」し、サブリストで関数呼び出しを行うことができます(再帰呼び出し)。ここで、すべての呼び出しが返されることを確認する必要があります(つまり、永久に繰り返されないことを確認します)。そこで、基本ケースが役立ちます。リストのサイズが1の場合、唯一の要素はリストの最小のものです。電話する必要はありませんmin繰り返しますが、戻ってください(元の投稿にすでにある部分)。

于 2013-03-27T03:08:28.067 に答える
0
/**
 * The function computes the minimum item of m (-1 if m is empty). 
 * @param m: The MyList we want to compute its minimum item.
 * @return: The minimum item of MyList    
 */ 
public int minimum(MyList<Integer> m){

    int res = 0;
    int e0 = 0;
    int e1 = 0;

    // Scenarios Identification
    int scenario = 0;

    // Type 1. MyLyst is empty
    if(m.length() == 0) {
        scenario = 1;
    }else {
    // Type 2. MyLyst is not empty
        scenario = 2;
    }

    // Scenario Implementation
    switch(scenario) {

    // If MyLyst is empty
    case 1:
        res = -1;
        break;
        // If there is 1 or more elements   
    case 2:
        //1. Get and store first element of array
        e0 = m.getElement(0);
        //2. We remove the first element from MyList we just checked
        m.removeElement(0);
        //3. We recursively solve the smaller problem
        e1 = minimum(m); 
        //4. Compare and store results
        if(e0 < e1) {
            res = e0;
        }
        else {
            res = e1;
        }
        //5. Return removed element back to the array
        m.addElement(0, e0);
        break;
    }
    //6. Return result 
    return res;
}
于 2018-11-27T23:20:23.783 に答える
-1

さあ、次の方法で試してみてください。

    public static Integer minimum(List<Integer> t) {
        int minInt;
       if (t.size() == 1) {
        return t.get(0);
       } else {
            int first = t.get(0);
            List<Integer> u = t.subList(1, t.size());
            minInt = Math.min(first, u.get(0));
            minInt = IntegerList.minimum(u);
          }
         return minInt;
      }

うまくいけば、これで問題が解決します。

于 2013-12-11T20:29:01.277 に答える