728x90
반응형

오버플로우 3

[C언어] 자료구조 - Hash 체이닝(chaining)-3

체이닝은 앞에서 말했다시피 슬롯의 개수가 정해져있어서 오버플로우가 생기는데 그렇다면 자료구조의 형태를 배열이 아닌 연결리스트로 연결하겠다!!! 라고 해서 만든 것이다. 그래서 여기에는 슬롯 사이즈가 들어가지 않는다. 대충 이렇게 만든다. void main() { init_map(); add_record("age", "A"); add_record("ant", "A"); add_record("allow", "A"); add_record("best","B"); add_record("beef","B"); add_record("bye","B"); add_record("creep", "C"); add_record("conscience", "C"); add_record("dirty", "D"); add_record(..

[C언어] 자료구조 - Hash -오버플로우 처리 방법 및 기본 연산-2

앞에서 오버플로우가 일어나는 원인을 알아보았다. 자료가 들어가는 자리에 버킷이 겹칠 때, 또한 슬롯도 꽉 차있을 때 오버플로우가 생긴다고 했는데 그렇다면 다른 버킷은 비어있는데 어느 특정 버킷만 자꾸 나와서 오버플로우가 된 경우를 생각하자 200개 중에 자꾸 1개 버킷에만 몰려서 오버플로우가 발생하는데, 오버플로우를 막으려면 해시함수부터 수정해야한다. 해시함수를 잘못만들어서 테이블 전체를 골고루 활용하지 못하고 편중되게 사용하는 것이다. 해시함수가 가져야 할 특징을 못가져서 그렇다. 해시함수가 가져야 할 특징 1. 충돌이 적어야함 2. 해시 테이블에 고르게 분포시킬 수 있는 주소의 연산 값이 나와야 한다. 3. 계산이 빨라야 한다. 아무튼 이러한 특징을 가지는 함수 중 가장 대표적인 것만 알아보자 제산 ..

[C언어] 자료구조 - Hash 해시 ,해싱-1

기본적인 것만 알아보자. 우선 해시를 알기 전에 알아야 할게 있다. 탐색(search) 란 것이 무엇인지 알아야 하죠. 국어사전의 뜻과 같이 무엇인가를 찾는 작업이다. 그렇다면 컴퓨터에서는 뭘 찾는 것을 탐색이라고 말할까? –탐색을 위하여 사용되는 자료 구조 •배열, 연결 리스트, 트리, 그래프 등 바로 하나 이상의 필드로 구성된 레코드(record)의 집합에서 원하는 레코드를 찾는 것을 말한다. 또한 레코드들의 집합을 테이블(table)이라고 부른다. 그렇다면 레코드들의 집합인데 서로 어떻게 구분할까??? 레코드마다 서로 구별되는 키를 가지고 있는데 그것을 탐색키라고 한다. 여기까지 탐색을 알아보았다. 그런데 의미있는 단위를 이끌어 내기 위해서는 하나의 필드를 가진 레코드만으로는 부족하다. 그래서 맵(..

728x90
반응형