전체 글
-
Set - 경로 압축C 자료구조/Set 2020. 7. 2. 23:52
인용 앞에서 만든 집합을 그대로 가지고 와서 구현. 1. 개념 경로압축은 FindSet을 행하는 과정에서 경로의 길이를 줄이는 아이디어를 넣은 것. FindSet을 수행하는 과정에서 만나는 모든 노드들이 직접 루트를 가리키도록 포인터를 바꾸어준다. 이렇게 함으로써, 트리의 랭크(높이)를 줄일 가능성이 높다. 아래와 같이 임의의 트리가 있다고 가정해보자. [그림 1] 위의 그림에서 FindSet(G)를 하면 아래와 같은 그림이 나오는 것을 의미한다. [그림 2] 위의 그림과 같이, 노드G에서 루트에 이르는 경로 상에 있는 모든 노드들이 직접 루트 노드를 가리키도록 바뀌었다. 이 알고리즘에서는 함수의 리턴값을 이용하여 포인터를 갱신하고 있다. FindSet(x)를 경로압축한 의사..
-
Set - 집합에 랭크를 추가C 자료구조/Set 2020. 6. 30. 20:01
인용 1. 설명 앞에서 한 기본적인 내용을 기반으로 랭크를 추가할 것. 각 노드는 자신을 루트로 하는 서브트리의 높이를 랭크(Rank)라는 이름으로 저장한다. 단 하나의 노드로 이루어진 트리의 높이는 0이라고 정의한다. 루트 노드의 랭크가 해당 집합의 랭크가 된다. 아래의 [그림 1]은 집합을 나타내는 트리에서 각 노드의 랭크를 사각형 안에 표기한 것이다. 랭크를 이용한 Union에서는 두 집합을 합칠 때, 랭크가 낮은 집합을 랭크가 높은 집합에 붙인다. [그림 1] 아래의 [그림 2]에서 두 집합의 랭크는 각 각 2와 1이다. 랭크가 1인 집합을 랭크가 2인 집합에 붙였고, 두 집합의 랭크는 여전히 2이다. 이런 방식으로 합칠 때, 합집합의 랭크가 커지는 경우는 두 집합의 ..
-
Set - BasicC 자료구조/Set 2020. 6. 29. 19:26
인용 1. 개념 여기서는 각 집합을 하나의 트리로 표현하는 방법을 배울것이다. 흔히 다루는 트리와는 조금 다른 방식의 표현을 쓴다. 트리를 나타낼 때, 보통은 부모 노드가 자식 노드를 가리키도록 하지만 여기서는 자식 노드가 부모 노드를 가리키도록 한다. 아래 [그림 0 ]은 트리를 이용한 집합 표현의 예로, 8개의 원소로 이루어진 집합이 트리로 표현되었다. 임의의 노드에서 부모를 가리키는 포인터를 계속 따라가다 보면 자신이 속한 트리의 루트 노드를 만나게 된다. 이 루트 노드가 집합의 대표 노드이다. 트리를 이용한 처리에서 루트 노드의 부모 노드 포인터는 아래 [그림 0 ]과 같이 자신을 가리킨다. [ 그림 0 ] 트리를 이용한 표현에는 두 집합을 합하는 작업은 연결 리스..
-
Binary Search Tree 활용 - Tree level 순회C 자료구조/6. Binary Search Tree Basic 2020. 6. 28. 14:08
인용 아래에서 작업한 이진 탐색 트리의 탐색,삽입,삭제의 기능의 내용을 그대로 가지고 와서 활용하도록 하자. designatedroom87.tistory.com/15?category=869957 2. Binary Search Tree 만들기 - 삭제 아래 글을 이어서 진행해보자. designatedroom87.tistory.com/14?category=869957 1. Binary Search Tree 만들기 - 삽입과 탐색 시작 하기 전에, Tree에서 구현한 BinaryTree 헤더 파일과 소스파일이 필요하다. 그.. designatedroom87.tistory.com Traversal 헤더 파일과 소스파일을 만들어서 트리의 레벨 순회 함수를 만들 것이다. 그리고 큐의 헤더 파일과 소스파일을 가지고 ..
-
Queue 만들기C 자료구조/4. 큐( Queue ) 2020. 6. 28. 13:18
1. 개념 Queue는 먼저 들어온 데이터가 먼저 나가는 구조로 되어있다. 이러한 특성을 선입 선출 ( FIFO : First-In First-Out ) 이라고 한다. 큐는 뒤에서 새로운 데이터가 추가되고, 앞에서 데이터가 하나씩 삭제되는 구조를 가지고 있다. 구조상으로 큐가 스택과 다른 점은 스택의 경우, 삽입과 삭제가 같은 쪽에서 일어나지만 큐에서는 삽입과 삭제가 다른 쪽에서 일어난다는 것이다. 큐에서 삽입이 일어나는 곳을 Rear 라고 하고 삭제가 일어나는 곳을 Front라고 한다. 그림으로 보자. 2. 구현 메인 함수 3. 실행결과 헤더 파일 및 소스 파일
-
-
최대 힙 - BasicC 자료구조/Heap 2020. 6. 28. 00:59
들어가기에 앞서, 책 와 인용 1. 힙의 개념 힙은 여러 개의 값들 중에서 가장 큰 값이나 가장 작은 값을 빠르게 찾아내도록 만들어진 자료구조이다. 히프 트리에서는 중복된 값을 허용한다. (이진 탐색 트리에서는 중복된 값을 허용하지 않았다.) 힙의 목적은 삭제 연산이 수행될 때마다 가장 큰 값 혹은 가장 작은값을 찾아내기만 하면 되는 것이다. 힙은 2가지가 있다. 부모 노드의 키값이 자식노드의 키값 보다 큰 최대 힙 반대로 부모 노드의 키값이 자식 노드의 키값 보다 작은 최소 힙이 있다. (위의 2가지 힙은 단지 부등호만 달라지고 나머지는 완전히 동일하다.) 힙은 완전 이진 트리이다. 여기서는 구현의 방식은 최대 힙으로 할 것이다. 값이 곧, 우선 순위이다. 값이 클수록 우선 순위는 높다. [아래의 그림..
-
스택의 활용 - 스택 계산기 (괄호 포함)C 자료구조/3. 스택( Stack ) 2020. 6. 24. 11:25
아래의 글에서 괄호를 포함한 중위 표기법을 후위 표기법으로 변경해 봤다. designatedroom87.tistory.com/25?category=868809 스택의 활용 - 중위 표기법에서 후위 표기법으로 변환(괄호 포함) 괄호를 포함한 중위 표기법을 후위 표기법으로 변경하는 알고리즘 괄호가 있는 중위 표기법을 후위 표기법으로 변경하는 함수 메인 함수 프로그램 실행 결과 아래는 소스 파일 designatedroom87.tistory.com 그러면, 후위 표기법을 계산하면 되는데, 이는 앞의 스택 계산기의 내용과 같다. 이미 후위 표기법으로 만들었기 때문에, 후위 표기법의 계산은 앞의 내용과 동일하다. 그리고, 스택에 저장할 데이터는 float 형이다. 내용은 같지만, 그래도 함수를 다시 보도록 하자. ..