این آموزش جستجوی باینری را توضیح می دهد و & جستجوی باینری بازگشتی در جاوا همراه با الگوریتم، پیادهسازی و کد جستجوی باینری جاوا، مثالهایی:
جستجوی باینری در جاوا تکنیکی است که برای جستجوی یک مقدار یا کلید هدف در یک مجموعه استفاده میشود. این تکنیکی است که از تکنیک «تقسیم کن و حکومت کن» برای جستجوی کلید استفاده میکند.
مجموعهای که قرار است جستجوی باینری برای جستجوی کلید در آن اعمال شود، باید به ترتیب صعودی مرتب شوند.
معمولاً اکثر زبان های برنامه نویسی از تکنیک های جستجوی خطی، جستجوی باینری و هش پشتیبانی می کنند که برای جستجوی داده ها در مجموعه استفاده می شود. ما هش را در آموزش های بعدی خود خواهیم آموخت.
جستجوی باینری در جاوا
جستجوی خطی یک تکنیک اساسی است. در این تکنیک، آرایه به صورت متوالی پیمایش می شود و هر عنصر با کلید مقایسه می شود تا زمانی که کلید پیدا شود یا به انتهای آرایه برسد.
جستجوی خطی به ندرت در کاربردهای عملی استفاده می شود. جستجوی باینری متداول ترین تکنیک مورد استفاده است زیرا بسیار سریعتر از جستجوی خطی است.
جاوا سه راه برای انجام جستجوی باینری ارائه می دهد:
- استفاده از رویکرد تکراری
- استفاده از رویکرد بازگشتی
- استفاده از روش Arrays.binarySearch ().
در این آموزش، همه این موارد را پیاده سازی و مورد بحث قرار خواهیم داد. 3 روش.
الگوریتم جستجوی باینری در جاوا
در باینریدر روش جستجو، مجموعه مکرراً به نصف تقسیم می شود و عنصر کلید بسته به اینکه کلید کوچکتر یا بزرگتر از عنصر میانی مجموعه باشد، در نیمه چپ یا راست مجموعه جستجو می شود.
5>یک الگوریتم جستجوی باینری ساده به شرح زیر است:
- عنصر میانی مجموعه را محاسبه کنید.
- اقلام کلیدی را با عنصر میانی مقایسه کنید.
- 8>اگر کلید = عنصر میانی، آنگاه موقعیت نمایه میانی را برای کلید یافت شده برمی گردانیم.
- Else If key > عنصر mid، سپس کلید در نیمه سمت راست مجموعه قرار دارد. بنابراین مراحل 1 تا 3 را در نیمه پایینی (راست) مجموعه تکرار کنید.
- کلید Else عنصر mid، سپس کلید در نیمه بالایی مجموعه قرار دارد. بنابراین باید جستجوی باینری را در نیمه بالایی تکرار کنید.
همانطور که از مراحل بالا می بینید، در جستجوی باینری، نیمی از عناصر مجموعه درست پس از اولین مقایسه نادیده گرفته می شوند.
توجه داشته باشید که توالی مراحل یکسانی برای جستجوی باینری تکراری و بازگشتی برقرار است.
اجازه دهید الگوریتم جستجوی دودویی را با استفاده از یک مثال نشان دهیم.
برای مثال، آرایه مرتب شده زیر از 10 عنصر را در نظر بگیرید.
بیایید مکان وسط آرایه را محاسبه کنیم.
Mid = 0+9/2 = 4
#1) کلید = 21
ابتدا، مقدار کلید را با عنصر [mid] و متوجه می شویم که مقدار عنصر درmid = 21.
بنابراین ما آن کلید = [mid] را پیدا می کنیم. بنابراین کلید در موقعیت 4 آرایه پیدا می شود.
#2) کلید = 25
ابتدا کلید را با هم مقایسه می کنیم. ارزش تا وسط به عنوان (21 25)، ما مستقیماً کلید را در نیمه بالایی آرایه جستجو خواهیم کرد.
اکنون دوباره وسط نیمه بالایی را پیدا خواهیم کرد. آرایه.
Mid = 4+9/2 = 6
مقدار در مکان [mid] = 25
اکنون ما عنصر کلیدی را با عنصر میانی مقایسه کنید. بنابراین (25 == 25)، بنابراین ما کلید را در مکان [mid] = 6 پیدا کردهایم.
بنابراین ما مرتباً آرایه را تقسیم میکنیم و با مقایسه عنصر کلید با mid، تصمیم میگیریم که در کدام نیمه قرار بگیریم. کلید را جستجو کنید جستجوی باینری از نظر زمان و صحت کارآمدتر است و همچنین بسیار سریعتر است.
پیاده سازی جستجوی باینری جاوا
با استفاده از الگوریتم بالا، اجازه دهید یک برنامه جستجوی باینری را در جاوا با استفاده از رویکرد تکراری در این برنامه یک آرایه نمونه می گیریم و جستجوی باینری را روی این آرایه انجام می دهیم.
import java.util.*; class Main{ public static void main(String args[]){ int numArray[] = {5,10,15,20,25,30,35}; System.out.println("The input array: " + Arrays.toString(numArray)); //key to be searched int key = 20; System.out.println("\nKey to be searched=" + key); //set first to first index int first = 0; //set last to last elements in array int last=numArray.length-1; //calculate mid of the array int mid = (first + last)/2; //while first and last do not overlap while( first = last ){ //if the mid key, then key to be searched is in the first half of array if ( numArray[mid] last ){ System.out.println("Element is not found!"); } } }
خروجی:
آرایه ورودی: [5, 10, 15, 20 , 25, 30, 35]
کلید مورد جستجو=20
عنصر در فهرست یافت می شود: 3
برنامه فوق رویکرد تکراری جستجوی باینری را نشان می دهد. در ابتدا یک آرایه اعلان می شود، سپس کلیدی که باید جستجو شود تعریف می شود.
پس از محاسبه mid آرایه، کلید با عنصر mid مقایسه می شود. سپس بسته به اینکه آیاکلید کوچکتر یا بزرگتر از کلید است، کلید به ترتیب در نیمه پایین یا بالای آرایه جستجو می شود.
جستجوی باینری بازگشتی در جاوا
شما همچنین می توانید جستجوی باینری انجام دهید. با استفاده از تکنیک بازگشت در اینجا، روش جستجوی باینری به صورت بازگشتی فراخوانی می شود تا زمانی که کلید پیدا شود یا کل لیست تمام شود.
برنامه ای که یک جستجوی باینری بازگشتی را پیاده سازی می کند در زیر آورده شده است:
import java.util.*; class Main{ //recursive method for binary search public static int binary_Search(int intArray[], int low, int high, int key){ //if array is in order then perform binary search on the array if (high>=low){ //calculate mid int mid = low + (high - low)/2; //if key =intArray[mid] return mid if (intArray[mid] == key){ return mid; } //if intArray[mid] > key then key is in left half of array if (intArray[mid] > key){ return binary_Search(intArray, low, mid-1, key);//recursively search for key }else //key is in right half of the array { return binary_Search(intArray, mid+1, high, key);//recursively search for key } } return -1; } public static void main(String args[]){ //define array and key int intArray[] = {1,11,21,31,41,51,61,71,81,91}; System.out.println("Input List: " + Arrays.toString(intArray)); int key = 31; System.out.println("\nThe key to be searched:" + key); int high=intArray.length-1; //call binary search method int result = binary_Search(intArray,0,high,key); //print the result if (result == -1) System.out.println("\nKey not found in given list!"); else System.out.println("\nKey is found at location: "+result + " in the list"); } }
خروجی:
فهرست ورودی: [1، 11، 21، 31، 41، 51، 61، 71، 81، 91
کلید مورد جستجو :
کلید در مکان: 3 در لیست یافت می شود
با استفاده از روش Arrays.binarySearch () .
کلاس Arrays در جاوا یک متد 'binarySearch ()' ارائه می دهد که جستجوی باینری را در آرایه داده شده انجام می دهد. این روش آرایه و کلید مورد جستجو را به عنوان آرگومان می گیرد و موقعیت کلید را در آرایه برمی گرداند. اگر کلید پیدا نشد، متد -1 را برمی گرداند.
مثال زیر روش Arrays.binarySearch () را پیاده سازی می کند.
import java.util.Arrays; class Main{ public static void main(String args[]){ //define an array int intArray[] = {10,20,30,40,50,60,70,80,90}; System.out.println("The input Array : " + Arrays.toString(intArray)); //define the key to be searched int key = 50; System.out.println("\nThe key to be searched:" + key); //call binarySearch method on the given array with key to be searched int result = Arrays.binarySearch(intArray,key); //print the return result if (result 0) System.out.println("\nKey is not found in the array!"); else System.out.println("\nKey is found at index: "+result + " in the array."); } }
خروجی:
آرایه ورودی: [10، 20، 30، 40، 50، 60، 70، 80، 90]
کلیدی که باید جستجو شود:50
کلید در فهرست: 4 در آرایه یافت می شود.
سوالات متداول
Q #1) چگونه یک جستجوی باینری بنویسید ?
پاسخ: جستجوی باینری معمولاً با تقسیم آرایه به دو نیم انجام می شود. اگر کلید مورد جستجو بزرگتر از عنصر mid باشد،سپس نیمه بالایی آرایه با تقسیم بیشتر و جستجوی آرایه فرعی جستجو می شود تا کلید پیدا شود.
به طور مشابه، اگر کلید کمتر از عنصر mid باشد، کلید در پایین تر جستجو می شود. نیمی از آرایه.
Q #2) جستجوی باینری کجا استفاده می شود؟
پاسخ: جستجوی باینری عمدتاً برای جستجوی یک مورد استفاده می شود داده ها را در برنامه های نرم افزاری مرتب می کند، به ویژه زمانی که فضای حافظه فشرده و محدود است.
Q #3) O بزرگ جستجوی باینری چیست؟
پاسخ : پیچیدگی زمانی جستجوی باینری O (logn) است که n تعداد عناصر آرایه است. پیچیدگی فضای جستجوی باینری O (1) است.
Q #4) آیا جستجوی باینری بازگشتی است؟
پاسخ: بله. از آنجایی که جستجوی باینری نمونهای از استراتژی تفرقه کن و حکومت کن است و میتوان آن را با استفاده از بازگشت پیادهسازی کرد. ما میتوانیم آرایه را به دو نیم تقسیم کنیم و همان روش را برای انجام جستجوی باینری دوباره و دوباره فراخوانی کنیم.
Q #5) چرا به آن جستجوی باینری میگویند؟
پاسخ: الگوریتم جستجوی دودویی از یک استراتژی تقسیم و غلبه استفاده می کند که به طور مکرر آرایه را به نصف یا دو قسمت تقسیم می کند. بنابراین به عنوان جستجوی دودویی نامگذاری شده است.
نتیجه گیری
جستجوی باینری تکنیک جستجوی رایج در جاوا است. لازمه انجام جستجوی باینری این است که داده ها باید به ترتیب صعودی مرتب شوند.
جستجوی باینری می تواندبا استفاده از رویکرد تکراری یا بازگشتی اجرا می شود. کلاس آرایه ها در جاوا نیز متد 'binarySearch' را ارائه می دهد که جستجوی باینری را در یک آرایه انجام می دهد.
در آموزش های بعدی، تکنیک های مرتب سازی مختلف در جاوا را بررسی خواهیم کرد. 23