본문 바로가기

자료구조6

[자료구조]이진 탐색 트리(Binary Search Tree) 이진 검색 트리 이진 검색 트리란 이진 탐색과 연결리스트를 결하한 자료구조입니다. 이진 탐색의 효율적인 탐색 능력을 유지하면서 빈번한 자료 삽입과 삭제가 가능합니다. 이진 탐색의 경우 탐색에 소요되는 시간 복잡도는 O(logn)으로 빠르지만 자료 삽입, 삭제가 불가능하고, 연결리스트의 경우 자료 삽입, 삭제에 필요한 시간 복잡도는 O(1)로 효율적이지만 자료 탐색에 필요한 시간복잡도는 O(n)이 됩니다. 이 둘을 결합하여 효율적으로 자료 탐색 및 자료 삽입, 삭제를 가능하게 하는 것이 이진 검색 트리입니다. 이진 검색 트리의 속성 ▶ 각 노드에 값(데이터)과 키가 존재하며, 키 값은 모두 달라야 한다. ▶ 노드의 왼쪽 서브트리에는 그 노드의 키 값보다 작은 값들을 지닌 노드들로 이루어져 있다. ▶ 노드의.. 2018. 2. 27.
[자료구조]연결 리스트(Linked List) 연결 리스트(Linked List) 연결 리스트는 각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식으로 데이터를 저장하는 자료 구조이다. 이름에서 말하듯이 데이터를 담고 있는 노드들이 연결되어 있는데, 노드의 포인터가 다음이나 이전의 노드와의 연결을 담당하게 된다. 연결 리스트는 늘어선 노드의 중간지점에서도 자료의 추가와 삭제가 O(1)의 시간에 가능하다는 장점을 갖는다. 그러나 배열이나 트리 구조와는 달리 특정 위치의 데이터를 검색해 내는 데에는 O(n)의 시간이 걸리는 단점도 갖고 있다. 따라서 연결 리스트는 연결 리스트의 전체 데이터를 순차 적으로 모두 접근하여 데이터에 따라 처리하는 용도로 사용된다. 연결 리스트 삽입 연결 리스트에서 삽입 과정은 위 그림과 같습니다. 삽입할 노드를 .. 2018. 2. 22.
[자료구조]이진 탐색(Binary Search) 이진 탐색 오름차순으로 정렬된 리스트에서 특정한 값의 위치를 찾는 알고리즘입니다. 처음 중간의 값을 임의의 값으로 선택하여, 그 값과 찾고자 하는 값을 비교하는 방식입니다. 선택한 중앙값을 기준으로 찾고자 하는 값보다 크다면 기준의 왼쪽 범위에서, 찾고자 하는 값보다 작다면 기준의 오른쪽 범위에서 다시 중앙값을 선택하여 반복합니다. 이진 탐색 과정을 그림으로 보자면 다음과 같습니다. 위 그림에서 보면 길이가 10인 리스트에 { 0,2,4,6,8,10,12,14,16,18 } 값이 정렬되어 저장되어 있고, 여기서 12를 찾는 과정입니다. 처음에 중앙값, (length / 2)인 5를 기준으로 합니다. 리스트의 5번 index의 값을 기준으로 하는 겁니다. 리스트의 5번 index의 값은 10으로 찾고자 하.. 2018. 2. 14.
[자료구조]합병 정렬(merge sort) 합병 정렬 분할 정복 알고리즘의 하나로 정렬되지 않은 리스크를 절반으로 나누어 비슷한 크기의 리스트로 나눕니다. 분할된 리스트의 크기가 1이 될 때까지 반복합니다. 이렇게 분할된 리스트들을 다시 병합하여 정렬하는 방식이 합병 정렬입니다. 다음은 합병 정렬의 예입니다. 그림 출처 : 위키 합병정렬 https://ko.wikipedia.org/wiki/%ED%95%A9%EB%B3%91_%EC%A0%95%EB%A0%AC 기본 이론 합병 정렬은 길이가 비슷한 정렬이 된 두 리스크를 정렬된 하나의 리스트로 만드는 것이라고 생각하면 됩니다. 즉, {2,4,6,8} , {1,3,5,7,9}로 정렬된 두 리스트가 있습니다. 이 두 리스트를 정렬된 하나의 리스트로 만들기 위해서는 각 리스트의 첫 번째 인자를 비교하여 작.. 2018. 2. 12.
[자료구조]2진 트리 / 힙 정렬 2진 트리(Binary Tree) 2진 트리는 트리 구조 중에서 가장 기초이면서 간단한 트리 구조입니다. 또한 실제 많이 사용하는 트리 이기도 합니다. 2진 트리는 모든 노드가 최대 두 개의 자식 노드를 가지는 트리 자료 구조입니다. 이 두 자식 노드를 왼쪽 자식 노드와 오른쪽 자식 노드라고 하며, 원래의 노드를 이들의 부모 노드라고 합니다. 2진 트리는 2진 탐색 트리와 이진 힙의 구현에 흔히 쓰입니다. -출처 (위키 : 2진 트리) https://ko.wikipedia.org/wiki/%EC%9D%B4%EC%A7%84_%ED%8A%B8%EB%A6%AC 트리 용어 -노드(Node) 트리의 요소 하나하나를 나타내는 기본 원소를 의미합니다. -브랜치(Branch) 노드와 노드를 연결하는 연결선을 의미합니다.. 2018. 2. 7.