3

2 つの配列があるとします。

a=[10 21 50 70 100 120];
b=[18 91];

最も近く、かつ 10 単位以内にある a と b の間で (単一の) 要素を一致させたいと考えています。

結果 :

idxa=[1 2 3 4 5 6]

idxb=[2 5]

一致する要素は同じ番号を共有します。

(たとえば) 18 が 10 ではなく 21 と一致することを確認する方法がわからないため、混乱しています。これらは両方とも、互いに 10 単位以内にあるという要件を満たしているためです。また、いくつか (最大 8 つ) のリストでこれを実行したいのですが、コードが複雑になりすぎて、見落としている簡単な解決策があるように感じます。リストの長さが短いため、効率は心配ありません。

ありがとうございました!

4

2 に答える 2

0

あなたの配列はソートされているようです(私はその仮定に基づいて進めます;そうでなければ、あなたは単にそれらをソートすることができます)。

複数のアレイを1つの大きなアレイにマージしてみましたか?(マージソートのマージステップに似ています)。これは、問題を「配列内のクローゼット要素を見つける」に減らすので、良い出発点になります。これは、比較すると簡単です。

これにより、重複を削除することもできます。つまり、すべての「21」を配列内の単一の「21」に減らします。

18が10ではなく21と一致するようにするには、キー(18)と10単位([10,21))以内の各値の差を計算してから、差が最も小さいものを選択します。

更新:すべての配列に共通の値のみを検索するというコメントに応えて、これは、配列の共通部分を検索することで配列をマージするときに実行できます。これは、言語によっては実際には事前定義された方法である可能性があります。

于 2013-02-23T21:21:47.447 に答える
0

小さな配列の場合、これは力ずくで行うことができます。

(1) 2 つの配列のうち小さい方を反復し、次に大きい方の配列を反復します
(2) 「これまでで最も近い一致」CMSF を追跡し
ます (3) より適切な一致が見つかった場合は、CMSF を更新
します (4) 配列の最後に達したときリスト、CMSF が <= 10 の場合は保持、それ以外の場合はこの項目を無視 (一致するものがない)

于 2013-02-23T21:50:16.967 に答える