Tôi đang làm việc trên một dự án điện tử với một vi điều khiển được lập trình trong C.thuật toán Hash trong C để lập bản đồ 16 byte-giá trị đến 2 byte-giá trị
tôi cần phải lưu trữ một số ID và thông tin liên quan của nó trong bộ nhớ flash (SD). Các ID này dài 16 byte nên có 2^128 giá trị có thể. Mặc dù chúng là 16 byte, chỉ có 50000 (giá trị duy nhất) sẽ được sử dụng. Đó là thể chất không thể lưu trữ tất cả các ID có thể (2^128) trong một SD.
Tôi chỉ có thể lưu trữ 50000 giá trị đã sử dụng nhưng sau đó tôi sẽ phải duyệt qua tất cả (tồi tệ nhất) của chúng để tìm giá trị tôi cần. Bên cạnh đó, nó sẽ phải được tính toán một so sánh giá trị 16-byte cho mỗi người trong số họ mà làm cho nó được khá chậm.
Vì vậy, tôi nghĩ rằng tôi sẽ cần một số loại (băm?) Chức năng bản đồ 2^128 giá trị đến 50000 (bản đồ 16 byte đến 2 byte). Rõ ràng là một số giá trị ban đầu sẽ ánh xạ tới cùng một giá trị/chỉ mục. Ý tưởng là khi tôi nhận được một ID, tôi áp dụng một hàm băm mang lại cho tôi một chỉ số từ 0 đến ~ 50000 (0-65535). Với chỉ mục đó, tôi có thể truy cập trực tiếp (các) sector SD trong đó ID và thông tin liên quan của nó được lưu trữ. Như tôi đã chỉ ra, chỉ mục đó sẽ chỉ đến vị trí bộ nhớ trong đó các ID khác nhau sẽ cùng tồn tại do một số ID khác nhau được ánh xạ tới cùng một giá trị chỉ mục. Tôi sẽ phải tìm ID chính xác nhưng nó sẽ có giá chỉ là một vài so sánh thay vì 50000 bản gốc.
Bất kỳ ý tưởng/ý kiến nào sẽ thực sự được đánh giá cao.
Xin cảm ơn trước.
Bạn đang phát minh lại khái niệm "bảng băm" - google. – user4815162342
Chỉ cần thêm tất cả các byte? –
băm các phím có tổng kiểm tra 16 bit hoặc băm. Ảnh đầu tiên của tôi sẽ là CRC16. –