0

この問題を解決する方法を教えてください。配列を 0 要素にするために、複数の配列内の同様の要素を最適/最速の順序で削除する方法を見つける必要があります。次の配列がある場合の IE:

         'a    {1,12,10,31}'
         'b    {12,21}'
         'c    {12,18,5,21}'
         'd    {12,18,21}'

12 を削除したい -> 21 (b は完了) 次に -> 18 (d は完了)

この問題は、実際にはソフトウェアの非互換性に関連しています...どんなアイデアでも役に立ちます。ありがとう、パット

4

1 に答える 1

0

まあ、それは複数の配列がいくつあるかによって異なります。2 つしかない場合は、それらを個別に並べ替えて、両方を同時に順番に反復処理して削除できます。

ただし、任意の数の配列がある場合、これはすぐに複雑になります。

この場合、次の方法が最も簡単です。

  1. すべてを 1 つの配列 (ARRAY という名前) に入れます (マージ)。

  2. 配列のソート (ARRAY)

  3. 一度だけ出現する要素を削除し、複数回出現する要素の 1 つのコピーを残しながら、配列 (ARRAY) を反復処理します。

  4. 次に、元の配列 (A、B、C、D など) ごとに、この元の配列 (A など) を ARRAY と共に繰り返し処理し、ARRAY にもある A の要素を削除します。

ステップ 4. では、おそらく (疑似 C コードで記述された) 次のようなものが必要です。

foreach (A = arrays [A, B, C, D]) { // for each original array
  int j=0;
  for (int i=0;i<A.size;i++) { // iterating over array A
    // increase index j to iterate ARRAY (find closest # in ARRAY >= A[i])
    while (j<ARRAY.size-1 && A[i]>ARRAY[j]) j++;

    if (ARRAY[j]==A[i]) /* remove it */;
    else /* keep it */;
  }
}
于 2012-09-01T02:15:57.460 に答える