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 و اسلایدهای محمد سعید صفایی بهره‌برداری کنید.

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

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

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

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

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

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

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

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

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

مقدار داده‌ای که می‌تواند از یک کانال دیجیتال در یک زمان مشخص منتقل شود.

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

نوع داده‌ای است که مشابه با نوع داده float است، اما دقت بیشتری را برای ذخیره‌سازی اعداد اعشاری فراهم می‌کند.

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

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

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

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

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

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

عملیات ماشین یادگیری (MLOps) شامل توسعه و استقرار مدل‌های یادگیری ماشین به صورت مقیاس‌پذیر و کارآمد است.

Base به همان معنای Radix است که به تعداد ارقام مورد نیاز برای نوشتن عدد در سیستم‌های عددی مختلف اشاره دارد.

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

اضافه‌بارگذاری تابع به معنای تعریف چندین تابع با نام یکسان اما با پارامترهای مختلف است. این ویژگی به توابع این امکان را می‌دهد که با انواع مختلف ورودی کار کنند.

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

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

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

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

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

نسخه ششم پروتکل اینترنت که از آدرس‌های 128 بیتی برای افزایش ظرفیت آدرس‌دهی استفاده می‌کند.

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

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

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

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

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

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

مقداردهی اولیه آرایه به معنای اختصاص مقادیر اولیه به اعضای آرایه هنگام تعریف آن است.

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

مکانیزمی در زبان‌های برنامه‌نویسی مانند C++ که به شما اجازه می‌دهد تا به آدرس‌های حافظه اشاره کنید.

عبور پس از پیش به معنای بازدید از گره‌ها به ترتیب: ابتدا گره‌های زیرین، سپس گره ریشه.

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

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

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