(キーまたは最も近い一致 (上限)) の最後の出現を検索するための効果的なアルゴリズムを実装しています。
これまでのところ、私はこれを手に入れました。
long bin_search_closest_match_last_occurance ( long * lArray, long sizeArray, long lnumber)
{
long left, right, mid, last_occur;
left = 0;
right = sizeArray - 1;
last_occur = -1;
while ( left <= right )
{
mid = ( left + right ) / 2;
if ( lArray[mid] == lnumber )
{
last_occur = mid;
left = mid +1;
}
if ( lArray[mid] > lnumber )
right = mid - 1;
else
left = mid + 1;
}
return last_occur!=-1?last_occur:mid;
}
配列を持ってみましょう{0,0,1,5,9,9,9,9}
。キーは6
Fce が index を返す必要があり7
ますが、私の fce は返します4
最後に一致するインデックスまで線形に反復したくないことに注意してください。
念頭に置いて、パラメーター fce(開始、終了インデックスを追加) を変更し、見つかった上限から配列の最後まで fce を使用して別のバイナリ検索を実行するソリューションがあります (正確な一致が見つからない場合のみlast_occur==-1
)。
それを実装するためのより良い/よりクリーンなソリューションがあるかどうかを尋ねたいですか?