অ্যারে সার্চিং (Array Searching) কী?
একটি অ্যারেতে নির্দিষ্ট মান আছে কিনা তা যাচাই করা লিনিয়ার সার্চ (Linear Search) বা সিকোয়েনশিয়াল সার্চ বলা হয়। এটি সবচেয়ে সহজ সার্চিং অ্যালগরিদম যেখানে প্রতিটি এলিমেন্টকে একে একে চেক করা হয়।
ইনপুট ও আউটপুট উদাহরণ
ইনপুট:
Enter the number to be searched: 25 Enter the size of array : 5 Enter the elements of the array : 10 15 20 25 30
আউটপুট:
The array contains the given value
অ্যালগরিদম
- প্রোগ্রাম শুরু করুন
- প্রয়োজনীয় ভেরিয়েবল ঘোষণা করুন: my_input, i, array_size, my_check, my_array[]
- ব্যবহারকারী থেকে সার্চ করার মান, অ্যারে সাইজ এবং এলিমেন্টগুলো ইনপুট নিন
- ফর লুপ দিয়ে অ্যারেটা ইটারেট করুন
- প্রতিটি এলিমেন্টের সাথে my_input তুলনা করুন
- যদি মিল পাওয়া যায়, my_check = true করে ব্রেক করুন
- লুপ শেষে my_check চেক করে ফলাফল প্রিন্ট করুন
- প্রোগ্রাম শেষ করুন
উদাহরণ ১: ব্যবহারকারী ইনপুট নেওয়া
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int my_input, i, array_size;
boolean my_check = false;
System.out.println("Required packages have been imported");
Scanner my_scanner = new Scanner(System.in);
System.out.println("A reader object has been defined");
System.out.println("Enter the number to be searched");
my_input = my_scanner.nextInt();
System.out.print("Enter the value of array_size : ");
array_size = my_scanner.nextInt();
int my_array[] = new int[array_size];
System.out.println("Enter the elements of the array :");
for (i = 0; i < array_size; i++) {
my_array[i] = my_scanner.nextInt();
}
for (i = 0; i < array_size; i++) {
if (my_array[i] == my_input) {
my_check = true;
break;
}
}
if (my_check)
System.out.println("\nThe array contains the given value");
else
System.out.println("\nThe array does not contain the given value");
}
}
উদাহরণ ২: পূর্বনির্ধারিত অ্যারে ব্যবহার
public class Main {
public static void main(String[] args) {
int[] my_array = {15, 20, 25, 30, 35, 40};
int my_input = 25;
int array_size = 5; // শুধু প্রথম ৫টা এলিমেন্ট চেক করবে
boolean my_check = false;
System.out.println("The number is defined as " + my_input);
System.out.print("The elements in the integer array is defined as : ");
for (i = 0; i < array_size; i++) {
System.out.print(my_array[i] + " ");
}
for (int i = 0; i < array_size; i++) {
if (my_array[i] == my_input) {
my_check = true;
break;
}
}
if (my_check)
System.out.println("\nThe array contains the given value");
else
System.out.println("\nThe array does not contain the given value");
}
}
কোড ব্যাখ্যা
- লিনিয়ার সার্চ: O(n) টাইম কমপ্লেক্সিটি, O(1) স্পেস কমপ্লেক্সিটি
- break স্টেটমেন্ট: প্রথম ম্যাচ পাওয়ায় লুপ থেকে বের হয় (অপ্টিমাইজেশন)
- বুলিয়ান ফ্ল্যাগ: my_check ট্র্যাক করে যে মিল পাওয়া গেছে কিনা
Java বিল্ট-ইন মেথড ব্যবহার করে (আসান পদ্ধতি)
// Integer অ্যারের জন্য
int[] arr = {15, 20, 25, 30, 35};
int target = 25;
boolean found = false;
for (int num : arr) {
if (num == target) {
found = true;
break;
}
}
// Java 8 Stream API
boolean found = Arrays.stream(arr).anyMatch(x -> x == target);
// List.contains() (Integer wrapper class)
List list = Arrays.asList(15, 20, 25, 30, 35);
boolean found = list.contains(25);
বাইনারি সার্চ (যদি অ্যারে সর্টেড থাকে)
সর্টেড অ্যারেতে O(log n) টাইম কমপ্লেক্সিটিতে সার্চ করা যায়:
int index = Arrays.binarySearch(my_array, 0, array_size, my_input);
if (index >= 0) {
System.out.println("Found at index: " + index);
} else {
System.out.println("Not found");
}
তুলনামূলক বিশ্লেষণ
| পদ্ধতি | সময় জটিলতা | স্পেস জটিলতা | প্রয়োজনীয় শর্ত |
|---|---|---|---|
| লিনিয়ার সার্চ | O(n) | O(1) | কোনো শর্ত নেই |
| বাইনারি সার্চ | O(log n) | O(1) | অ্যারে সর্টেড থাকতে হবে |
| HashSet.contains() | O(1) average | O(n) | অতিরিক্ত মেমোরি |
সর্বোত্তম অনুশীলন (Best Practices)
- ছোট অ্যারের জন্য লিনিয়ার সার্চ যথেষ্ট
- বড় সর্টেড অ্যারের জন্য বাইনারি সার্চ
- বারবার সার্চ করতে হলে HashSet-এ কনভার্ট করুন
- Java 8+ এ Stream API ব্যবহার করুন পাঠযোগ্যতার জন্য