2009-10-05 2 views
0

512 문자 파일 경로에 고유 한 값을 제공 할 수있는 공통 수식이 있습니까? 한 문자 당 32 비트 바이트 하나가 있다고 가정하고 이름에 사용되는 문자를 제한 할 수 있습니까?수식/패턴은 512 문자 파일 경로를 나타내는 고유 한 32 비트 int를 제공합니까?

난 당신이 혼자 대문자를 사용하는 경우 한 번에 할당 된 숫자 항상 같은 을되도록 조합이 어떤 라이브러리와 정체성 필드를 사용하는 방법에 대한 조잡한 32 비트 INT보다 더 많은,하지만이 될 것이라는 점을 알고있다 주어진 파일 경로? 그 아이디어입니다,하지만 거기에 몇 가지 표준 수식을 찾고, 아니면 적어도 누군가가 현실 세계에서 그것을 구현 성공했다.

현재 전 C#을 사용하고 있지만, 모든 언어가 예제로 사용되거나 웹 사이트에 연결됩니다.

감사합니다.

답변

2

String.GetHashCode()를 사용할 수 있습니다. 물론 고유하지는 않지만 두 개의 동일한 문자열은 동일한 해시 값을가집니다.

GetHashCode()를 사용할 때 해시 충돌을 찾는 예는 this link을 확인하십시오.

+0

충돌 해결이 우승자입니다! 합리적으로 고유 한 ID를 얻은 다음 충돌하지 않는지 확인하십시오. 좋은 대답. –

1

는 문자 당 1 비트를 사용하는 경우에도, 그 결과 일부의 경우 두 가지 경로가 동일한 값을 생성한다는 것을 의미 이상 32 인 512 비트 일 것이다. 데이터 집합이 "all 512 char path"이면 실제로 수행 할 수있는 모든 작업은 경로의 특정 하위 집합에서 충돌 가능성이 낮은 해시 함수를 찾는 것입니다.

0

32 비트 숫자로 512 바이트 문자열을 나타낼 수 있다면, 내가 말할 수있는 것은 '좋은 압축 방법'입니다.

0

당신이 int라고 알고 있지만 문자열을 사용할 수 있다면 md5를 사용할 수 있으며 경로마다 고유 한 값을 얻을 수 있습니다. 그 외에, 내가 생각할 수있는 유일한 것은 증분에 의해 각각에 대해 임의의 수를 할당하는 것입니다. 그건 당신에게 진짜 해시를 얻지 못할거야, 그냥 경로 ID를 만들 ...

0

그래서, 당신은 8 대신에 UInt32로 그 결과를 반환합니다 .NET CRC32 구현을 찾고 있어요. - 문자 열?

불행히도, 내가 본 모든 것들은 this one을 포함하여 바이트 배열을 반환합니다.