Saeid Safaei Loader Logo Saeid Safaei Loader Animated
لطفا شکیبا باشید
0

سعیدصفایی سعیدصفایی

سعید صفایی
آشنایی با مفهوم Binary Search

Binary Search

جستجوی دودویی یک الگوریتم جستجو است که داده‌های مرتب‌شده را به نصف تقسیم می‌کند و در هر مرحله تنها نیمی از داده‌ها را بررسی می‌کند.

Saeid Safaei Binary Search

جستجوی دودویی (Binary Search) یکی از الگوریتم‌های جستجوی مؤثر و کارآمد است که برای یافتن یک عنصر خاص در یک لیست مرتب‌شده استفاده می‌شود. الگوریتم جستجوی دودویی با مقایسه عنصر مورد نظر با عنصر میانه (middle) لیست، مسیری را پیدا می‌کند که به‌طور پیوسته بخش‌های غیرضروری از لیست را حذف می‌کند. این فرآیند تا زمانی که عنصر مورد نظر پیدا شود یا لیست به انتها برسد ادامه می‌یابد.

الگوریتم جستجوی دودویی به دلیل استفاده از تقسیم و غلبه، زمان اجرای بسیار سریع‌تری نسبت به جستجوی خطی دارد. زمان اجرای آن به صورت O(log n) است، در حالی که جستجوی خطی زمان اجرای O(n) دارد. این امر جستجوی دودویی را برای جستجو در مجموعه داده‌های بزرگ بسیار کارآمد می‌کند.

الگوریتم جستجوی دودویی تنها بر روی داده‌های مرتب‌شده (sorted data) کار می‌کند. اگر داده‌ها به ترتیب صعودی یا نزولی مرتب نشده باشند، باید ابتدا آن‌ها را مرتب کرد تا بتوان از جستجوی دودویی استفاده کرد.

در زبان‌های برنامه‌نویسی مختلف مانند Python، Java و C++، جستجوی دودویی معمولاً به شکل زیر پیاده‌سازی می‌شود. در اینجا یک مثال از پیاده‌سازی جستجوی دودویی در Python آورده شده است:

def binary_search(arr, target):
low = 0
high = len(arr) - 1
while low <= high:
mid = (low + high) // 2
if arr[mid] == target:

return mid
elif arr[mid] < target:

low = mid + 1
else:

high = mid - 1
return -1 # عنصر پیدا نشد

در این مثال، تابع binary_search دو ورودی دریافت می‌کند: یک آرایه مرتب‌شده و عنصر هدف که باید در آرایه جستجو شود. ابتدا مقادیر low و high تعیین می‌شوند که نشان‌دهنده ابتدای و انتهای آرایه هستند. سپس در هر مرحله از حلقه، عنصر میانه بررسی می‌شود و بسته به مقایسه آن با عنصر هدف، بخش‌هایی از آرایه نادیده گرفته می‌شود. اگر عنصر پیدا شود، اندیس آن بازگردانده می‌شود؛ در غیر این صورت، تابع -1 را باز می‌گرداند که نشان‌دهنده عدم وجود عنصر در آرایه است.

در زبان Java، جستجوی دودویی به صورت زیر پیاده‌سازی می‌شود:

public class BinarySearch {
public static int binarySearch(int[] arr, int target) {
int low = 0;
int high = arr.length - 1;

while (low <= high) {

int mid = (low + high) / 2;

if (arr[mid] == target) {


return mid;

} else if (arr[mid] < target) {


low = mid + 1;

} else {


high = mid - 1;

}
}

return -1; // عنصر پیدا نشد
} }

در اینجا نیز همانطور که در Python مشاهده می‌شود، تابع binarySearch آرایه مرتب‌شده و عنصر هدف را به عنوان ورودی دریافت کرده و الگوریتم جستجوی دودویی را اجرا می‌کند.

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

برای اطلاعات بیشتر، می‌توانید از سایت saeidsafaei.ir و اسلایدهای محمد سعید صفایی بهره‌برداری کنید.

اسلاید آموزشی

مقدمات برنامه نویسی

مقدمات برنامه نویسی
مبانی کامپیوتر و برنامه سازی

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

مقالات آموزشی برای آشنایی با اصطلاحات دنیای کامپیوتر

پردازش سیگنال دیجیتال (DSP) به استفاده از الگوریتم‌ها برای تجزیه و تحلیل و پردازش سیگنال‌های دیجیتال برای کاربردهای مختلف اطلاق می‌شود.

تعریف تابع شامل بدنه تابع است که در آن، منطق اجرای تابع تعیین می‌شود. در این مرحله، تابع به طور کامل معرفی می‌شود.

ارائه‌ سازمان‌دهی فرآیندهای رباتیک به استفاده از ربات‌ها برای هماهنگی و مدیریت فرآیندهای مختلف در محیط‌های تجاری اطلاق می‌شود.

سیستم‌های فیزیکی-مجازی (CPS) به سیستم‌هایی اطلاق می‌شود که با استفاده از دستگاه‌های دیجیتال برای نظارت و کنترل دنیای فیزیکی طراحی شده‌اند.

عملیات صف شامل عملیات‌های مختلفی مانند درج داده‌ها در انتهای صف و حذف داده‌ها از ابتدای صف است.

