私は渡された値のすぐ下のインデックスを検索する浮動小数点データのリストを持っています。簡単な例:バイナリサーチとLINQ selectステートメント
double[] x= {1.0, 1.4, 2.3, 5.6, 7.8};
double[] y= {3.4, 8.2, 5.3, 8.1, 0.5};
int lowerIndex = BinaryIndexSearch(x, 2.0); // should return 1
意図は補間がその後lowerIndex
とlowerIndex+1
を用いx
とy
で実行されることです。
バイナリインデックス検索アルゴリズムは、LINQでこれを行うには、より効率的な方法があります
int BinaryIndexSearch(double[] x, double value)
{
int upper = x.Length - 1;
int lower = 0;
int pivot;
do
{
pivot = (upper + lower)/2;
if (value >= x[pivot])
{
lower = pivot + 1;
}
else
{
upper = pivot - 1;
}
}
while (value < x[pivot] || value >= x[pivot + 1]);
return pivot;
}
のように見えますか?それは通常より速いでしょうか? do..whileループの終了時の比較演算は、私のプログラムの "最もホットな"行です。