hash table 에서 테이블 크기(size)
글쓴이: antz / 작성시간: 월, 2005/09/12 - 6:13오후
안녕하세요~ :-)
libghthash(
http://www.ipd.bth.se/ska/sim_home/libghthash.html)
를 사용해서 간단한 검색엔진을 만들고 있습니다.
중복을 체크 하기 위해서 사용하고 있는데요.
검색에 따라서 종종 10만건 이상의 결과도 나오기도 합니다.
(unique 검사 함목 : 12byte 문자)
초기화 테이블 크기를
p_table = ght_create(65536);
으로 했는데요.
1. 충돌 문제가 생기겠나요?
2. 테이블 크기를 설정할때 어떻게 하시나요?
예> 10만건의 검색, Unique 검사 - 12byte의 문자
3. 테이블 크기와 프로그램 실행 속도와는 어느정도
연관이 있을까요?
(메모리도 그렇고, 작게 잡아야 빠를것 같다는 생각에...)
전에 profile data로는 건수가 10만건 이상 되면,
hash insert 쪽이 시간을 많이 잡아먹는것 같았습니다.
4. 10만건에서 unique 체크를 하려면 hash table 말고
다른 방법이 없을까요? (12byte string 10만건)
감사합니다. :-)
Forums:
1. 충돌 가능성? 당연. 1:1 매핑 퍼펙트 해쉬가 아니면 당연히 충돌
1. 충돌 가능성? 당연. 1:1 매핑 퍼펙트 해쉬가 아니면 당연히 충돌이 발생가능하겠지요. 오픈해쉬나 기타 방법론이 필요.
2. 크기? 가능하다면 클수록 좋겠지요.
3. 크기 vs. 속도? 해쉬 테이블 문제라기보다는 운영체제 메모리 관리(swapping, page fault관리등)이 아닐까요? 해쉬의 장점은 contant 타임을 보장하는데 있습니다. 진부한 테크닉이지만, 해쉬테이블을 shared memory에 잡고 , shared memory를 swap불가로 세팅하면 테스트가 될듯합니다.
4. tree 인덱스를 사용하는것도 있겠지요. B-Tree 부터 그 변종들....... splay tree등도 고려될 수 있겠습니다. 좋은 알고리즘들이지만, btree는 split시에 좀 느려지겠지요?!
* 개인적으로는 해쉬를 선호한다는...
* 10만건이라고 하셨는데, 만일 10만건이 최대치라고 가정한다면 100만건정도 테스트해보시는게 좋겠습니다.
댓글 달기