2017-01-09 1 views
0

나는 종종 파일 경로를 사용하여 일부 소프트웨어 시스템에 고유 한 ID를 제공합니다. 파일 경로를 취하여 상대적으로 빠른 (계산적으로) 고유 한 정수로 변환 할 수있는 방법이 있습니까?고유 한 파일 경로를 고유 한 정수로 바꿈

큰 정수는 괜찮습니다. 이것은 내가 알 수있는 한 꽤 멋진 알고리즘이어야하지만 어떤 경우에는 매우 유용 할 것입니다.

그런 것이 있으면 누구나 알 수 있습니까?

+0

아마도 내 질문에 대한 답변 : http://stackoverflow.com/questions/12238228/how-do-i-convert-a-directory-path-to-a-unique-numerical-identifier-linux-c –

+0

만약 메모리에서 실행하면 해당 언어로 표준 해시 맵 중 하나를 사용할 수 있습니다. 파일 이름뿐 아니라 비슷한 상황에서도 마찬가지입니다. –

+0

당신은 몇 가지 고유 한 정수로 파일 이름을 해쉬 뜻? –

답변

1

당신은 아이 노드 번호를 시도해 볼 수도 있습니다 :

프로그램이 하나의 시스템에서 실행되며, 사용자가의 ID를 복제하여 새 파일에 대해 상관하지 않는 경우 inode 번호의 djones의 제안이 좋은 @
fs.statSync(filename).ino 
1

오래된, 삭제 된 것. 아이 노드 번호가 다시 사용됩니다.

또 다른 간단한 접근법은 큰 정수 공간에 대한 경로 해싱입니다. 예 : 128 비트 murmurhash (Java에서는 Guava Hashing 클래스를 사용하고 여러 개의 js 포트가 있음)를 사용하면 수십억 개 경로 간의 충돌 가능성이 여전히 1/2^96입니다. 실제로 편집증이라면 이미 사용한 해시 값 세트를 유지하고 충돌시 다시 해쉬하십시오.

1

이것은 답변에 관한 내 의견입니다. 메모리에서 실행할 경우 해당 언어로 표준 해시 맵 중 하나를 사용할 수 있습니다. 파일 이름뿐 아니라 비슷한 상황에서도 마찬가지입니다. 일반적으로 다른 프로그래밍 언어의 해시 맵은 버킷에 의한 충돌을 만족하므로 해시 수와 해당 버킷 수는 고유 한 ID를 제공합니다.

Btw, 기본 구조 (예 : 숫자 등 검색)를 제어 할 수 있도록 자신의 해시 맵을 작성하는 것은 어렵지 않습니다.

+0

내 경우에는 여러 프로세스 (모두 동일한 공유 메모리가 아님)가있을 수 있습니다. 이 오른쪽으로 더 힘들어. –

+0

예, 아마도 쉽지는 않을 것입니다. 그러나이를 극복하기 위해이 해시 맵을 유지 관리하는 서비스를 작성할 수 있습니다. 일반적으로 괜찮은 프로그래밍 언어는 동시성을 지원합니다. 따라서 다른 모든 응용 프로그램에서 해당 서비스를 호출하여 고유 번호를 부여 할 수 있습니다. 때로는 미드 나이트 (midnight)와 같은 특정 번호를 해당 서비스가 데이터베이스 또는 파일에 자동으로 저장할 수 있습니다. 이렇게하면 정보를 잃지 않습니다. –

관련 문제