며칠 전에 여러 가지 데이터 구조를 구현하는 방법에 대해 읽었으며 해시 테이블을 가지고 특정 지점에 갇혀있었습니다.해시 테이블 구현
해시 테이블 구현 방법에 대한 내 이해 : 키 K는 해시 함수 H에 전달되어 해시 된 버전의 K, HK를 반환합니다. HK는 아마도 충돌을 설명하기 위해 적어도 uint32_t가되어야합니다. 우리는 크기 X의 배열을 가지고 있습니다.이 배열의 인덱스 HK에 항목이 저장되어 있습니다. 그러나 이것은 미리 할당 된 uint32_t atleast 배열을 필요로하지 않습니다. (또는 H의 반환 값이 무엇이든간에)? 데이터 배열 자체에 데이터 자체를 저장하지 않고 ptr을 데이터에 저장한다고 가정하면 길이가 uint32_t 인 ptr_t 배열이 필요합니다. 64 비트에서는 메모리 사용량이 매우 낭비되는 것 같습니다. : 2^32 * 8 = 34359738368 바이트 또는 ~ 32GB의 데이터에 대한 ptrs의 배열은 실제로 실제로 구현 된 방법이 아닙니다.
그래서 나는 무엇이 누락 되었습니까?
일반적인 구현은 배열이 아니라 링크 된 목록을 사용한다고 생각합니다. – inf
일반적인 구현은 링크 된 목록을 사용하는 것이 아니라 배열이라고 생각합니다. –
충돌에 대해서는 해시 테이블을 사용할 때 충돌이 발생합니다. 처리하지 말고 처리해야합니다. 적정한 해싱 및 크기로 최소화 할 수 있습니다. – stefaanv