자료 구조와 알고리즘
원소 수가 많고 적재율을 0.5 정도로 유지한 해시 테이블에서, 선형 탐사의 개방 주소법이 체이닝(연결 리스트로 잇는 방법)보다 빨라지기 쉬운 이유로 가장 적절한 것은?
- A충돌했을 때 조사하는 다음 위치가 이웃 원소이므로, 같은 캐시 라인이나 바로 다음 라인에 실려 있는 경우가 많아 메모리 접근이 적게 들기 때문
- B개방 주소법에서는 충돌이 전혀 일어나지 않기 때문
- C체이닝에서는 해시 함수를 2회 이상 계산해야 하기 때문
정답과 해설 보기
정답: A. 충돌했을 때 조사하는 다음 위치가 이웃 원소이므로, 같은 캐시 라인이나 바로 다음 라인에 실려 있는 경우가 많아 메모리 접근이 적게 들기 때문
현재의 CPU에서는 캐시 미스로 주기억을 읽는 시간이 비교 등의 계산보다 훨씬 오래 걸립니다. 선형 탐사에서는 충돌해도 이웃 위치를 조사하므로 대부분 같은 캐시 라인 안에서 끝나고, 프리페치도 잘 듣습니다. 체이닝에서는 리스트의 다음 원소가 메모리 위의 떨어진 곳에 있는 경우가 많아, 포인터를 따라갈 때마다 캐시 미스가 일어나기 쉬워집니다. 시간 복잡도의 차수가 같더라도 메모리 접근 방식에 따라 실제 속도는 크게 달라집니다. 다만 선형 탐사는 적재율이 높아지면 채워진 위치가 뭉쳐서 급격히 느려지므로, 적재율을 낮게 유지합니다.