আমার কাছে ছোট ছোট থেকে বড় হিসাবে সাজানো ভাসমানগুলির একটি অ্যারে রয়েছে এবং পাস করা ইনপুট মানের চেয়ে কম বা তার চেয়ে কম নিকটতম ফ্লোটটি বের করতে সক্ষম হতে হবে। এই ইনপুট মানটি অ্যারেতে একটি মান হিসাবে অগত্যা উপস্থিত হয় না।
অ্যারে মাধ্যমে একটি সরল রৈখিক অনুসন্ধান করা একটি নিখুঁত পন্থা হবে। এটি দেখতে এইরকম হতে পারে:
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 "।
আমি কয়েক হাজার বার এই অপারেশনটি করছি, তবে আমি এটির সময়কালের উন্নতি করতে পারলে ফ্লোটের অ্যারেতে প্রাক প্রসেসিংয়ের যে কোনও পরিমাণ কাজ করতে পারি। আমি ভেক্টর ব্যতীত অন্য কিছু সংরক্ষণের জন্য তাদের ব্যবহার করতে পরিবর্তন করতে পারি, যদি তা সহায়তা করে।