Tìm hiểu về hash table

Bạn đang xem: Tìm hiểu về hash table Tại DongnaiArt

Cùng xem Tìm hiểu về hash table trên youtube.

Hash table là gì

Giới thiệu

Thuật toán liên quan đến hash table được ứng dụng ở hầu hết các ngôn ngữ, là một trong những nền tảng về thuật toán và cấu trúc dữ liệu.

Trong computing, hash table là một cấu trúc dữ liệu dùng để lưu theo các cặp key value, nó dùng hash function để tính toán tới một index, nơi lưu trữ một bucket các giá trị rồi từ đó sẽ retrieve ra value, mục tiêu là để độ phức tạp ở mức O(n)

Bạn đang xem: Hash table là gì

Giải thích:

Có thể lấy một ví dụ đơn giản là việc lấy sách ở thư viện, mỗi cuốn sách trong thư viện đều có môt unique number, những cuốn sách này sẽ sắp xếp trong cùng một địa chỉ (call number) toạ lạc bên trong thư viện, chúng ta sẽ dựa vào call number và unique number để tìm ra được cuốn sách đang cất ở đâu

Id của sách sẽ được sinh ra dựa trên một function gọi là hash function, Tìm hiểu về hash table

Hash function có thể được implement theo nhiều cách, cách cơ bản nhất dựa trên mã ascii của kí tự.

Ví dụ như dựa trên công thức

Xem thêm: Ý nghĩa màu sắc, ký hiệu của biển số xe?

Xem Thêm : Hướng dẫn Giải bài 67 68 69 trang 36 sgk Toán 9 tập 1

s.charAt(0) * 31n-1 + s.charAt(1) * 31n-2 + … + s.charAt(n-1)

Ở đây s là string cần chuyển, n là độ dài của nó, ví dụ:

“ABC” = ‘A’ * 312 + ‘B’ * 31 + ‘C’ = 65 * 312 + 66 * 31 + 67 = 64578

Giả sử chúng ta lưu một bảng string {“abcdef”, “bcdefa”, “cdefab” , “defabc” }. Mã ASCII a, b, c, d, e, và f là 97, 98, 99, 100, 101, 102 , như ta thấy các phần tử phía trên đều có cùng số kí tự và chỉ khác ở sự hoán vị. Thì index của phần tử đó sẽ bằng tổng (mã ascii của kí tự * vị trí của kí tự đó trong chuỗi)

Chúng ta sẽ dùng mã ASCII để sinh ra các đoạn hash code cho một phần tử, tổng tất các mã ascii có thể xác định được kí tự là 2069, nên chúng chia lại cho con số đó để tạo index

String Hash function Index abcdef (971 + 982 + 993 + 1004 + 1015 + 1026)%2069 38 bcdefa (981 + 992 + 1003 + 1014 + 1025 + 976)%2069 23 cdefab (991 + 1002 + 1013 + 1024 + 975 + 986)%2069 14 defabc (1001 + 1012 + 1023 + 974 + 985 + 996)%2069 11

Tìm hiểu về hash table

Giải quyết collision

Có thể bạn quan tâm: Liên hệ trách nhiệm bản thân trong việc xây dựng khối đại đoàn kết dân tộc

Xem Thêm : Tải Line 98 phiên bản cũ, màn hình rộng miễn phí về máy tính

Vấn phát sinh các trường hợp trùng vị trí (index) nếu thuật toán hash không được tốt và hâù như không có thuật toán hash nào thực sự hoàn hảo để sinh ra unique key nếu lưu trữ một lượng lớn dữ liệu , để giải quyết vấn đề này chúng ta dùng linked list để lưu trữ thêm một tầng nữa các phần tử cho index đó.

Có thể coi việc sinh hash là để tạo keyHash và lưu vào trong mảng giá trị nơi chứa một linked list có phần tử chứa key thật của chúng ta, sau khi tới đó chúng ta sẽ dùng key thật để retrieve giá trị

Tìm hiểu về hash table

Tìm hiểu về hash table

Đây là đoạn code mình thấy khá hay và dễ hiểu về implement hastable:

