آرین سلیمان‌زاده
  • خانه
  • وبلاگ
  • پادکست‌ها
  • ویدیوها
  • کتابخانه
  • تماس با من
العربيةArabic
DeutschGerman
EnglishEnglish
فارسیPersian
한국어Korean
中文Chinese
پنل•تماس سریع

Languages

Choose your interface locale

ar

العربية

Arabic

de

Deutsch

German

en

English

English

fa

فارسی

Persian

ko

한국어

Korean

zh

中文

Chinese

درخواست همکاری یا مشاوره

پیام خود را درباره همکاری، مشاوره، توسعه محصول یا پروژه نرم‌افزاری ارسال کنید.

LinkedInپاسخ سریع
کتابخانه الگوریتم ←/جست‌وجو/جست‌وجوی دودویی
یادداشت کامل الگوریتم

جست‌وجوی دودویی

Binary Search

Binary Search در یک فضای مرتب‌شده با هر مقایسه نصف محدوده باقی‌مانده را حذف می‌کند تا به target برسد.

نوعالگوریتمدستهجست‌وجوسطحپایهپیچیدگی معمولO(log n)
جواب کوتاه و حرفه‌ای

اول این مفهوم را در ذهن نگه دار

Binary Search در یک فضای مرتب‌شده با هر مقایسه نصف محدوده باقی‌مانده را حذف می‌کند تا به target برسد.

01
توضیح ساده

چطور کار می‌کند؟ ساده و مرحله‌ای

01

target را با عنصر وسط مقایسه می‌کنیم.

02

اگر target کوچک‌تر بود نیمه راست و اگر بزرگ‌تر بود نیمه چپ را کنار می‌گذاریم.

02
روند اجرا

الگوریتم را به شکل تصمیم‌های پشت سر هم بخوان

01

left و right را مشخص کن.

02

mid را داخل همین بازه حساب کن.

03

بعد از هر مقایسه دقیقاً یکی از مرزها را جلو ببر تا مقدار پیدا شود یا left از right عبور کند.

یک مثال کوچک برای فهم بهتر

برای پیدا کردن 23 در [3, 8, 12, 23, 31, 44] ابتدا وسط بررسی می‌شود و بعد فقط نیمه‌ای می‌ماند که 23 هنوز می‌تواند داخل آن باشد.

پیاده‌سازی خوانا با JavaScriptJavaScript
function binarySearch(items, target) {
  let left = 0;
  let right = items.length - 1;

  while (left <= right) {
    const mid = left + Math.floor((right - left) / 2);
    if (items[mid] === target) return mid;
    if (items[mid] < target) left = mid + 1;
    else right = mid - 1;
  }
  return -1;
}
این کد را چطور بخوانی؟

syntax را حفظ نکن. stateای را که در هر خط تغییر می‌کند دنبال کن و آن را به invariant توضیح‌داده‌شده در بالا وصل کن.

پیچیدگی

O(log n)

این Complexity را حفظی نگو. اول مشخص کن مربوط به کدام عملیات یا بعد ورودی است؛ بعد هزینه را از روی loopها، عمق recursion، عملیات ساختمان داده و فرض‌های preprocessing نتیجه بگیر.

03
چه زمانی استفاده کنیم؟

موارد مناسب

  • الگوریتم را با structure و وضعیت preprocessing داده هماهنگ انتخاب کن.
04
اشتباهات رایج

کجا معمولاً اشتباه می‌کنیم؟

  • استفاده روی داده نامرتب.
  • خطاهای off-by-one و loop بی‌نهایت.
  • مشخص نکردن inclusive بودن مرزها.
در مصاحبه چطور توضیح بدهیم؟

مدل یک پاسخ حرفه‌ای

در جواب حرفه‌ای invariant را بگو: اگر target وجود داشته باشد، داخل بازه فعلی است. هر مقایسه بازه را نصف می‌کند ولی این invariant را حفظ می‌کند.

مسئله→ایده اصلی→Invariant / State→Big-O→Trade-off
چند سؤال مصاحبه‌ای سریع

جست‌وجوی دودویی چه مسئله‌ای را حل می‌کند؟

Binary Search در یک فضای مرتب‌شده با هر مقایسه نصف محدوده باقی‌مانده را حذف می‌کند تا به target برسد.

درباره Complexity چه چیزی باید بگویم؟

پیچیدگی معمول اینجا O(log n) است، اما جواب کامل باید این هزینه را به representation، constraint ورودی و عملیات غالب وصل کند.

رایج‌ترین اشتباه چیست؟

استفاده روی داده نامرتب.

موضوعات مرتبط برای ادامه مطالعهArray مرتبLower/Upper BoundBinary Search روی جواب
منبع و مطالعه بیشتر

این درس برای مطالعه آرام و آمادگی مصاحبه به‌صورت مستقل نوشته شده و فهرست موضوعات آن از trekhleb/javascript-algorithms الهام گرفته است. مخزن اصلی implementationها، testها و README تخصصی هر موضوع را دارد.

باز کردن مخزن اصلی ↗
آرین سلیمان‌زاده

پورتفولیوی شخصی با تمرکز بر Agentic CRM، سامانه‌های هوشمند کسب‌وکار، مهندسی مدرن وب، طراحی سیستم‌های رابط کاربری و توسعه محصولات نرم‌افزاری کاربردی.

لینک‌های سریع

  • درباره من
  • وبلاگ
  • کتابخانه
  • تماس

ارتباط

  • soleimanzadeh.a.work@gmail.com
  • soleimanzadeh.uni@gmail.com

در دسترس: روزهای کاری

معمولاً پاسخ در ۲۴ ساعت

خبرنامه

به‌روزرسانی‌های مربوط به نوشته‌ها، پروژه‌ها و انتشارهای جدید را دریافت کنید.

© 2026 ariansoleimanzadeh.dev — تمامی حقوق محفوظ است.

لینکدین