پیامی که توسط روترها در پروتکل‌های Link-State مانند OSPF و IS-IS برای تبادل اطلاعات وضعیت لینک‌ها استفاده می‌شود.

اتصالاتی با پهنای باند بالا که می‌توانند حجم زیادی از داده را به سرعت بالا منتقل کنند.

دستگاهی که برای متصل کردن چندین شبکه محلی LAN به یکدیگر استفاده می‌شود و در لایه داده‌لینک (Layer 2) عمل می‌کند.

سیستم‌های پرواز خودران به هواپیماها و وسایل پرنده اطلاق می‌شود که قادر به انجام عملیات پروازی به‌طور خودکار هستند.

تکنولوژی دفترکل توزیع‌شده (DLT) به فناوری‌های بلاکچین و سایر شبکه‌های غیرمتمرکز برای ذخیره‌سازی و مدیریت داده‌ها اشاره دارد.

نرخ بیت ثابت که در آن نرخ انتقال داده‌ها در طول ارتباط ثابت و بدون تغییر باقی می‌ماند.

استاندارد شبکه‌های بی‌سیم (Wi-Fi) که پروتکل‌های ارتباط بی‌سیم در باندهای مختلف فرکانسی را تعریف می‌کند.

نویز ناشی از میدان‌های الکترومغناطیسی که از تجهیزات الکتریکی و الکترونیکی ایجاد می‌شود.

هوش محیطی به استفاده از فناوری‌هایی گفته می‌شود که به محیط‌ها امکان درک و پاسخ به نیازهای کاربران خود را می‌دهند.

شبکه‌ای که به شما اجازه می‌دهد تا دستگاه‌های متصل به یک یا چند سوئیچ فیزیکی را به گروه‌های منطقی تقسیم کنید.

عملگر sizeof در C++ برای محاسبه اندازه (بر حسب بایت) یک داده، نوع داده یا متغیر در حافظه استفاده می‌شود.

لیست پیوندی دوطرفه یک نوع خاص از لیست پیوندی است که هر عنصر در آن به دو عنصر قبلی و بعدی خود اشاره دارد.

لایه‌ای که مسئول ترجمه، رمزنگاری و فشرده‌سازی داده‌ها برای استفاده در لایه کاربرد است.

یک پورت یا رابط که روتر برای اتصال به دیگر دستگاه‌ها یا شبکه‌ها از آن استفاده می‌کند.

کشف داده‌های افزوده به فرآیند تجزیه و تحلیل و استخراج الگوهای جدید از داده‌های موجود به کمک هوش مصنوعی گفته می‌شود.

عملگرهای مقایسه‌ای برای مقایسه دو مقدار و تعیین روابط آن‌ها مانند بزرگتر از، کوچکتر از، مساوی استفاده می‌شود.

معماری صفر-اعتماد به مدل امنیتی گفته می‌شود که در آن هیچ‌کسی در داخل یا خارج از شبکه بدون احراز هویت قابل اعتماد نیست.

آرایه مجموعه‌ای از داده‌ها است که به صورت یکپارچه ذخیره می‌شود و از اندیس‌ها برای دسترسی به مقادیر مختلف آن استفاده می‌شود.

دستگاه ساده در شبکه که داده‌ها را بدون توجه به آدرس مقصد به تمام دستگاه‌های متصل ارسال می‌کند.

الگوریتم مرتب‌سازی به فرآیند مرتب کردن عناصر یک آرایه یا لیست بر اساس ترتیب خاص گفته می‌شود.

یک ترابایت معادل 1024 گیگابایت است و برای اندازه‌گیری حجم‌های بسیار زیاد داده‌ها استفاده می‌شود.

فراخوانی به‌وسیله مقدار یعنی زمانی که هنگام فراخوانی یک تابع، مقدار متغیر به تابع ارسال می‌شود و تابع قادر به تغییر آن مقدار نخواهد بود.

اینترنت اشیاء (IoT) به شبکه‌ای از دستگاه‌ها و اشیاء متصل به اینترنت گفته می‌شود که می‌توانند داده‌ها را ارسال و دریافت کنند.

اتوماسیون هوشمند به استفاده از فناوری‌های AI برای خودکارسازی فرآیندها و انجام کارهای پیچیده اشاره دارد.

دوقلو دیجیتال به مدل‌سازی یک سیستم فیزیکی به صورت دیجیتال گفته می‌شود که به آن امکان مانیتورینگ و پیش‌بینی عملکرد در زمان واقعی را می‌دهد.

فرآیندی که در آن روترها مسیرهای بهترین برای ارسال بسته‌های داده به مقصد را تعیین می‌کنند.

ویژگی‌ای که مانع از ارسال اطلاعات مسیرهای یاد گرفته شده از همان رابط به شبکه‌های دیگر می‌شود.

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

روش‌های انتقال داده از یک دستگاه به دستگاه دیگر شامل Simplex، Half-Duplex و Full-Duplex.

مدیریت استثنا به فرآیند شناسایی و مدیریت خطاهای غیرمنتظره در حین اجرای برنامه گفته می‌شود. در C++ می‌توان از دستورات try, catch و throw برای مدیریت استثناها استفاده کرد.

بکشید مشاهده بستن پخش
Saeid Safaei Scroll Top
0%