import LinkedList from ‘../linked-list/LinkedList’; // Hash table size directly affects on the number of collisions. // The bigger the hash table size the less collisions you’ll get. // For demonstrating purposes hash table size is small to show how collisions // are being handled. const defaultHashTableSize = 32; export default class HashTable { /** * @param {number} hashTableSize */ constructor(hashTableSize = defaultHashTableSize) { // Create hash table of certain size and fill each bucket with empty linked list. Dongnaiartets = Array(hashTableSize).fill(null).map(() => new LinkedList()); // Just to keep track of all actual keys in a fast way. Dongnaiart = {}; } /** * Converts key string to hash number. * * @param {string} key * @return {number} */ hash(key) { const hash = Dongnaiart(key).reduce( (hashAccumulator, keySymbol) => (hashAccumulator + DongnaiartCodeAt(0)), 0, ); // Reduce hash number so it would fit hash table size. return hash % Dongnaiartth; } /** * @param {string} key * @param {*} value */ set(key, value) { const keyHash = Dongnaiart(key); Dongnaiart[key] = keyHash; const bucketLinkedList = Dongnaiartets[keyHash]; const node = Dongnaiart({ callback: nodeValue => Dongnaiart === key }); if (!node) { // Insert new node. Dongnaiartnd({ key, value }); } else { // Update value of existing node. Dongnaiart = value; } } /** * @param {string} key * @return {*} */ delete(key) { const keyHash = Dongnaiart(key); delete Dongnaiart[key]; const bucketLinkedList = Dongnaiartets[keyHash]; const node = Dongnaiart({ callback: nodeValue => Dongnaiart === key }); if (node) { return Dongnaiartte(node.value); } return null; } /** * @param {string} key * @return {*} */ get(key) { const bucketLinkedList = Dongnaiartets[this.hash(key)]; const node = Dongnaiart({ callback: nodeValue => Dongnaiart === key }); return node ? Dongnaiart : undefined; } /** * @param {string} key * @return {boolean} */ has(key) { return Dongnaiart(this.keys, key); } /** * @return {string[]} */ getKeys() { return Dongnaiart(this.keys); } }

Hy vọng các bạn hiểu hơn về hash map , hash table, thứ mà dân DEV chúng ta hầu như xài cả ngày (hoho)

Có thể bạn quan tâm: Blog

Nguồn: https://dongnaiart.edu.vn
Danh mục: Tin tức

Lời kết: Trên đây là bài viết Tìm hiểu về hash table. Hy vọng với bài viết này bạn có thể giúp ích cho bạn trong cuộc sống, hãy cùng đọc và theo dõi những bài viết hay của chúng tôi hàng ngày trên website: Dongnaiart.edu.vn

Related Posts

Kèo châu Á – Tìm Hiểu Chi Tiết Về Một Hình Thức Cá Cược Phổ Biến

Kèo châu Á – Tìm Hiểu Chi Tiết Về Một Hình Thức Cá Cược Phổ Biến

Kèo châu Á là một trong những hình thức cá cược phổ biến nhất hiện nay, đặc biệt là trong lĩnh vực thể thao. Bài viết này Bet88 sẽ…

Nổ hũ hấp dẫn người chơi – Thế giới sắc màu của cơ hội và chiến thắng

Nổ hũ hấp dẫn người chơi – Thế giới sắc màu của cơ hội và chiến thắng

Nổ hũ hấp dẫn người chơi không chỉ là một trò chơi may rủi mà còn là một nghệ thuật. Với những âm thanh vui nhộn, hình…

Thế Giới Bắn Cá New88 – Trải Nghiệm Độc Đáo Từ Game Đến Thực Tế

Thế Giới Bắn Cá New88 – Trải Nghiệm Độc Đáo Từ Game Đến Thực Tế

Có thể bạn quan tâm Năm 2022 là năm con gì, mệnh gì? Sinh con năm 2022 giờ nào tốt? 666 Mẫu Tranh Tô Màu Ngày Tết…

Bắn Cá Phần Thưởng Cao – Trải Nghiệm Giải Trí Đỉnh Cao Cho Game Thủ

Bắn Cá Phần Thưởng Cao – Trải Nghiệm Giải Trí Đỉnh Cao Cho Game Thủ

Bắn cá phần thưởng cao đang trở thành một trò chơi phổ biến thu hút hàng triệu người chơi. Trò chơi không chỉ mang lại giây phút…

Xổ số QQ88 – Chơi ngay và nhận thưởng lớn!

Xổ số QQ88 – Chơi ngay và nhận thưởng lớn!

Xổ số QQ88 là một trong những hình thức giải trí được ưa chuộng nhất hiện nay, không chỉ bởi sự hấp dẫn từ việc trúng thưởng…

Xổ Số W88: Mô Hình Cược Mới Mẻ và Lợi Nhuận Khủng

Xổ Số W88: Mô Hình Cược Mới Mẻ và Lợi Nhuận Khủng

Xổ số W88 đã khiến cả cộng đồng game thủ và những người đam mê cá cược chao đảo với mô hình cược cực kỳ đa dạng và…