En küçükten büyüğe doğru sıralanan bir dizi yüzen var ve en yakın float geçirilen bir giriş değerinden daha büyük veya daha az seçmek gerekir. Bu giriş değeri dizide bir değer olarak bulunmayabilir.
Saf bir yaklaşım dizi boyunca basit bir doğrusal arama yapmak olacaktır. Bu şöyle görünebilir:
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];
}
}
}
Ama tabii ki dizi büyüdükçe, bu yavaşlar ve yavaşlar.
Herkes bu verileri daha iyi bulmama izin verecek bir algoritma hakkında bir fikri var mı? Zaten bazı konularda geliştirilmiş bir ikili aramaya geçtim, ama yine de istediğimden çok daha yavaş ve aslında dizide var olan belirli bir değeri aradığımdan, asla sonlandıramaz erken.
Daha fazla bilgi: Dizideki kayan nokta değerlerinin eşit olarak dağıtılması gerekmez (yani, dizi "1.f, 2.f, 3.f, 4.f, 100.f, 1200.f değerlerinden oluşabilir). , 1203.f, 1400.f ".
Bu işlemi yüz binlerce kez yapıyorum, ancak arama süresini geliştirecekse, kayan dizide herhangi bir miktarda ön işleme yapabilirim. Onları saklamak için vektörden başka bir şey kullanmayı kesinlikle değiştirebilirim, eğer yardımcı olursa.