박하의 나날

해시테이블(hash table)

프로그래밍/Unity

2016.10.18. 18:36

1.희소자료(sparse data) 
게임 안에서 각 플레이어를 식별번호(KEY)로 구별한다. 각 키는 고유하여 
동일한 키를 가지는 플레이어는 없다.  또,  0~ 1000,000 사이의 정수로 무작위 결정된다.

EX) player1 : 945,253

player2: 433,455

player3: 36,549

 

 player3(36,549)

 

 player2(433,455)

 

  player1(945,253)


0                                                                                                                      100,0000

-> 1000,000개의 색인들 중 3개의 색인만 쓰여서 무지 낭비.

배열이 아닌 연결리스트로 구현해도 연결리스트 자체가 접근속도가 느려서 별 소용없다.

!-> 그래서 해시테이블 사용!

키 기반 희소자료를 적당한 크기의 공간에 빠르게 저장할 수 있다.

'특정한' 하나의 키가 테이블 안에 존재하는지의 여부를 빠르게 판단할 수 있다.

->키의 해시코드에 따라 구성된 키/값 쌍의 개체를 저장한 컬렉션.


2. 나머지 연산을 통한 해싱

키가 945,253인  플레이어1을 적당한 크기의 공간에 10인 배열에 넣는다고 할 때, 

나머지 연산을 통해서 넣는다.

ex) 키를 배열의 크기 10으로 나눈다.

player1: 3

player2: 5

player3: 9

 

 

 

 p1

 

 p2

 

 

 p3

0                                      3                        5                                                   9

배열에서 특정 플레이어를 조회할 때도 동일한 방법을 사용한다.

ex) player = table [key&10];

나머지를 구하는 해싱은 문제가 많지만 충분히 해시테이블의 중요성을 알수 있다.

이상적인 해시테이블은 항목의 검색 알고리즘이 'O(c)'이다.





해시테이블은 키의 해시코드에 따라 구성된 키/값 의 개체를 저장한 컬렉션이다.

키 기반 희소자료를 적당한 크기의 공간에 빠르게 저장할 수 있고, 특정한 키가 테이블 안에 존재하는지 여부를 빠르게 알수 있다.

키는 게임 안에서 각 플레이어를 식별하는 고유한 번호이다.


'프로그래밍 > Unity' 카테고리의 다른 글

해시테이블_개선  (0) 2017.04.09
해시테이블_충돌  (0) 2017.04.09
Stack<T>  (0) 2017.04.09
Queue<T>  (0) 2017.04.09
Dictionary<TKey, TValue>  (0) 2017.04.09