2012-03-31 8 views
3

숙제에서 BigInteger의 nextProbablePrime을 사용하여 2 차 탐색을 사용하는 해시 테이블의 크기를 조정할 수있는 다음 소수를 계산합니다.nextProbablePrime()의 정확도가 입력 값의 크기와 관련이 있습니까?

테이블에는 파일에서 읽은 데이터 항목이 저장됩니다. 내가받은 샘플 파일에는 100 개의 항목 만 포함되어 있지만 이것이 내 프로그램이 테스트 될 최대 데이터 세트라고 가정 할 수는 없습니다.

내가 nextProbablePrime에 전달하는 값의 크기와 올바르게 소수를 반환 할 가능성 사이에 관계가 있는지 궁금합니다. 즉, nextProbablePrime이 정확하다는 보장이있는 숫자가 있습니까? 나는 그것에 의지하는 것이 합리적입니까?

+0

요구 사항이 아닌 한, 나는 더 단순하게 유지할 것입니다. 간단한 진행을 사용하는 Hashtable 또는 2의 제곱을 사용하는 HashMap을 볼 수 있습니다. 로딩 요소를 줄이면 비 이상적이지만 합리적인 해시 함수를 만회 할 수 있습니다. –

+0

@PeterLawrey 슬프게도, 나는 내 자신의 클래스를 작성하고 HashMaps 등을 사용하지 못하도록 제한되어 있습니다.로드 요소에 대한 요점은 좋은 요소이므로 0.5로 줄였습니다. 감사합니다! –

+0

성능 테스트를 실행하여 데이터 세트의 최적 부하율을 찾을 수 있습니다. Hashtable이나 HashMap을 사용할 수는 없지만 코드 전체를 읽을 수는 있지만 아이디어를 줄 수도 있습니다. ;) –

답변

2

"이 방법으로 반환 된 숫자가 합성 인 확률은 2^-100을 초과하지 않습니다."나는 소수로 반환하는 것에 의존한다고 가정하는 것이 합리적이라고 생각합니다.

0

nextProbablePrime()은 실제로 "아마 소수"인 (실제로) 거대한 숫자를 찾아야하는 암호화 작업에 실제로 사용됩니다. nextProbablePrime() 메소드는 확률이 2^-100 인 소수를 리턴합니다.

나는 이러한 방법이 사용자의 필요에 도움이된다고 생각하지 않습니다. 합리적인 숫자 (해시 테이블 크기와 같은)의 경우, 특히 고성능이 필요한 경우 간단한 수작업 구현을 사용하여 숫자가 소수인지 쉽게 확인할 수 있습니다.

0

귀하의 목적에 맞습니다.

미리 계산 된 해시 테이블 크기 목록을 사용하는 것이 더 좋을 것입니다. 아마도 6 명 정도만 필요합니다. 예상되는 해시 테이블 크기를 기반으로 선택하고로드 요소가 너무 커지면 커집니다.

일반적인 교훈은 코드의 복잡성을 줄이기 위해 가능한 모든 방법을 이용하는 것입니다. 당신은 해시 테이블을 작성하고 있습니다. 당신은 소수에 대해 걱정할 필요가 없습니다.

관련 문제