0

2 要素セットから k 要素アイテムセットを生成するために、次のコードを作成しました。2 つの要素セットは、clist1 および clist2 として、candidateItemsetGen に渡されます。

    public static void candidateItemsetGen(ArrayList<Integer> clist1, ArrayList<Integer> clist2) 
        {
            for(int i = 0; i < clist1.size(); i++)
            {
                for(int j = i+1; j < clist2.size(); j++)
                {
                   for(int k = 0; k < clist1.size()-2; k++)
                   {
                       int r = clist1.get(k).compareTo(clist2.get(k));
                       if(r == 0 && clist1.get(k)-1 == clist2.get(k)-1)
                       {
 **                           candidateItemset.add(clist1.get(i), clist1.get(clist1.size()-1), clist2.get(clist2.size()-1));
                       }
                   }
                }
            }
//    return candidateItemset;
        }

k-itemset を作成する条件は、clist1(i) == clist2(i) であり、i = 1,...,k-2 および clist1(k-2) != clist2(k-2) です。しかし、**を入れたコードにエラーがあります。どうすればこれを修正できますか? ロジックは、この関数が候補アイテムセットを生成し、それが他の候補アイテムセットを生成するための入力として再び使用されるというものです。

4

2 に答える 2

0

ArrayListのaddメソッドは最大 2 つの引数を取り、3 つを渡します。3つすべて追加したい場合は、add(Integer i)3回呼び出してください。

また、関数から戻りたい場合は、戻り値をcandidateItemsets宣言してリストを作成する必要があります。ArrayList<Integer>

public static ArrayList<Integer> candidateItemsetGen(ArrayList<Integer> clist1, ArrayList<Integer> clist2) {
  ArrayList<Integer> candidateItemset = new ArrayList<Integer>();

  for (int i = 0; i < clist1.size(); i++) {
    for (int j = i + 1; j < clist2.size(); j++) {
      for (int k = 0; k < clist1.size() - 2; k++) {
        int r = clist1.get(k).compareTo(clist2.get(k));
        if(r == 0 && clist1.get(k) - 1 == clist2.get(k) - 1) {
          candidateItemset.add(clist1.get(i));
          candidateItemset.add(clist1.get(clist1.size() - 1));
          candidateItemset.add(clist2.get(clist2.size() - 1));   
        }        
      }
    }
  }

  return candidateItemset;
}

関連する値のグループとして 3 つすべてを追加する場合は、それらを別のデータ構造にまとめて保存し、それcandidateItemset(正しい型の) に追加します。

于 2013-06-15T16:55:31.970 に答える