আমাদের ক্রম N x M এর একটি ম্যাট্রিক্স রয়েছে। এবং একটি পণ্য K। কাজ হল প্রদত্ত পণ্যের সাথে একটি জোড়া ম্যাট্রিক্সে উপস্থিত আছে কিনা তা পরীক্ষা করা।
ধরুন একটি ম্যাট্রিক্স নিচের মত -
1 | 2 | ৷3 | ৷4 | ৷
5 | 6 | ৷7 | ৷8 | ৷
9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 |
এখন যদি K 42 হয়, তাহলে (6, 7)
এর মত একটি জোড়া আছেএই সমস্যা সমাধানের জন্য, আমরা হ্যাশিং ব্যবহার করব। আমরা ম্যাট্রিক্সের সমস্ত উপাদান নিয়ে হ্যাশ টেবিল তৈরি করব। আমরা ম্যাট্রিক্স অতিক্রম করা শুরু করব, ট্র্যাভার্স করার সময়, ম্যাট্রিক্সের বর্তমান উপাদানটি প্রদত্ত পণ্য দ্বারা বিভাজ্য কিনা তা পরীক্ষা করে দেখুন, এবং যখন পণ্য K কে বর্তমান উপাদান দ্বারা ভাগ করা হবে, তখন লভ্যাংশটি হ্যাশ টেবিলে উপস্থিত হবে। তাই প্রয়োজনীয় শর্ত হল −
এর মত(k mod matrix[i, n]) মিথ্যা, এবং হ্যাশ টেবিলে আছে k/matrix[i, j]
যদি উপস্থিত থাকে, তাহলে সত্য ফেরত দিন, অন্যথায় হ্যাশ টেবিলে বর্তমান উপাদান সন্নিবেশ করুন৷
যদি কোন জোড়া পাওয়া না যায়, মিথ্যা ফেরত দিন।
উদাহরণ
#include <iostream> #include <unordered_set> #define N 4 #define M 4 using namespace std; bool isPairPresent(int matrix[N][M], int K) { unordered_set<int> s; for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { if ((K % matrix[i][j] == 0) && (s.find(K / matrix[i][j]) != s.end())) { return true; } else { s.insert(matrix[i][j]); } } } return false; } int main() { int matrix[N][M] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}}; int k = 42; if (isPairPresent(matrix, k) == false) cout << "NO PAIR EXIST"; else cout << "Pair is present"; }
আউটপুট
Pair is present