문제

나는 (문자열로) Guid를 만들고 해시를 얻습니다. 이 해시가 독특하다고 생각할 수 있습니까?

도움이 되었습니까?

해결책

안내 자체만큼 안정적으로 독특하지는 않습니다.

확장하기 위해, 당신은 16 바이트에서 4 바이트의 조합으로 이동하여 독창성을 4 배 줄입니다.

주석에서 지적한 바와 같이 해시 크기는 차이를 만들 것입니다. 4 바이트는 기본 해시 크기가 4 바이트 (int) 인 .NET에서 사용될 수 있다는 가정, 내가 아는 끔찍한 가정이었습니다. 따라서 위에서 말한 것을 해시 크기로 바꿀 수 있습니다.

다른 팁

아니요.

미니 안내를 원한다면 여기를 참조하십시오. http://blogs.msdn.com/oldnewthing/archive/2008/06/27/8659071.aspx

한마디로, 아니요.

해시가 비둘기 구멍 원리에 의해 Guid보다 비트가 적다는 것을 가정 해 봅시다. 비둘기 구멍 원리에 의해, 만기보다 해시가 적기 때문에 단순히 일부 안내 -> 해시의 매핑이 하나 이상 있어야합니다.

해시가 Guid보다 더 많은 비트를 가지고 있다고 가정하면 좋은 해시 기능을 사용하고 있다고 가정 할 때 충돌이 매우 작지만 유한 한 것이 있습니다.

임의 크기의 데이터 블록을 고정 크기의 비트 수로 줄이는 해시 함수는이 둘 사이에 1 대 1 매핑이 생성됩니다. 해시에서 두 개의 다른 데이터 블록이 동일한 비트 시퀀스로 감소 될 가능성이 항상 있습니다.

좋은 해시 알고리즘은 이런 일이 발생할 가능성을 최소화하며 일반적으로 해시의 비트가 많을수록 충돌 가능성이 줄어 듭니다.

이것의 guranteed가 아닙니다 때문에 해시 충돌. 안내 자체는 거의 보장됩니다.

실용적인 이유로 해시가 독특하다고 가정 할 수 있지만 Guid 자체를 사용하지 않는 이유는 무엇입니까?

아니요, 그리고 나는 해시 가치의 독창성을 가정하지 않을 것입니다. 해시 값은 고유 할 필요가 없기 때문에 문제가되지 않으며 범위에 걸쳐 균등하게 배포하면됩니다. 분포가 많을수록 충돌이 적을수록 (해시 가능). 충돌이 적으면 해시 가능 성능이 향상됩니다.

참고로 해시 테이블의 작동 방식에 대한 좋은 설명은 허용 된 답변을 읽으십시오. 해시블과 해시 맵 및 일반적인 사용 사례는 무엇입니까?

암호화 해시 (MD5, SHA1, RIPEMD160)를 사용하는 경우 해시는 고유합니다 (매우 불가능한 모듈로 충돌-SHA1은 디지털 서명에 사용되며 MD5는 충돌 내성이 있습니다. 임의의 입력). 하지만 왜 안내를 해시하고 싶습니까?

I would like to hash a GUID to X size with the realization that sometimes I have 10 or less GUIDS in set so I might get away with a shorter hash without collision than if I have 10,000,000 GUID in a set. I would just like to be able to specify the size of the hash when I call the function.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top