0

配列から最も近い浮動小数点値を選択しようとすると問題が発生します。以下はデータの例です。

私が扱う数字は、常にこのミラーリング特性を共有しています。

{-9,-3,-1,0,1,3,9}

-8.8 を検索すると、-9 が返されるはずです。

8.8 を検索すると、9 が返されると予想されます。

以前は、配列で最も近い値を検索するときに、配列を調べて、各配列要素の絶対値から必要な値を引いた値を追跡していました。最小値が勝ちます。

配列内の少なくとも2つの数値が「最も近い」ため、その方法はここで問題を引き起こします(上記の例では9と-9)

4

3 に答える 3

2

配列は常にソートされるため、バイナリ検索を使用して候補セットを最大 2 つの配列値に減らすことができます。元の配列に float が含まれていて、そのうちのいくつかがマシンの精度よりも少ない場合に発生する課題は 1 つだけ考えられます。

この状況に対処する最善の方法は、アプリケーションによって異なります (そもそも難解でない場合)。ただし、テスト値と区別できないすべての値は、配列内で連続したサブシーケンスを形成することに注意してください。そのため、ヒューリスティックとして、このサブシーケンスの中央の要素を選択することができます。

于 2013-05-14T13:36:53.993 に答える
1

アレイがミラーリングされているという事実により、これが簡単になります。最初は検索値の符号を無視して、前述のように最も近い絶対値を見つけることができます。次に記号を修正します。

これは Python ですが、必要に応じて変換できる疑似コードに十分近いはずです。

def find_closest(search_val):
    smallest_diff = float(inf)
    closest_val = 0
    # Search only positive half of array
    for val in [0, 1, 3, 9]:
        # Treat search_val as positive for now
        diff = abs(val - abs(search_val))
        if diff < smallest_diff:
            smallest_diff = diff
            closest_val = val
    # Correct sign of result
    if search_val < 0:
        closest_val = -closest_val
    return closest_val
于 2013-05-19T19:08:56.343 に答える