Hôm nay mình học về hash table – một cấu trúc dữ liệu cực kỳ thú vị và quan trọng trong lập trình. Ban đầu nghe cái tên "bảng băm" có vẻ hơi khó hiểu, nhưng khi bắt đầu tìm hiểu thì mình mới thấy nó rất thông minh và hiệu quả.
Ý tưởng chính là dùng một hàm băm để chuyển key thành vị trí trong mảng, nhờ đó việc tìm kiếm hay thêm dữ liệu chỉ mất trung bình O(1) thời gian. Mình thấy bất ngờ vì thao tác nhanh hơn nhiều so với dùng mảng thông thường hay map có thứ tự.
Mình cũng được học về collision – tình huống hai key khác nhau cùng có chỉ số băm giống nhau, và cách giải quyết như dùng chaining hay open addressing. Ban đầu hơi rối nhưng đọc ví dụ rồi thì cũng dần hiểu ra.
Cuối cùng, mình thử áp dụng vào unordered_map trong C++ và thấy rất tiện. Chỉ vài dòng code là có thể tra cứu giá trị cực nhanh, như kiểu một phiên bản nâng cấp của từ điển.
Dù mới chỉ là những kiến thức cơ bản nhưng hôm nay mình thấy rất vui vì đã hiểu thêm một công cụ cực kỳ hữu ích. Mình đã áp dụng nó để làm bài "tần suất xuất hiện các từ","lời chúc tết",.. Thanks các bạn đã ghé trang. ^v^
Bình luận