Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

C++: Tìm chỉ số va chạm hash (hash collision)

Bài toán: Bảng hash p bucket (0..p-1). Hash function h(k) = k % p. Chèn lần lượt X[i]. Bucket chỉ chứa 1 phần tử. Trả về chỉ số i đầu tiên gây va chạm, hoặc -1.

Code C++

#include <bits/stdc++.h>
using namespace std;

int solve(int p, vector<int> X) {
    vector<int> bucket(p, 0);
    for (int i = 0; i < (int)X.size(); i++) {
        int idx = X[i] % p;
        if (bucket[idx]) return i; // va cham
        bucket[idx] = 1;
    }
    return -1;
}

int main() {
    int p = 10;
    vector<int> X = {0, 21, 53, 41, 53};
    cout << solve(p, X) << endl; // 3 (X[3]=41, 41%10=1, bucket[1] đã có 21)
    return 0;
}

Kết quả

3