Computer >> Máy Tính >  >> Lập trình >> Lập trình

Sự cố Khóa &Khóa khi sử dụng Hash-map


Danh sách các ổ khóa khác nhau và một danh sách các khóa khác được cung cấp. Nhiệm vụ của chúng tôi là tìm sự khớp chính xác của ổ khóa và chìa khóa từ danh sách đã cho và gán chìa khóa đó với ổ khóa khi nó đúng.

Trong cách tiếp cận này, chúng tôi sẽ duyệt qua tất cả các ổ khóa và tạo một bản đồ băm, sau đó, mỗi khóa được tìm kiếm trong bản đồ băm. Khi khóa khớp với nhau, thì khóa đó được đánh dấu là khóa hợp lệ và được chỉ định bằng một ổ khóa.

Đầu vào và Đầu ra

Input:
The lists of locks and keys.
lock = { ),@,*,^,(,%, !,$,&,#}
key = { !, (, #, %, ), ^, &, *, $, @ }
Output:
After matching Locks and Keys:
Locks: ! ( # % ) ^ & * $ @
Keys: ! ( # % ) ^ & * $ @

Thuật toán

lockAndKeyProblem(lock, key, n)

Đầu vào: Danh sách ổ khóa, danh sách chìa khóa, n.

Đầu ra: Tìm chìa khóa dùng cho ổ khóa nào.

Begin
   define hashmap
   for i in range (0 to n-1), do
      hashmap[lock[i]] := i  //set hashmap for locks
   done

   for i in range (0 to n-1), do
      if key[i] is found in the hashmap, then
         lock[i] = key[i]
   done
End

Ví dụ

#include<iostream>
#include<map>
using namespace std;

void show(char array[], int n) {
   for(int i = 0; i<n; i++)
      cout << array[i] << " ";
}

void lockAndKeyProblem(char lock[], char key[], int n) {
   map<char, int> hashMap;
   for(int i = 0; i<n; i++)
      hashMap[lock[i]] = i;           //hash map for locks

   for(int i = 0; i<n; i++) //for each keys for each lock
      if(hashMap.find(key[i]) != hashMap.end()) {
         lock[i] = key[i];
      }
}

int main() {
   char lock[] = {')','@','*','^','(','%','!','$','&','#'};
   char key[] = {'!','(','#','%',')','^','&','*','$','@'};
   int n = 10;
   lockAndKeyProblem(lock, key, n);
   cout << "After matching Locks and Keys:"<<endl;
   cout << "Locks: "; show(lock, n); cout << endl;
   cout << "Keys: "; show(key, n); cout << endl;
}

Đầu ra

After matching Locks and Keys:
Locks: ! ( # % ) ^ & * $ @
Keys: ! ( # % ) ^ & * $ @