0

3つのうち最も近い2つを取得するアルゴリズムを探しています。近づける変数はなく、そのうちの3つだけです。たとえば、31、52、84がある場合、関数が31と52を返すようにします。

配列の並べ替えでいくつかの方法を試しましたが、実際には3つの数値は変数(X、Y、Z)です。[X、Y、Z]配列を並べ替えると、変数の順序が失われます。

非常に単純な解決策があると確信しています。今はかなりばかげています...これは実際にはMAXScriptプロジェクトなので、特定の言語関数は避けたいのですが、どんな種類の情報でも大歓迎です。

4

2 に答える 2

4

3つの番号A、B、およびCに電話します。

3つの変数を計算します。

AB = (A - B)^2
BC = (B - C)^2
CA = (C - A)^2

次に、AB、BC、およびCAを比較します。ABが最小の場合は、AとBを出力します。BCが最小の場合は、BとCを出力します。CAが最小の場合は、CとAを出力します。

もう少しエレガントにしたい場合は、3つの数字で構成される構造を作成し、次のように3つの構造を作成します。

S1 = (A-B)^2, A, B
S2 = (B-C)^2, B, C
S3 = (C-A)^2, C, A

次に、最初の番号に基づいてS1、S2、S3を並べ替えます。最初にソートするエントリについては、2番目の2つの数値を出力します。

于 2012-05-02T11:24:33.817 に答える
3

たった3つの変数の場合、それらの間の距離を比較し、最も近い2つを選択する必要があります(Davidの回答を参照)。変数の場合n、次のトリックを実行できます。

  1. 値を並べ替える(O(n log n)
  2. ソートされたリストを調べて、隣接する変数間の最小の差を見つけます(O(n)
  3. 結果は、差が最小の変数のペアです
于 2012-05-02T11:36:42.587 に答える