เรามีเมทริกซ์ของลำดับ 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