Data Structure & Algorithm 4

[Data Structures] Hash Table

해시 테이블(Hash Table) 목표 해시 알고리즘에 대한 정의 좋은 해시 알고리즘을 만드는 방법 해시 테이블에서 충돌이 발생하는 경우 이해 개별 체이닝(separte chaining)과 선형 조사법(linear probing)을 이용한 충돌 해결 해시 테이블이란 해시 테이블은 key-value 쌍을 저장하는 데 사용한다. 해시 테이블의 key는 순서를 갖지 않는다.(배열과 달리) 해시 테이블은 값을 찾거나 추가하거나 제거하는 데 빠르다.(배열과 달리) 해시 테이블은 이처럼 속도가 빠르기 때문에 자주 사용되며, 대부분의 프로그래밍 언어에서는 다음과 같이 해시 자료 구조를 갖고 있다. 이들은 모두 key-value 쌍 데이터를 저장하고 해시 테이블을 사용한다. Python: Dictionary Javas..

[Data Structures] Queue

사실 자바스크립트에서 Queue를 독립적으로 자체 제공하지는 않지만 배열(Array)를 이용하여 큐의 기능을 흉내낼 수 있다. 자바스크립트의 배열 내장 메서드 중에는 shift() 라는 메서드가 있는데, 이는 배열의 가장 앞에 있는 원소부터 하나씩 제거하는 기능을 수행한다. 즉 배열의 pop() 메서드의 역방향이라고 볼 수 있다. 큐의 순서는 FIFO(First In First Out) 원칙을 고수하기 때문에 사실 shift() 메서드를 이용하면 해당 원칙을 준수하며 데이터 삽입/제거가 가능하다. 그러나 해당 방식은 근본적인 문제가 있다. 바로 배열을 활용해서 FIFO 원칙을 적용한다는 점인데, 이 부분에서 원래 큐 자료구조의 시간복잡도와 상당한 차이가 발생하게 된다. 배열을 활용한 큐의 구조에서 상당한..

[Data Structures] Linked List2

이어서 연결 리스트의 맨 앞에 데이터를 추가하고 삭제하는 함수를 추가. 맨 앞에 노드를 추가하기 위해서는 HEAD와 연결된 노드(Node) 객체를 생성된 노드(Node) 객체의 다음 노드로 참조시zla. 그리고 HEAD에 생성된 노드(Node) 객체를 참조시킵니다. // 맨 앞에 데이터를 추가하는 함수 this.addFirstNode = function(data) { // 노드 객체 생성 var node = new Node(data); // HEAD가 NULL이면 연결된 노드(Node)가 없는 빈 상태(Empty)이므로 생성된 노드를 참조시킵니다. if (this.isEmpty()) { this.head = node; } else { // HEAD가 NULL이면 연결된 노드(Node)가 없는 빈 상태(E..

[Data Structures] Linked List1

연결(링크드) 리스트(Linked List) ​ 연결 리스트(Linked List)란, 데이터와 포인터로 구성된 노드(Node)들을 연결하는 구조. 노드(Node)는 포인터를 이용하여 다음 노드(Node)와 연결된다. 스택(Stack), 큐(Queue), 덱/데크(Deque, Double-Ended Queue), 원형 큐/환상 큐(Circular Queue)는 버퍼(배열)를 사용하기 때문에 버퍼(배열)에서의 위치 값으로 데이터를 추가하고 가져감. 버퍼(배열)가 아닌 포인터로 연결된 연결 리스트(Linked List)에서는 버퍼(배열)의 위치 값이 아닌 시작 포인터를 가지고 있다. 시작 포인터를 HEAD라고 함. 시작 포인트가 NULL이면 연결된 노드(Node)가 없는 빈 상태(Empty). => 노드(N..