연관 해시 믹싱


14

순전히 기능적인 설정에서 낮은 단독 링크 목록을 고려하십시오. 그 칭찬은 산 정상에서 부른 노래이며 계속 부를 것입니다. 여기에서 나는 많은 강점 중 하나를 다루고 그것이 나무를 기반으로 한 순전히 기능적 시퀀스의 광범위한 클래스로 어떻게 확장 될 수 있는지에 대한 질문을 다룰 것입니다.

문제는 다음과 같습니다. 강력한 해싱을 통해 O (1) 시간에서 거의 일정한 구조적 동등성을 테스트하려고합니다. 해시 함수가 구조적으로 재귀 적이면 (예 : 해시 (x : xs) = mix x (해시 xs)), 목록에 해시 값을 투명하게 캐시하고 요소가 기존 목록에 구성 될 때 O (1) 시간에 업데이트 할 수 있습니다. . 해시 목록에 대한 대부분의 알고리즘은 구조적으로 재귀 적이므로이 방법은 실제로 유용하게 사용할 수 있습니다.

그러나 단일 연결 목록 대신 O (log n) 시간에서 길이 O (n)의 두 시퀀스 연결을 지원하는 트리 기반 시퀀스가 ​​있다고 가정합니다. 여기서 해시 캐싱이 작동하려면 트리가 동일한 선형 시퀀스를 나타내는 자유도가 존중되도록 해시 믹싱 함수가 연관되어야합니다. 믹서는 서브 트리의 해시 값을 가져 와서 전체 트리의 해시 값을 계산해야합니다.

6 개월 전에이 문제를 조사하고 조사하는 데 하루를 보냈습니다. 자료 구조에 관한 문헌에는 관심이없는 것으로 보인다. 암호화에서 Tillich-Zemor 해싱 알고리즘을 발견했습니다. 비트 0과 1은 Galois 필드에 항목이있는 하위 대수의 두 생성기에 해당하는 2x2 행렬 곱셈 (연관 적)에 의존합니다.

제 질문은 무엇을 놓쳤습니까? 검색에서 찾지 못한 암호화 및 데이터 구조에 관한 문헌 모두에 관련 논문이 있어야합니다. 이 문제에 대한 의견과 탐험 가능한 장소는 대단히 감사하겠습니다.

편집 : 나는 스펙트럼의 부드럽고 끝이 강한 끝 에서이 질문에 관심이 있습니다. 더 부드러운면에서는 충돌을 피해야하지만 치명적이지는 않은 해시 테이블에 사용할 수 있습니다. 더 강한면에서는 평등 테스트에 사용할 수 있습니다.

답변:


2

추가 : Per의 의견을 읽은 후에이 답변은 Tillich-Zemor 해싱 알고리즘의 (가난한) 변형이라고 생각합니다.이 질문에는 이미 언급되어 있습니다. 나는이 답변을 철회하지만, 일부 독자들에게 그 정보 (및 의견)가 유익 할 수 있기를 희망합니다.


편집 :이 답변의 이전 개정판은 [ m ]에서 모노 이드 작업을 사용하도록 제안 했지만 주석에서 지적했듯이 그룹 작업을 사용하는 것이 바람직합니다.

이 답변은 구현하기 쉬운 해시 테이블에 대한 해시 함수를 작성하는 것입니다. 품질에 대한 확실한 보증은 기대되지 않습니다.

이미 유한 집합 [시퀀스의 각 요소에 대한 해시 함수를 가지고 있다고 가정 m ] = {1, ..., m }, 방법 [각 요소 해석에 대한 m 유한 그룹의 요소로서]를 G 및 사용 G에서 그룹 작업 ? [ m ]에서 G 로의 매핑을 사용할 수 있지만 각 요소의 해시 값에서 정보를 잃지 않도록 매핑을 주입하는 것이 바람직합니다. 또한 해시 함수가 시퀀스에서 요소 순서의 차이를 포착 할 수 있도록 그룹이 정식이 아닌 것이 바람직합니다.

나는 빠른 연산을 허용하는 유한 그룹에 대해 많이 알지 못하지만 그러한 그룹은 코딩 이론으로 알려져 있다고 생각합니다. 적어도 m 의 대칭 그룹을 사용하는 것은 그리 나쁘지 않을 수 있습니다.


1
예, Tillich-Zemor 해싱도 행렬 곱셈을 사용합니다. la Tillich-Zemor를 추가로 수정하지 않으면 제안 할 수 없습니다. 예를 들어, 단수 행렬을 피하거나 해시 통계를 망치면서 0으로 누적됩니다. Tillich-Zemor는 Galois 필드에서 작업합니다. 이전 버전의 알고리즘은 차선의 통계를 가진 다항식 생성을 사용했기 때문에 문제가 있었으므로 특정 Galois 필드가 매우 중요 할 수 있습니다.
— 당 Vognsen

@Per : 알겠습니다. 설명해 주셔서 감사합니다. 그렇다면 유한 그룹을 사용하는 것은 어떻습니까? 나는 이것에 대한 대답을 수정했다.
— Ito Tsuyoshi

나는 동의한다. 무한 그룹 그룹을 생성하는 가장 좋은 방법은 유한 필드에 대한 매트릭스 그룹을 사용하는 것입니다 (유한 단순 그룹의 분류 정리 참조).이 형식의 알고리즘은 Tillich-Zemor 유형 인 것 같습니다.
— 당 Vognsen

@Per : 나는 그룹 이론에 익숙하지 않으며,이 맥락에서 유한 필드를 넘는 행렬 그룹이 대칭 그룹보다 나은 이유를 알 수 없습니다. 좀 더 자세히 설명해 주시겠습니까?
— 이토 쓰요시

1
몇 가지 이유가 있습니다. 하나의 경우 큰 대칭 그룹에서 효율적으로 계산할 수 없으며 충돌 저항을 위해 그룹이 2 ^ 128 정도 여야합니다. 반대로, 특히 희소 생성기 다항식을 선택하는 경우 특성 2 유한 필드에 대한 행렬을 매우 효율적으로 계산할 수 있습니다. 그것은 단지 비트 조작의 무리입니다.
— 당 Vognsen

1

거의 보편적 인 해시 함수 제품군

{ha(x→)=∑aiximodp:a∈Zp}

여기에 좋은 속성이 있습니다 : ha(x→)+a|x→|ha(y→)=ha(x→∘y→)∘a|x→|O(1)Zp

이것은 연관적이고 꽤 빠릅니다. 충돌 확률x→≠y→O(min(|x→|,|y→|)/p)


1

한 가지 해결책은 Merkle 해싱을 사용하는 것입니다. 불변 / 영구 바이너리 트리 데이터 구조를 사용하십시오. 각 리프 노드에 해당 리프에 포함 된 데이터의 해시로 주석을 답니다. 두 개의 자식에 대한 해시 해시로 각 내부 노드에 주석을 답니다. 다시 말해nn′,n″y′,y″ny=H(y′,y″)HO(1)O(lg⁡n)

또 다른 방법은 정식 연관 해시를 사용하는 것입니다. 나무의 뿌리에 H(x1,…,xm)x1,…,xmm

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.