Saya memiliki serangkaian float, diurutkan dari yang terkecil hingga terbesar, dan harus dapat memilih float terdekat yang lebih besar dari atau kurang dari nilai input yang diteruskan. Nilai input ini tidak harus hadir sebagai nilai dalam array.
Pendekatan naif adalah melakukan pencarian linear sederhana melalui array. Itu mungkin terlihat seperti ini:
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];
}
}
}
Tapi jelas saat array semakin besar, ini akan menjadi semakin lambat.
Adakah yang punya ide tentang algoritma yang memungkinkan saya menemukan data ini secara lebih optimal? Saya sudah beralih ke pencarian biner, yang agak memperbaiki masalah, tetapi masih jauh lebih lambat dari yang saya inginkan, dan karena saya tidak benar-benar mencari nilai spesifik yang ada dalam array, itu tidak akan pernah dapat mengakhiri dini.
Informasi lebih lanjut: Nilai floating point dalam array tidak harus didistribusikan secara merata (yaitu, array dapat terdiri dari nilai "1.f, 2.f, 3.f, 4.f, 100.f, 1200.f , 1203.f, 1400.f ".
Saya melakukan operasi ini ratusan ribu kali, tetapi saya dapat melakukan sejumlah pra-pemrosesan pada array float, jika itu akan meningkatkan waktu pencarian. Saya benar-benar dapat mengubah menggunakan sesuatu selain vektor untuk menyimpannya, jika itu akan membantu.