Graph / Tree / Hash Table
방향 정보는 SNS에 적용한다면 A유저가 B유저를 follow했다면 단방향. 서로 follow관계면 양방향으로 적용해볼 수 있을 것 같습니다.
자료구조 그래프의 기원은, 객체 간에 짝을 이루는 관계를 모델링 하기 위한 수학적인 이론인 그래프 이론이 1736년에 오일러의 논문에서 처음 제시된 후로 다양한 분야에 사용되다가 컴퓨터 공학에 까지 이르게 된 것이라고 합니다.
그래프 관련 블로그 글 : 트리와의 차이점 정리가 잘 되어있습니다.
이진 탐색 트리는 내용이 정렬되어있어 2진 탐색이 가능한 트리입니다.
완전 이진 트리 포화 이진 트리
이진탐색트리
배열을 인덱싱 수단으로 놓고, 값은 엘리먼트(인덱스가 가리키는 공간의 데이터)가 다른 데이터 구조를 참조하도록 해서 사용한다. (인덱스 라는 표현을 사용했지만, 해시 함수에 따라 문자열을 인덱스로서 얻을 수 있습니다. 이 경우 배열이 아닌, linked list 등의 자료 구조에서 그 문자열을 탐색할 키값으로 등록해 인덱싱할 수 있습니다.)
다른 테이블 스트럭쳐에 비해 탐색 속도 면에서 유리합니다. 항목의 수가 많을 때 장점이 더욱 명확해집니다. (항목의 최대 개수를 미리 예측할 수 있는 경우에 효율적이다.)
만약 키-밸류 페어 세트가 고정돼있고 미리 알 수 있으면(삽입삭제불가), 해시 함수, 내용을 담을 테이블 사이즈, 내부 데이터의 데이터 스트럭쳐를 잘 고르면 평균 조회시간을 줄일 수 있습니다. 특히, 충돌없는 해시 함수 혹은 ‘완전 해시 함수’를 고안할 수 있는데 이런 경우에는 키값을 테이블에 저장할 필요가 없습니다.
해시 함수는 입력 데이터에 손실을 발생시킵니다. 다만 같은 입력이라면 손실이 일어나도 같은 결과가 나오므로 재현성이 있어서 의도한 목적에 맞게 사용할 수 있습니다. 이 손실때문에 결과값을 가지고 입력값을 유추하는 것이 불가능해집니다. (제 생각인데 경우에 따라서는 입력값을 특정짓지는 못하고 후보군까지는 만들 수 있을듯 합니다.) 해시의 비가역성에 대한 글