Ngoài các chuỗi, bạn cũng có thể băm các tập hợp. Đó là, tập hợp các đối tượng không có thứ tự trên chúng. Nó được tính theo công thức sau:
hash(A) = \(\sum_{a \in A} p^{ord(a)}\) <- đếm mọi thứ theo modulo
trong đó ord là một hàm gán cho một đối tượng của tập hợp số thứ tự tuyệt đối của nó trong số tất cả các đối tượng có thể (ví dụ: nếu các đối tượng là số tự nhiên thì ord(x) = x và nếu là chữ cái Latinh viết thường thì ord(& #39;a') = 1, ord('b') = 2, v.v.)
Nghĩa là, đối với mỗi đối tượng, chúng tôi liên kết một giá trị bằng cơ sở với lũy thừa của số lượng đối tượng này và tổng hợp tất cả các giá trị này để có được hàm băm của toàn bộ tập hợp. Như rõ ràng từ công thức, hàm băm dễ dàng được tính toán lại nếu một phần tử được thêm vào hoặc xóa khỏi tập hợp (chỉ cần cộng hoặc trừ giá trị được yêu cầu). Cùng logic, nếu không phải các phần tử đơn lẻ được thêm hoặc bớt, mà là các tập hợp khác (chỉ cần cộng/trừ hàm băm của chúng).
Như bạn có thể hiểu, các phần tử đơn lẻ được coi là bộ kích thước 1, mà chúng ta có thể tính toán hàm băm. Và các tập hợp lớn hơn chỉ đơn giản là sự kết hợp của các tập hợp đơn lẻ như vậy, trong đó bằng cách kết hợp các tập hợp, chúng tôi thêm giá trị băm của chúng.
Thực ra, đây vẫn là hàm băm đa thức như cũ, nhưng trước hệ số tại pm , ta đã có giá trị của phần tử dãy dưới số n - m - 1 (với n là độ dài của dãy), và bây giờ đây là số phần tử trong tập hợp có số thứ tự tuyệt đối bằng m.
Trong quá trình băm như vậy, người ta phải lấy một cơ sở đủ lớn (lớn hơn kích thước đặt tối đa) hoặc sử dụng băm kép để tránh các tình huống trong đó một tập hợp các đối tượng p có số thứ tự tuyệt đối m có cùng hàm băm với một tập hợp có một đối tượng có số thứ tự tuyệt đối số thứ tự m+1.