삽질의 현장/- 자료구조와 알고리즘

#019_자료구조와 알고리즘_Hash Table 및 의사 결정 알고리즘

shovelman 2015. 8. 30. 04:45


안녕하세요 삽잡이입니다.


이번에는 간단하게 해시 테이블과 의사 결정 알고리즘에 대해서 알아보려고 합니다.

물론... 코드는 없고... 간략하게 알아보도록 하겠습니다.

사실 정리용... 하하...


해시 테이블은 해싱이라는 작업을 통해 자료를 보관하는 테이블을 말합니다.

그렇다면 해싱(Hashing)이란 무엇일까요?

해싱이란, 특정 알고리즘으로 자료를 보관할(한) 위치를 판단하는 과정을 말합니다.

여기서 특정 알고리즘이란 해시 함수를 말하는 것입니다.


결과적으로 해시 테이블을 통해서 어떠한 자료를 집어넣었을때 

보관한 자료의 인덱스를 보내줄 것이고 인덱스를 따라가면 특정 자료가 보관되어 있게 되는 것입니다.


해시 테이블에는 해시 함수를 통해 자료를 보관하려고 했지만,

이미 해당 공간에 자료가 보관되어있을 때 충돌이 나서 오버 플로우가 발생하게 됩니다.

이때에 오버플로우가 발생하지 않기 위해 여러가지 방법들이 있는데,

그 중 하나가 연결 리스트를 사용하는 chaining 방법이 있습니다.


이 chaining 방법을 사용할 때에 체인(한글로 하겠습니다 하하하...)의 길이에 따라서 

검색하는데 걸리는 식나이 달라질 수 있다는 특징이 있습니다.

즉, 검색 효율성이 체인의 길이에 따라 떨어질 수 있다는 것이지요.


정적 해시 테이블 같은 경우에 크기가 아주 큰 테이블로 만들지 않는 이상 

이러한 문제점이 계속 발생하게 됩니다.

따라서 확장 해시 테이블이 등장하게 됬습니다.


확장 해시 테이블은 테이블의 사이즈가 능동적으로 증가할 수 있는 테이블을 말합니다.

이 확장 해시 테이블에는 몇번 분할 했는지에 대해 구분하기 위한 해시 레벨이 포함되어 있습니다.


가치 있는 해시 테이블을 만들기 위해서는 

해시 함수를 잘 디자인 해야합니다.


이와 같은 해시 테이블은 많은 데이터를 보관할 때 데이터가 보관할 위치를 

외부에서 해킹당하지 않기 위해 보안성이 요구될 때 많이 사용됩니다.




다음으로 의사 결정 알고리즘이란 무엇을 말하는 것일까요?

분명 컴퓨터는 모든 것을 다 처리할 수 있는 만능 기계같지만 사실은 아닙니다.


무슨 x소리냐고요? 하하... 컴퓨터로도 계산할 수 없는 문제들이 있다는 것입니다.

조금 더 정확하게 말씀드리자면, 구현은 할 수 있을 수 있으나 

수행하는 시간이 너무 많이 걸리는 문제들이 있을 수 있다는 것이지요...


이런 문제를 해결하기 위해서 의사 결정 알고리즘이 나온 것입니다.

의사 결정이란... 자연계의 현상을 이용(판단)하여 문제를 해결에 사용하는 것을 말합니다.


대부분 우리는 인공지능이라 말하는 것들을 의사 결정 알고리즘이라고 부릅니다.

의사 결정 알고리즘에는 아래와 같은 종류들이 있습니다.


뉴런, 진화, 개미집, 새떼, 세포...


이 외에도 분명 더 있겠지요...

아무튼, 위의 알고리들은 대표적인 의사결정 알고리즘이라고 할 수 있습니다.


의사 결정이라는 것 자체가 자연계 현상을 이용한다고 했는데요

그래서 저와 같은 이름들이 붙여졌나본지 참으로 흥미가 있습니다.

물론, 자세한 내용은 검색해보시길 바랍니다.


저는 저 알고리즘들에 대해서 배웠을 때 매우 흥미로웠습니다.

물론, 저 이론에 관해 코드로 옮기는 것이 가능할지 의문이지만 말이죠...


프렉탈, 카오스...

보스, 진보...

보험, 모험...


이와 같이 어떠한 알고리즘들도 이들의 절충을 보는 듯합니다.

프렉탈과 카오스를 어떻게 적절하게 섞느냐에 따라 아름다운 그림이 그려진다는 것이지요...


저는 언제 이런 아름다운 그림을 그리는 엔지니어가 될 수 있으련지요 하하...

열심히 달려야겠습니다..


뜬금없는...


이상 삽잡이였습니다!