2009-06-03 1 views
2

내가 해시 테이블, 사전과 유사한 다른 데이터 구조에 대해 선가 대신의 int를 사용하는, 그들은 수레/복식을 사용하고 두 배로?해시 테이블/수레를 사용하는 사전은/</p> <p>누구나 그들이 무엇인지 알고있는 등,

+1

.Net에서이 질문은 유효하지 않습니다. 언어/devtools를 지정하면 거기에 대한 답변이있을 수 있습니다. –

+1

@ David B : 이것은 이론적 인 알고리즘 질문이라고 생각합니다. "정수가 아닌 다른 것을 해시 구조로 사용할 수 있습니까?" –

+0

그래, 일반적인 프로그래밍 질문입니다. –

답변

8

해시에서 float/double을 키로 사용한다는 것은 쉬운 일입니다. 예를 들어, .NET에서는 단지 Dictionary<double,MyValueType>을 사용합니다.

당신이 해시를 가지고 얘기하는 경우가

기술적 .... 대신 INT의 두 배를 기반으로, 당신은 당신의 내부 해시와 같은 요소를 가질 수있다. 일반적으로 이것은 int 또는 long을 사용하여 수행됩니다. 이러한 연산은 빠르며 해시 알고리즘은 계산하기 쉽습니다.

그러나 해시는 실제로 마음에있는 BitArray이므로 아무 것도 작동하지 않습니다. 잠재적으로 더 큰 해시 값 세트를 허용하는 것 이외의 int 또는 long 이외의 다른 것을 만드는 데별로 이점이 없습니다 (예 : 해시에 8 바이트 또는 그 이상의 유형을 사용하는 경우).

+0

좋은 답변입니다. 사실, 해시 테이블의 키는 비트 배열 이상이 아니며 'int'유형은이를 나타내는 가장 편리한 방법입니다. – Noldorin

+2

예 : 해시로 긴 것을 기술적으로 사용하면 double (64 비트 배열)을 사용하는 것과 같습니다. 좀 더 길게 원한다면, GUID (.NET의 십진수와 같음)와 같은 128 비트 유형으로 갈 수 있습니다. 하지만 수학은 부동 소수점 유형보다 정수 유형에서 더 빠릅니다. –

+0

감사 리드. 그래, 내가 해시 값의 더 큰 세트를 가지고 궁금했습니다. 따라서 .net 사전에서 double을 사용하면 여전히 int가 사용됩니다. –

0

귀하의 질문 기록에 .Net을 사용하고있는 것으로 나타 났으므로 그 맥락에서 대답하겠습니다.

당신은 그런 당신이는 키 또는 값에 대한 수레 또는 복식를 사용해야 지정 입력 시각 장애인 인 사전을 원하는 경우 System.Collections.Generic.Dictionary<T, U>http://msdn.microsoft.com/en-us/library/xfhwa508.aspx

를 사용할 수있는 입력 등을 인식하는 사전을 원하는 경우 당신은 키와 값에 대해 float과 double을 사용할 수 있습니다. System.Collections.HashTablehttp://msdn.microsoft.com/en-us/library/system.collections.hashtable.aspx

6

키를 의미합니까? 그게 까다 롭습니다.

임의의 키로 사용하는 경우 정수가 아닙니다.

부동 소수점 값을 계산하여 해시 테이블에서 그 값을 사용하면 매우 위험합니다. 부동 소수점 숫자는 무한 정밀도를 가지지 않으며 두 가지 약간 다른 방식으로 같은 것을 계산하면 결과에 매우 작은 차이가 발생할 수 있습니다. 해시 키는 매번 정확히 똑같은 작업을하는 데 의존하므로 항상 똑같은 방법으로 돌고 조심해야합니다. 그건 그렇고 소리가 나는 것보다 더 까다 롭습니다.

그래서 부동 소수점 해시로 무엇을 할 것입니까?

+0

감사합니다. m은 더 큰 해시 값 집합을 나타냅니다. 비록 내가 틀리지 않다면 실제로 그것을 사용하는 자료 구조를 본 기억이 있긴하지만. –

2

해시 알고리즘은 일반적으로 더 큰 입력에서 더 작은 출력을 생성하는 함수입니다. 좋은 해시 함수는 입력의 작은 변화에 대한 출력의 큰 변화와 같은 흥미로운 특성을 가지고 있으며 일부 입력에 대해 가능한 모든 출력 값을 생성한다는 보장을합니다.

정수 값이 아닌 부동 소수점 값을 출력하는 간단한 다항식 형식 해시 함수를 작성하는 것은 어렵지 않지만 결과 해시 함수가 원하는 값을 가지지 않도록하려면 어렵습니다. 사용 된 특정 부동 소수점 표현.

해시 함수가 정수 계산에서 거의 항상 구현되는 이유의 일부는 정수 계산에 대한 다양한 속성을 증명하는 것이 부동 소수점 계산에 대해 동일하게 수행하는 것보다 쉽기 때문입니다.

일부 요소 (소수 요소의 합)를 모듈로 (다른 소수)가 필연적으로 일부 입력에 대해 가능한 모든 출력을 생성해야한다는 것을 증명하는 것은 매우 쉽습니다.부동 소수점 분수로 계산할 때도 같은 결과를 얻는 것은 쉬운 일이 아닙니다.

부울없이 부동 소수점 값을 저장하고 전송하는 상대적인 어려움을 추가하면 가치가 없습니다.

관련 문제