2010-03-03 3 views
4

다른 키가있는 해시 테이블을 사용해야 할 것입니다. 하나는 키의 문자열이고 다른 하나는 정수입니다.해시 테이블에 키 값을 정수 값으로 사용하는 것이 얼마나 바보입니까?

정수형의 경우, 키를 생성하기 위해 숫자에 해시 함수를 실행하는 것이 얼마나 어리 석 었습니까?

내 말은 해시 테이블의 키로 사용할 숫자가 항상 다를 것이고 중복 된 부분이 전혀 없을 것입니다. mod 연산자를 사용하여 해시 테이블 크기 아래의 값을 "잘라내는"것으로 충분하지 않습니까?

아니면 더 많은 것이 있습니까?

+1

어떤 플랫폼입니까? .그물? 자바? C++? –

+0

어쩌면 틀렸을 수도 있습니다. 그러나 숫자가 고유하다면 숫자 자체를 키로 사용하지 않으시겠습니까? –

+0

@Guido : 그렇습니다. Java가하는 것입니다. (다른 것을 말할 수는 없지만) 플랫폼에 대해 물어 보았습니다. –

답변

0

그것은 바보가 아니며 완벽하게 의미가 있습니다. 정수는 고유 한 이름 지정 체계에서 자연적인 시드입니다. 내가 이런 식으로 말하면 나에게 관계되는 광신자는 조금 죽는다. = D

1

내 의견으로는 그것은 어리 석다. 비교적 적은 수의 값을 가지는 경향이있는 경우에는 최상의 옵션이 아닐 수 있습니다 (이 경우 일반 배열을 사용하면 더 좋을 수 있습니다).

해시 크기에 정수를 해시하는 데 모듈러스 연산자를 사용합니다.

+0

배열은이 질문에 대한 일반적인 목적의 대답이 아니며, 사람들이 100과 100을 몇 개 가지고 있다면 어떻게 될까요? 5000과 같은 하나의 값 - 상당히 큰 구멍입니다. –

+0

@Hassan,이 경우에는 희소 배열을 사용할 수 있습니다. – Romain

+0

@ 하산, 그는 배열이이 질문에 대한 범용 적 대답 일 것이라고 결코 말하지 않았거나 암시하지 않았다. 한 가지 대답이 대부분 맞을 수도 있지만 "올바른"대답은 특정 조건에 달려 있다는 것을 인식하는 것이 중요합니다. – StriplingWarrior

0

정렬 된 배열을 사용하고 이진 검색을 수행하려면 정수의 경우는 어떨까요? 실제로 문자열과 같지만 문자열 해싱은 더 저렴할 수 있습니다.

+0

이진 검색은 O (로그 n)이고 해시 테이블 액세스는 O (1)로 상각됩니다. 네, 로그 n> 32 ... – kennytm

+0

키워드가 "amortized"라는 것은 거의 알 수 없습니다. 당신은 당신이 저장하고자하는 아이템의 수와 해쉬 함수를 사용할 계획 인 해시 테이블의 크기를 고려할 필요가 있습니다. 나는 쉽게 이진 검색을 선호하는데, O (log n)은 좋은 속도이기 때문이다. – Andrey

+0

O (n) 함수가 될 값의 추가/제거 여부와 빈도를 알고있을 때까지 정렬 된 배열을 사용하여 제안하는 것을 주저합니다. – StriplingWarrior

2

우리 분야의 많은 디자인 문제와 마찬가지로 대답은 "다릅니다." 정수에 대해 일반적인 해시 알고리즘을 실행하는 것은 어리석은 특수한 경우가 있습니다. 특정 상황에 기반하여 모듈이 예상 데이터를 균등하게 분배하고 성능이 매우 중요하며이 해시 테이블에 상당히 많이 액세스해야하는 경우 바보입니다. 이러한 조건을 제외하고 다양한 상황에서 잘 작동 할 수있는 제네릭 해시 알고리즘을 사용하는 데는 여러 가지 이유가 있습니다. 대다수의 경우, 달리 수행하는 것은 어리석은 일입니다. 경우에 따라서는 해시 테이블을 사용하는 것이 처음에는 어리석은 선택 일 수 있습니다.

저장하는 데이터의 유형, 저장 이유 및 성능이 얼마나 중요한지에 대한 정보를 Google에 알려 주면 사용하는 것보다 더 효과적인 솔루션을 제시 할 수 있습니다. 해시 테이블 Java 및 .NET과 같은 프레임 워크는 해시 기능이 빠르며 동일한 버킷에 해시 숫자가 발생하지 않도록합니다. 대부분의 경우 기본 해시 방법을 사용합니다.

+0

그건 내 질문이 아니에요 ... –

+0

당신의 만족에 대한 질문에 대답하지 못해 죄송합니다. 사람들이 충분한 배경 ​​정보를 제공하지 않고 매우 일반적인 질문을 할 때 분명하고 간단한 대답은 경우에 따라서는 실제로 실제로 올바르지 않습니다. 나는 이것을 지적하려고 노력했다. 동시에 대부분의 경우에 표준 해시 알고리즘을 사용하는 것은 어리석지 않다. 나는 단지 내가 실제로 당신의 질문에 대답하고 있음을 분명히하기에 충분하지 못했습니다. 바라기를 나의 새로운 개론 단락은 내 대답을 다소 명확히하는 데 도움이된다. – StriplingWarrior

관련 문제