문제

1000의 키 세트가 있다면 해시 테이블에 적합한 크기는 얼마이며 어떻게 결정됩니까?

도움이 되었습니까?

해결책

하중 계수에 따라 다릅니다 (테이블이 크기를 증가시키고 요소를 다시 분배 할 수있는 "백분율"포인트). 정확히 1000 개의 항목이 있다는 것을 알고 있으며 해당 숫자가 변경되지 않을 경우 최대 효율성을 위해 하중 계수를 1.0으로, 초기 크기를 1000으로 설정할 수 있습니다. 정확한 크기가 확실하지 않은 경우 부하 계수를 기본값 0.75로 남겨두고 초기 크기를 1334 (예상 크기/LF)로 설정할 수 있습니다. 진짜 추가 메모리 비용으로 좋은 성능.

다음 생성자를 사용하여로드 계수를 설정할 수 있습니다.

Hashtable(int initialCapacity, float loadFactor) 

다른 팁

해시 기능도 고려해야합니다.

한 가지 경험의 규칙은 테이블 크기를 약 2 배로 만들기 때문에 확장 할 공간이 있고 충돌 수를 작게 유지하기를 바랍니다.

또 다른 경험 법칙은 일종의 모듈로 관련 해싱을하고 있다고 가정 한 다음 테이블 크기를 다음 최대 소수까지 둥글게하고 그 소수를 모듈로 값으로 사용하는 것입니다.

당신은 어떤 종류의 일을 해시하고 있습니까? 자세한 내용은 더 나은 조언을 생성해야합니다.

문서에 이러한 요소에 대한 논의가 있습니다. Hashtable

성장하게 두자. 이 크기로 자동 처리는 괜찮습니다. 그 외에는 2 x size + 1은 간단한 공식입니다. 소수도 좋은 것이지만 데이터 세트가 특정 크기에 도달하자마자 해시 구현은 테이블을 다시 해치고 성장시키기로 결정할 수 있습니다.

당신의 열쇠는 효과를 주도하고 있으며 희망적으로 충분히 뚜렷합니다.

결론 : 크기 나 성능이 느린 문제가있을 때 크기에 대해 질문하십시오. 걱정하지 마십시오!

두 번 좋다.

당신은 큰 키 세트가 없습니다. 해시 가능한 구현에 대한 어려운 토론에 대해 신경 쓰지 말고 2000 년으로 이동하십시오.

나는 무엇을 반복하고 싶습니다 https://stackoverflow.com/users/33229/wwflickrcomphotosrene-germany 위에서 말했다. 1000은 나에게 큰 해시처럼 보이지 않습니다. 나는 성능 문제를 많이 보지 않고 Java에서 그 크기에 대한 많은 해시블을 사용해 왔습니다. 그리고 나는 크기 나 하중 계수에 대해 거의 멍청하지 않습니다.

코드에서 프로파일 러를 실행하고 해시 테이블이 문제라고 판단한 경우, 항상 조정을 시작하십시오. 그렇지 않으면, 나는 당신이 확신 할 때까지 당신이 문제가 있다고 가정하지 않을 것입니다.

결국, 대부분의 코드에서 성능 문제는 당신이 생각하는 곳이 아닙니다. 나는 예상하지 않으려 고 노력합니다.

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