Trộn băm kết hợp


14

Xem xét danh sách liên kết đơn lẻ trong một thiết lập chức năng hoàn toàn. Những lời ca ngợi của nó đã được hát từ đỉnh núi và sẽ tiếp tục được hát. Ở đây tôi sẽ giải quyết một trong số nhiều điểm mạnh của nó và câu hỏi làm thế nào nó có thể được mở rộng đến lớp rộng hơn của các chuỗi chức năng thuần túy dựa trên cây.

Vấn đề là như sau: Bạn muốn kiểm tra sự bằng nhau về cấu trúc gần như nhất định trong thời gian O (1) bằng cách băm mạnh. Nếu hàm băm được đệ quy theo cấu trúc, tức là hàm băm (x: xs) = mix x (hàm băm), thì bạn có thể lưu các giá trị băm trong suốt vào danh sách và cập nhật chúng trong thời gian O (1) khi một phần tử được đưa vào danh sách hiện có . Hầu hết các thuật toán cho danh sách băm là đệ quy có cấu trúc, vì vậy phương pháp này có thể sử dụng được trong thực tế.

Nhưng giả sử thay vì các danh sách liên kết đơn lẻ, bạn có các chuỗi dựa trên cây hỗ trợ nối hai chuỗi có độ dài O (n) trong thời gian O (log n). Để bộ đệm băm hoạt động ở đây, hàm trộn băm phải được kết hợp để tôn trọng mức độ tự do của một cây trong việc biểu diễn cùng một chuỗi tuyến tính. Bộ trộn nên lấy các giá trị băm của cây con và tính giá trị băm của toàn bộ cây.

Đây là nơi tôi đã ở cách đây sáu tháng khi tôi dành một ngày để nghiên cứu và nghiên cứu vấn đề này. Nó dường như đã không nhận được sự chú ý trong các tài liệu về cấu trúc dữ liệu. Tôi đã bắt gặp thuật toán băm Tillich-Zemor từ mật mã. Nó dựa vào phép nhân ma trận 2x2 (có liên quan) trong đó các bit 0 và 1 tương ứng với hai bộ tạo của một khối con với các mục trong trường Galois.

Câu hỏi của tôi là, tôi đã bỏ lỡ những gì? Phải có những tài liệu liên quan trong cả tài liệu về mật mã và cấu trúc dữ liệu mà tôi không thể tìm thấy trong tìm kiếm của mình. Bất kỳ ý kiến ​​về vấn đề này và địa điểm có thể để khám phá sẽ được đánh giá rất cao.

Chỉnh sửa: Tôi quan tâm đến câu hỏi này trên cả hai đầu mềm và mật mã mạnh của quang phổ. Về mặt mềm hơn, nó có thể được sử dụng cho các bảng băm nơi tránh va chạm nhưng không phải là thảm họa. Về mặt mạnh mẽ hơn, nó có thể được sử dụng để kiểm tra bình đẳng.

Câu trả lời:


2

Đã thêm : Sau khi đọc các bình luận của Per, tôi nghĩ rằng câu trả lời này chỉ là một biến thể (kém) của thuật toán băm Tillich-Zemor đã được đề cập trong câu hỏi. Tôi rút lại câu trả lời này, nhưng tôi để nó hy vọng rằng nó (và các ý kiến) có thể là thông tin cho một số độc giả.


Chỉnh sửa : Một bản sửa đổi trước đó của câu trả lời này đã đề xuất sử dụng thao tác đơn hình trên [ m ], nhưng như Per đã chỉ ra trong một nhận xét, nên sử dụng thao tác nhóm.

Câu trả lời này là về việc xây dựng hàm băm cho các bảng băm dễ thực hiện. Một sự đảm bảo có thể chứng minh về chất lượng không được mong đợi.

Giả sử rằng bạn đã có hàm băm cho từng phần tử của chuỗi thành tập hữu hạn [ m ] = {1, Khăn, m }, làm thế nào về việc diễn giải từng phần tử của [ m ] thành một phần tử trong nhóm hữu hạn G và sử dụng Hoạt động nhóm trên G ? Bạn có thể sử dụng bất kỳ ánh xạ nào từ [ m ] đến G , nhưng điều mong muốn là ánh xạ được tiêm để chúng ta không bị mất thông tin trong giá trị băm của từng thành phần. Điều mong muốn là nhóm không được giao hoán để hàm băm có thể bắt được sự khác biệt theo thứ tự của các phần tử trong một chuỗi.

