2

ジェスチャ ポイントを使用してジェスチャの類似性を比較するプログラムを Android で開発しています。次のような 2 つの配列があります。

gest_1 = [120,333,453,564,234,531]
gest_2 = [222,432,11,234,223,344,534,523,432,234]

配列のいずれかのサイズを動的に変更する方法がないことはわかっているので、これらの配列を使用してこれらの両方のジェスチャを比較し、類似性を返す方法はありますか?

配列内のデータはランダムに入力されていることに注意してください。

4

6 に答える 6

5

ハッシュセットを使用します。2 つのリストを結合するには、

HashSet<Integer> hashSet = new HashSet<>(); // Contains the union
for(int i = 0; i < array1.length; i++)
    hashSet.add(array1[i]);
for(int i = 0; i < array2.length; i++)
    hashSet.add(array2[i]);

2 つのリストの交点については、

HashSet<Integer> hashSet = new HashSet<>();
List<Integer> list = new ArrayList<>();  // Contains the intersection
for(int i = 0; i < array1.length; i++)
    hashSet.add(array1[i]);
for(int i = 0; i < array2.length; i++) {
    if(hashSet.contains(array2[i])) {
        list.add(array2[i]);
    }
}
于 2013-04-10T15:51:32.650 に答える
1

次のようなことを試すことができます:

  List similarities = new ArrayList();
  for(int i = 0; i < Math.max(gest_1.length, gest_2.length); i++){
    if (gest_1[i] == gest_2[i])
       similarities.add(gest_1[i];
  }
于 2013-04-10T15:55:14.710 に答える
0

スペースは重要ですか?そうでない場合は、配列の 1 つをハッシュテーブルに格納し、要素がハッシュテーブルに含まれているかどうかをチェックする他の配列を反復処理できます。これは、O(nm) ではなく O(n) になりますが、アルゴリズムのサイズも大きくなります。

そのようなことができない場合は、2 つのループが必要になります。要素が途中で等しいかどうかをチェックする 2 番目の配列全体を通して内側のループがインクリメントされた後、外側のループは最初の配列のインデックスをインクリメントします。これは O(nm) になる可能性があります。

上記の考えは、「類似性」と言うとき、ある配列に他の配列の他の要素と等しい要素があることを意味すると仮定しています。

于 2013-04-10T15:51:13.450 に答える
0
        int temp = 0;
        int[] gest_1 = {120, 333, 453, 564, 234, 531};
        int[] gest_2 = {222, 432, 11, 234, 223, 344, 534, 523, 432, 234};
        ArrayList<Integer> g1 = new ArrayList<>();
        ArrayList<Integer> g2 = new ArrayList<>();

        for (int i : gest_1) {
            g1.add(i);
        }
        for (int i : gest_2) {
            g2.add(i);
        }
        for (int i : gest_1) {
            if (g2.contains(i)) {
                temp++;
            }
//            else{
//                break;
//            }
        }

        System.out.println(temp + " element(s) are equal ...");
    }
于 2013-04-10T15:48:48.603 に答える