728x90
반응형

컴퓨터(Computer Science) 205

[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)이라고 부른다. 그렇다면 레코드들의 집합인데 서로 어떻게 구분할까??? 레코드마다 서로 구별되는 키를 가지고 있는데 그것을 탐색키라고 한다. 여기까지 탐색을 알아보았다. 그런데 의미있는 단위를 이끌어 내기 위해서는 하나의 필드를 가진 레코드만으로는 부족하다. 그래서 맵(..

자료구조란 뭘까? (+추상자료형) (1)

자료구조에 대해 알아보겠습니다. 프로그램이라는 것은 data + 명령 또는 자료구조 + 알고리즘 이라고 볼 수 잇는데 여기서 좋은 프로그램이란 "시간 효율성" 과 " 공간 효율성" 이 뛰어난 것을 말한다. 또한 알고리즘이 잘 짜여져 있다는 것도 좋은 프로그램이라 말할 수 있겠죠? (알고리즘이란 문제 해결 과정을 뜻합니다.) 알고리즘의 조건에는 5가지정도가 있는데.. 1.입력: 0개 이상의 입력 2.출력: 1개 이상의 출력 3.명백성: 명령어의 의미가 명확 4.유한성: 일정한 단계 후에는 종료 5.유효성: 명령어들이 실행 가능해야 한다. 시간 효율성이란 말 그대로 같은 시간동안 얼마나 더 할 수 있느냐? 공간 효율성이란 말 그대로 같은 공간 (메모리) 안에서 얼마나 더 할 수 있느냐? 를 말한다. 일반적으..

배열, 함수의 매개변수,주소,값,자료구조(2)

자료구조의 많은 구조 중 배열에 대해서 알아보도록 하겠습니다. (c언어를 조금이라도 알고있다고 가정해서 설명하고 있습니다.) (데브씨,devc++로 소스파일을 작성하고 컴파일하고 런 했습니다. ㅎㅎ) 우선 배열의 기초를 알아봅시다. 배열을 써먹으려면 배열은 선언하는 법부터 알아야겠죠? 배열은 "자료형 배열이름[ 배열크기];" 이렇게 선언합니다. 다시말하자면 배열을 선언하는데에는 배열에 들어갈 값의 자료형 배열의 이름 배열의 크기 이 3가지가 필요하다는 겁니다. 예를 들어 int a[5];라고 선언하면 5칸짜리 배열이 만들어지고 배열의 첫번째 칸의 이름은 0 두번째 칸의 이름은1 ... 다섯번째 칸의 이름은4 가 됩니다. 즉 a[1]이라하면 이름이0 인 칸을 말하는 것입니다. (주소를 뜻하는 것이죠ㅎㅎ) ..

728x90
반응형