연관 해시 믹싱


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:aZp}

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

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


1

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

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

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