الگوریتم جستجوی دودویی چگونه عمل میکند
خلاصه
1404/06/05
الگوریتم جستجوی دودویی (Binary Search) یک الگوریتم جستجوی کارآمد برای یافتن یک عنصر خاص در یک آرایه مرتب شده است. اساس کار این الگوریتم بر مبنای تقسیم و غلبه (Divide and Conque

الگوریتم جستجوی دودویی (Binary Search) یک الگوریتم جستجوی کارآمد برای یافتن یک عنصر خاص در یک آرایه مرتب شده است. اساس کار این الگوریتم بر مبنای تقسیم و غلبه (Divide and Conquer) است. در زیر توضیح میدهم که چگونه این الگوریتم کار میکند:
**شرط لازم:**
* آرایه باید **مرتب** باشد (صعودی یا نزولی).
**مراحل کار:**
1. **تعیین محدوده جستجو:** ابتدا، الگوریتم یک محدوده جستجو را تعریف میکند. این محدوده در ابتدا کل آرایه را در بر میگیرد.
* `low`: اندیس ابتدای محدوده (به طور معمول 0).
* `high`: اندیس انتهای محدوده (به طور معمول `length(array) - 1`).
2. **محاسبه اندیس میانی:** الگوریتم اندیس عنصر میانی محدوده جستجو را محاسبه میکند.
* `mid = (low + high) / 2` (یا `mid = low + (high - low) / 2` برای جلوگیری از سرریز شدن `int` در زبانهای خاص).
3. **مقایسه با عنصر میانی:** عنصر مورد جستجو (`target`) با عنصر موجود در اندیس میانی (`array[mid]`) مقایسه میشود. سه حالت ممکن است رخ دهد:
* **حالت 1: `target == array[mid]`**: عنصر مورد نظر پیدا شده است. الگوریتم اندیس `mid` را برمیگرداند.
* **حالت 2: `target < array[mid]`**: اگر عنصر مورد نظر کوچکتر از عنصر میانی باشد، میدانیم که اگر عنصر در آرایه وجود داشته باشد، باید در نیمه چپ محدوده جستجو قرار داشته باشد. پس محدوده جستجو به نیمه چپ محدود میشود.
* `high = mid - 1`
* **حالت 3: `target > array[mid]`**: اگر عنصر مورد نظر بزرگتر از عنصر میانی باشد، میدانیم که اگر عنصر در آرایه وجود داشته باشد، باید در نیمه راست محدوده جستجو قرار داشته باشد. پس محدوده جستجو به نیمه راست محدود میشود.
* `low = mid + 1`
4. **تکرار:** مراحل 2 و 3 تا زمانی که عنصر مورد نظر پیدا شود یا محدوده جستجو خالی شود (یعنی `low > high`) تکرار میشوند.
5. **عدم یافتن:** اگر محدوده جستجو خالی شود و عنصر مورد نظر پیدا نشود، الگوریتم یک مقدار خاص (مثلاً -1) را برمیگرداند تا نشان دهد که عنصر در آرایه وجود ندارد.
**مثال:**
فرض کنید آرایه مرتب شده زیر را داریم و میخواهیم عدد 23 را در آن پیدا کنیم:
`array = [2, 5, 8, 12, 16, 23, 38, 56, 72, 91]`
1. `low = 0`, `high = 9`
2. `mid = (0 + 9) / 2 = 4` -> `array[4] = 16`
3. `23 > 16` -> `low = 4 + 1 = 5`
4. `low = 5`, `high = 9`
5. `mid = (5 + 9) / 2 = 7` -> `array
برخی از محصولات شرکت مهندسی آبان رایان البرز
سایر مقالات آموزشی شرکت نرم افزاری آبان رایان البرز :
- نقش الگوریتمهای مرتبسازی در نرمافزار چیست
- درخت دودویی چه کاربردهایی دارد
- لیست پیوندی چیست و چه تفاوتی با آرایه دارد
- صف Queue در چه مسائلی کاربرد دارد
- ساختار پشته Stack چگونه کار میکند
- مفهوم ساختار داده در علم کامپیوتر چیست
- Lambda Function در زبانهای مدرن چیست
- نقش برنامهنویسی تابعی در طراحی نرمافزار چیست
- چه تفاوتی بین تابع بازگشتی و تابع معمولی وجود دارد
- چگونه میتوان از الگوی Singleton در برنامهها استفاده کرد
- پلیمورفیسم چیست و چه کاربردی دارد
- مفهوم وراثت در OOP چیست
- کلاس و شی در برنامهنویسی شیءگرا چه مفهومی دارند
- چه تفاوتی بین متغیرهای محلی و سراسری وجود دارد
- مفهوم JSON و کاربرد آن در انتقال داده چیست
- تفاوت بین REST و SOAP در طراحی API چیست