본문 바로가기

ComputerScience

(7)
자료구조 - HEAP [완전이진트리, 힙, 우선순위 큐] 완전이진트리 - 루트 노드로 부터 왼쪽 자식 노드, 오른쪽 자식 노드 순서대로 데이터가 차례대로 삽입되는 트리이다. 즉, 마지막 깊이(level)만 제외하고 모든 레벨의 노드들이 모두 채워져있으며 될 수 있으면 왼쪽은 모두 채워 나가는 형태이다. A : 왼쪽은 완전 이진트리 이다. B: 오른쪽은 완전이진 트리가 아니다. HEAP - 완전 이진트리의 구조를 갖고 있다. - 부모 노드가 최대 이냐 최소이냐에 따라 최대힙, 최소힙으로 나눌 수 있다. 최소 힙 최소힙 구성함수 : Min - Heapify() - 아래에서 부모노드로 거슬러 올라가며, 부모보다 자신의 값이 더 큰 경우가 되어야한다. - 즉, 부모보다 자신의 값이 더 작은 경우 자신과 부모노드의 자리를 바꾼다. 최대 힙 최대힙 구성함수 : Max -..
자료구조 - 트리[이진탐색트리] 트리 자료 구조 - 데이터 베이스는 내부적으로 대용량 데이터 처리에 적합한 트리 자료구조를 이용하여 항상 데이터가 정렬되어있다. - 노드와 노드의 연결로 표현하며 노드는 정보의 단위로서 어떠한 정보를 가지고 있는 개체이다. - 그래프 자료구조의 일종이다. - 트리는 부모 노드와 자식 노드의 관계로 표현된다. - 트리의 최상단 노드를 루트 노트라고 한다. - 트리의 최하단 노드를 단말 노드라고 한다. - 트리에서는 일부를 떼어내도 트리 구조이며 이를 서브 트리라 한다. - 트리는 파일 시스템과 같이 계층적이고 정렬된 데이터를 다루기에 적합하다. 큰 데이터 처리를 요구하는 소프트웨어는 대부분 데이터를 트리 자료구조로 저장해서 이진탐색과 같은 탐색 기법을 이용해 빠르게 탐색이 가능하다. 이진 탐색 트리 - 이..
자료구조 - 이진탐색 순차탐색 - 리스트 안에 있는 특정한 데이터를 찾기 위해 앞에서 부터 데이터를 하나씩 차례대로 확인하는 방법 - 최적의 시간복잡도 O(1) : 가장 첫번째에 찾고자 하는 데이터가 있는경우 - 최악의 시간복잡도 O(n) : 가장 마지막에 찾고자 하는 데이터가 있는경우 이진탐색 - 찾으려는 데이터와 정렬 된 리스트의 중간지점을 계속해서 재귀적으로 반복하며 비교해서 찾아내는 방법 - 데이터들이 정렬 되어 있어야 한다. - 탐색하고자 하는 범위의 시작점, 끝점, 중간점의 변수를 사용한다. 34의 인덱스를 찾는다고 해보자 1. low ,middle, high = index : 0, 7, 15 설정, index(middle) < 34 이므로 2. low, middle, high = index : 8, 11, 15 ..
자료구조 - 정렬 [선택 정렬, 삽입 정렬, 퀵 정렬, 계수 정렬] 정렬 : 데이터를 특정한 기준에 따라서 순서대로 나열하는 것 선택 정렬(Selection sort) : 여러 데이터들중 가장 작은 데이터를 선택해 맨 앞에 있는 데이터와 바꾸고, 그다음 작은 데이터를 선택해 앞에서 두 번째 데이터와 바꾸는 과정을 반복하는 것 1. 처음에는 정렬되어 있지 않으므로 가장 작은 1을 선택해서 맨앞의 숫자인 5와 swap 2. 맨앞의 1을 제외하고 나머지 숫자들 중에서 가장 작은 2를 선택해서 맨앞의 숫자인 5와 swap 3. 맨앞의 1, 2를 제외하고 나머지 숫자들 중에서 가장 작은 3을 선택해서 맨앞의 숫자인 3과 swap(이미있다.) 4. 맨앞의 1, 2, 3을 제외하고 나머지 숫자들 중에서 가장 작은 5를 선택해서 맨앞의 숫자인 7과 swap 5. 맨앞의 1, 2, 3,..
자료구조 - 탐색알고리즘 BFS BFS Breath First Search 알고리즘은 너비우선 알고리즘 이라고도 하는데 DFS는 가장 멀리 있는 노드부터 탐색한다면 BFS는 그반대다. 가장 가까운 노드 부터 탐색 한다. 이러한 알고리즘의 구현에는 먼저 들어간 노드를 자료구조에 넣고 탐색하고 이후 해당 인접노드를 가까운 곳부터 노드에 넣고 탐색해야하므로 먼저들어간 노드가 없어진다음 그 다음 노드가 탐색되어야 한다. 선입선출의 알고리즘 즉, 큐 자료구조로 구현해야한다. BFS 1. 탐색 시작 노드를 큐에 삽입하고 방문처리를 한다. 2. 큐에서 노드를 꺼내고 해당 노드의 인접노드들을 큐에 넣고 방문처리한다. 3. 2번을 끝까지 반복한다. 1. 시작 노드 1을 큐에 삽입하고 방문처리 한다. 2. 노드 1을 큐에서 꺼내고 방문하지 않은 인접 노..
자료구조 - 탐색알고리즘 DFS DFS(Depth - First search) 깊이 우선탐색이라고도 불리며 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘이다. DFS를 알아보기 전에 간단한 그래프를 알아보자 그래프 노드(node) 와 간선(edge)으로 표현된다. 이때 노드를 정점(vertex)이라고도 한다. 위 그림에서 노드1과 노드2는 간선으로 이어져 있다 이때 노드1과 노드2는 인접한다(adjacent)라고 표현한다. 프로그래밍에서 그래프를 표현하기 위해 크게 두가지 방법을 사용한다. 1. 인접행렬(adjacency matrix) : 2차원 배열로 그래프의 연결 방식을 표현하는 방식 2. 인접리스트(adjacency list) : 리스트로 그래프의 연결관계를 표현하는 방식 인접행렬로의 그래프 노드 1과 노드 2는 서로 연결되..
자료구조 기초 - 탐색, 스택, 큐, 재귀함수 탐색(search) 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정 그래프, 트리등 자료구조안에서 탐색을 활용하는데 탐색 알고리즘으로서는 DFS, BFS 등이 있다. DFS, BFS를 이해하기 전에 스택과 큐, 재귀함수를 간단히 정리 하고 넘어가자 자료구조 데이터를 표현하고 관리하고 처리하기 위한 구조 대표적으로 스택(stack), 큐(Queue)가 있다. 이둘의 구조는 공통적으로 핵심함수 2가지로 이루어져 있다. - 삽입(push) : 데이터를 삽입한다. - 삭제(pop) : 데이터를 삭제한다. 이외 오버플로우(특정한 자료구조가 수용할 수 있는 데이터의 크기를 넘어선 삽입연산시 발생) 언더플로우(자료구조에 데이터가 전혀 없는 상태에서 삭제연산을 수행하면 없는 데이터를 삭제해야 하므로 발생) 등을 고..