جستجوی دودویی در حالت 4 و 5 متغیر mid
یکی از روشهای جستجو در ساختمان داده جستجویدودویی یا binary search است. در این نوشته الگوریتم جستجویباینری را با 4 و 5 متغیر MID برای شما حل میکنیم.
پیشنهاد نویسنده: در ارتباط با الگوریتمهای مرتب سازی بخوانید.
جستجوی دودویی در حالت 4 و 5 متغیر mid
جستجوی باینری با 4 متغیر MID
شکل جستجوی دودویی با 4 متغیر MID به شکل زیر است:

مرتبه زمانی جستجوی دودویی با 4 متغیر MID به شکل زیر است:

جستجوی باینری با 5 متغیر MID
شکل جستجوی دودویی با 5 متغیر MID به شکل زیر است:

مرتبه زمانی جستجوی دودویی با 5 متغیر MID به شکل زیر است:
int bsfour(int arr[], int x, int low, int high)
{
if(low<=high)
{
int middle[5];
middle[1]=(low+high)/5;
middle[2]=middle[1]*2;
middle[3]=middle[1]*3;
middle[4]=middle[1]*4;
if(arr[middle[1]]==x)
return middle[1];
else if(arr[middle[2]]==x)
return middle[2];
else if(arr[middle[3]]==x)
return middle[3];
else if(arr[middle[4]]==x)
return middle[4];
else if(arr[middle[1]]>x)
return bsfour(arr, x, low, middle[1]-1);
else if(arr[middle[2]]>x)
return bsfour(arr, x, middle[1]+1, middle[1]-1);
else if(arr[middle[3]]>x)
return bsfour(arr, x, middle[2]+1, middle[3]-1);
else if(arr[middle[4]]>x)
return bsfour(arr, x, middle[3]+1, middle[4]-1);
else if(arr[middle[4]]<x)
return bsfour(arr, x, middle[4]+1, high);
}
return -1;
}

کد جستجوی دودویی با 5 متغیر MID به شکل زیر است:
int bsfive(int arr[], int x, int low, int high)
{
if(low<=high)
{
int middle[5];
middle[1]=(low+high)/6;
middle[2]=middle[1]*2;
middle[3]=middle[1]*3;
middle[4]=middle[1]*4;
middle[5]=middle[1]*5;
if(arr[middle[1]]==x)
return middle[1];
else if(arr[middle[2]]==x)
return middle[2];
else if(arr[middle[3]]==x)
return middle[3];
else if(arr[middle[4]]==x)
return middle[4];
else if(arr[middle[5]]==x)
return middle[5];
else if(arr[middle[1]]>x)
return bsfive(arr, x, low, middle[1]-1);
else if(arr[middle[2]]>x)
return bsfive(arr, x, middle[1]+1, middle[1]-1);
else if(arr[middle[3]]>x)
return bsfive(arr, x, middle[2]+1, middle[3]-1);
else if(arr[middle[4]]>x)
return bsfive(arr, x, middle[3]+1, middle[4]-1);
else if(arr[middle[5]]>x)
return bsfive(arr, x, middle[4]+1, middle[5]-1);
else if(arr[middle[5]]<x)
return bsfive(arr, x, middle[5]+1, high);
}
return -1;
}
نظرات خود را در ارتباط با این برنامه برای ما بنویسید.
برای امتیاز به این نوشته کلیک کنید!
[کل: 3 میانگین: 5]



















عمق بازگشت در بدترین حالت با ۴ و ۵ mid نسبت به باینری معمول چه تغییری میکنه؟
در حالت ۴ و ۵ متغیر mid، عمق بازگشت در بدترین حالت نسبت به جستجوی دودویی معمول کاهش مییابد، زیرا در هر مرحله بخش بیشتری از آرایه حذف میشود.
برای آرایههای دارای مقادیر تکراری، این روش اولین یا آخرین وقوع رو پیدا میکنه یا فقط یکی رو؟
از سوال خوب شما ممنونم. این الگوریتمها برای آرایههای مرتب شده طراحی شدهاند و در صورت وجود مقادیر تکراری، ممکن است هر کدام از وقوعهای مقدار مورد نظر را برگردانند، نه لزوماً اولین یا آخرین آن را.
اگر تعداد عناصر زوج یا فرد باشه، انتخاب بازههای بعدی چطور متعادل میمونه؟
سوال خوبی پرسیدید. در این پیادهسازی، با وجود تقسیمبندیهای مختلف، باز هم هر بار دامنه جستجو به طور قابل توجهی کاهش مییابد و مرتبه زمانی کلی الگوریتم همچنان لگاریتمی باقی میماند.
در آرایههای خیلی کوچک، این روش چندمیانی بهتره یا همون روش تک mid جواب بهتری میده؟
در آرایههای کوچک، تفاوت محسوسی بین این روشها وجود ندارد و هر دو به خوبی عمل میکنند.
این تقسیمبندی با ۴ و ۵ نقطه میانی چه مزیتی نسبت به باینری سرچ معمولی داره؟
این رویکردها در برخی سناریوها میتوانند منجر به کاهش تعداد مقایسهها در هر مرحله شوند، اما معمولاً پیچیدگی زمانی کلی الگوریتم را تغییر نمیدهند.
در نسخهٔ ۵-mid، چرا از وزنهای خطی (1x, 2x, 3x, 4x, 5x) استفاده شده و نه مرزبندی یکنواخت مبتنی بر طول بازه؟
سلام. در این پیادهسازی، برای سادگی و درک بهتر، از تقسیمبندی خطی استفاده شده است.
برای مقایسهٔ عملی، آیا بنچمارکی بین این روش و باینری سرچ کلاسیک روی آرایههای بزرگ انجام شده؟
بله، انجام بنچمارک برای مقایسه عملکرد این روش با جستجوی دودویی کلاسیک ایدهی خوبی است و میتواند برای ارزیابی عملی مفید باشد.
تشکر بابت این مقاله
موفق باشین
اگر آرایه نزولی باشد، با همین کد میتوان جستجو کرد یا باید شرطها و مرزها تغییر کنند؟
بله، برای آرایههای نزولی باید شرطهای مقایسه و بازههای جستجو در کدها تغییر کنند تا به درستی عمل کنند.
در حالت آرایه با دادههای تکراری، الگوریتم کدام اندیس از عناصر برابر با x را برمیگرداند؟
با سلام. الگوریتم ارائه شده، اولین اندیسی که مقدار x را پیدا کند برمیگرداند. در صورت وجود مقادیر تکراری، ممکن است اندیسهای دیگری هم وجود داشته باشند که برابر با x باشند.