خب در این پست میخوام استفاده از جستجو باینری که جزء مهمترین و بهترین الگوریتمهای سرچ هستش رو بهتون آموزش بدم. به این نوع سرچ، جستجوی دو دویی هم گفته میشود. جستجو باینری در جاوا بر روی Collection ها (مانند ArrayList) و آرایهها قابل پیاده سازی هستش و درون خود جاوا توابع آن وجود دارد.
در ابتدا از آرایهها استفاده میکنیم. کد زیر را در نظر بگیرید:
1 2 |
int arr[] = {10, 20, 15, 22, 35}; Arrays.sort(arr); |
یک آرایه تعریف کردیم و مقادیری در آن ریختیم. حال با دستور Arrays.binarySearch که ۲ ورودی میگیرد میتوانیم سرچ کنیم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
int arr[] = {10, 20, 15, 22, 35}; Arrays.sort(arr); int key = 22; int res = Arrays.binarySearch(arr, key); if (res >= 0) System.out.println(key + " found at index = " + res); else System.out.println(key + " Not found"); key = 40; res = Arrays.binarySearch(arr, key); if (res >= 0) System.out.println(key + " found at index = " + res); else System.out.println(key + " Not found"); |
این متد، ۲ مقدار میگیرد، یکی چیزی که میخوایم سرچ کنیم و یکی هم آرایهای که توش سرچ رو میخوایم انجام بدیم.
مدل دوم برای Collection ها هستش. کد زیر رو در نظر بگیرید:
1 2 3 4 5 6 |
List<Integer> al = new ArrayList<Integer>(); al.add(1); al.add(2); al.add(3); al.add(10); al.add(20); |
حال با دستور Collections.binarySearch که ۲ ورودی میگیره (مثل قبلی) توی Collecton جستجوی باینری انجام میدیم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
List<Integer> al = new ArrayList<Integer>(); al.add(1); al.add(2); al.add(3); al.add(10); al.add(20); int key = 10; int res = Collections.binarySearch(al, key); if (res >= 0) System.out.println(key + " found at index = " + res); else System.out.println(key + " Not found"); key = 15; res = Collections.binarySearch(al, key); if (res >= 0) System.out.println(key + " found at index = " + res); else System.out.println(key + " Not found"); |
هر دو متد، در صورتی که مقدار جستجو وجود داشتش، index یا شماره خانه اون مقدار رو برمیگردونن و در صورتی که وجود نداشت، مقدار -1 برگردونده خواهد شد.
این موضوع هم بگم که تقریبا به اواسط آموزش رایگان جاوا رسیدیم. امیدوارم خدا همتی بهم بده و هرچه سریعتر این آموزش رو شروع کنم. بعد این آموزش میخوام Spring، پایگاه داده MySQL، ساختمان داده رو با دید استفاده در جاوا بهتون آموزش بدم.


ارسال نظر