Tôi không biết nhiều về các nhóm hữu hạn cho phép hoạt động nhanh, nhưng tôi đoán rằng các nhóm như vậy được biết đến trong lý thuyết mã hóa. Sử dụng nhóm đối xứng thứ tự ít nhất m có thể không quá tệ.


1
Vâng, băm Tillich-Zemor cũng sử dụng phép nhân ma trận. Những gì bạn đề xuất không thể hoạt động mà không sửa đổi thêm một la Tillich-Zemor. Ví dụ: bạn phải tránh các ma trận số ít hoặc bạn có được tích lũy ở mức 0, làm hỏng số liệu thống kê băm. Tillich-Zemor hoạt động trên một lĩnh vực Galois; một phiên bản trước đó của thuật toán của họ có vấn đề vì họ đã sử dụng một đa thức tạo có số liệu thống kê dưới mức tối ưu, vì vậy trường Galois cụ thể có thể rất quan trọng.
Per Vognsen

@Per: Tôi hiểu rồi. Cảm ơn bạn đã giải thích. Vậy thì còn việc sử dụng bất kỳ nhóm hữu hạn nào? Tôi đã sửa đổi câu trả lời cho điều này.
Tsuyoshi Ito

Tôi đồng ý. Cách tốt nhất để tạo các nhóm vô hạn của các nhóm là với các nhóm ma trận trên các trường hữu hạn (xem định lý phân loại cho các nhóm đơn giản hữu hạn), do đó, có vẻ như các thuật toán của dạng này sẽ thuộc loại Tillich-Zemor.
Per Vognsen

@Per: Tôi không quen thuộc với lý thuyết nhóm và tôi không thể hiểu tại sao các nhóm ma trận trên các trường hữu hạn lại tốt hơn các nhóm đối xứng trong bối cảnh này. Bạn có thể giải thích về nó?
Tsuyoshi Ito

1
Có một vài lý do. Đối với một, bạn không thể tính toán hiệu quả trong các nhóm đối xứng lớn và bạn cần các nhóm theo thứ tự 2 ^ 128 để chống va chạm. Ngược lại, bạn có thể tính toán với ma trận trên 2 trường hữu hạn đặc trưng rất hiệu quả, đặc biệt nếu bạn chọn một đa thức máy phát thưa thớt; nó chỉ là một loạt các thao tác bit.
Per Vognsen

1

Họ hàm băm gần như phổ quát

{ha(x)=aiximodp:aZp}

có một tài sản đẹp ở đây: , trong đó " " biểu thị phép nối. Nếu bạn lưu trữ bộ đệm ở gốc của mỗi cây cả giá trị băm của nó và , bạn có thể tính toán hàm băm của hai cây trong các hoạt động trên .ha(x)+a|x|ha(y)=ha(xy)a|x|O(1)Zp

Đây là cả kết hợp và khá nhanh. Xác suất va chạm của là . Xem CLRS hoặc Dietzfelbinger và cộng sự trong "Hàm băm đa thức là đáng tin cậy". O(phút(|x |,|y |)/p)xyO(min(|x|,|y|)/p)


1

Một giải pháp là sử dụng băm Merkle. Sử dụng cấu trúc dữ liệu cây nhị phân bất biến / liên tục. Chú thích từng nút lá với hàm băm của dữ liệu chứa trong lá đó. Chú thích từng nút nội bộ với hàm băm trên hai con của nó. Nói cách khác, nếu là một nút bên trong có con và chúng đã được chú thích với các giá trị băm , thì bạn nên chú thích nút nội bộ với giá trị băm , trong đó là hàm băm. Điều này chỉ thêm công việc bổ sung cho mỗi nút được tạo cho tất cả các hoạt động của cây. Chẳng hạn, bạn có thể hỗ trợ hợp nhất hai cây trong thời gian .n , n y , y n y = H ( y , y ) H O ( 1 ) O ( lg n )nn,ny,yny=H(y,y)HO(1)O(lgn)

Một cách tiếp cận khác là sử dụng hàm băm giao hoán. Dán nhãn gốc của cây bằng , trong đó đại diện cho các giá trị trên lá của cây. Sau đó, sử dụng một trong các cấu trúc hàm băm được đề xuất tại /crypto//q/114203531 để đảm bảo nó có thuộc tính kết hợp, giao hoán. Bây giờ được cung cấp hai cây, bạn có thể hợp nhất chúng và xây dựng giá trị băm trên thư mục gốc của chúng một cách hiệu quả.x 1 , Mạnh , x m mH(x1,,xm)x1,,xmm

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.