가장 작은 것에서 가장 큰 것까지 정렬 된 float 배열이 있으며 전달 된 입력 값보다 크거나 작은 가장 가까운 float를 선택할 수 있어야합니다. 이 입력 값이 반드시 배열에 값으로 존재하는 것은 아닙니다.
순진한 접근 방식은 배열을 통해 간단한 선형 검색을 수행하는 것입니다. 다음과 같이 보일 수 있습니다.
void FindClosestFloatsInArray( float input, std::vector<float> array,
float *min_out, float *max_out )
{
assert( input >= array[0] && input < array[ array.size()-1 ] );
for( int i = 1; i < array.size(); i++ )
{
if ( array[i] >= input )
{
*min = array[i-1];
*max = array[i];
}
}
}
그러나 어레이가 커질수록이 속도는 느려지고 느려집니다.
누구 든지이 데이터를보다 최적으로 찾을 수있는 알고리즘에 대해 알고 있습니까? 이미 바이너리 검색으로 전환했는데 문제가 다소 개선되었지만 여전히 원하는 것보다 훨씬 느리며 실제로 배열에 존재하는 특정 값을 찾지 않기 때문에 결코 종료 할 수 없습니다 이른.
추가 정보 : 배열의 부동 소수점 값이 반드시 균등하게 분배되는 것은 아닙니다. 즉, 배열은 "1.f, 2.f, 3.f, 4.f, 100.f, 1200.f 값으로 구성 될 수 있습니다. , 1203.f, 1400.f ".
이 작업을 수십만 번 수행하고 있지만 조회 시간을 향상시킬 경우 수레 배열에 대해 사전 처리를 얼마든지 수행 할 수 있습니다. 도움이된다면 벡터 이외의 다른 것을 사용하도록 변경할 수 있습니다.