반응형

전체 글 2934

[C언어 알고리즘] 4.1 최소값(최대값) 찾기 알고리즘

선형 자료구조에 보관한 자료 중에 최소값을 찾는 방법은 많습니다. 그 중에 분할 정복 알고리즘으로 해결하는 방법을 알아봅시다. 분할 정복 알고리즘에서는 모집합을 부분 집합으로 나누는 작업을 선행합니다. 원하는 기준에 맞게 부분 집합으로 분리한 후에 부분 집합에서 원하는 결과를 구합니다. 그리고 해결한 부분을 합쳐서 다시 커다란 집합에서 원하는 결과를 구하는 과정을 반복합니다. 최소값(최대값) 찾기 알고리즘도 분할 정복 알고리즘으로 문제를 해결할 수 있습니다. 배열의 원소 중에 최소값을 찾기 위해 원소 개수가 2보다 크면 배열의 앞 부분에서 최소값을 찾기 위해 재귀함수를 호출하고 마찬가지로 뒷 부분에서 최소값을 찾기 위해 재귀함수를 호출합니다. 그리고 배열의 앞 부분의 최소값과 뒷 부분의 최소값을 비교하여..

[C언어 알고리즘] 4. 분할정복 알고리즘

[C언어 알고리즘] 4. 분할정복 알고리즘 분할 정복 알고리즘은 커다란 문제를 작은 문제로 나누어 작은 문제를 해결하고 이를 다시 합쳐 커다란 문제를 해결하는 알고리즘입니다. 분할 정복 알고리즘은 내부적으로 재귀 알고리즘을 사용합니다. 대표적인 분할 정복 알고리즘에는 최소값(최대값) 찾기 알고리즘, 이진 탐색 알고리즘과 병합 정렬 알고리즘 등이 있습니다.[C언어 알고리즘] 4.1 최소값(최대값) 찾기 알고리즘[C언어 알고리즘] 4.2 이진 탐색 알고리즘[C언어 알고리즘] 4.3 병합 정렬(Merge Sort) 알고리즘

[온라인 무료 공개] 디딤돌 Java 언어 Part1 출간

디딤돌 Java 언어 Part1 출간 서문 이 책은 Java 언어를 처음 접하는 이를 위해 작성하였습니다. 특히 Java 언어에서 클래스는 OOP(Object Oriented Programming, 개체(혹은 객체) 지향 프로그래밍) 방식으로 프로그래밍할 수 있는 주요한 문법입니다. OOP의 주요 특징인 캡슐화, 상속, 다형성을 중심으로 전체 내용을 기술하였습니다. ebook으로 편집하면서 이번 Part1은 Java소개, 자료형과 연산, 제어문, OOP, 배열 및 기본 문법을 다루고 있습니다. 아무쪼록 Java 언어를 처음 접하는 이들에게 도움을 줄 수 있기를 소망합니다. 출간일 2016년 11월 28일판매가 2000원형태 ebook 이 책의 모든 내용은 http://ehpub.co.kr에 공개하고 있습..

[C++ 무료 동영상 강의] 19. 특별한 멤버 this

[C++ 무료 동영상 강의]19. 특별한 멤버 this 다루는 내용this, 전역 변수와 지역변수와 멤버 필드를 구분하여 접근 앞으로 프로그래밍 관련 글은 새롭게 개설한 언제나 휴일 전용 사이트에서 만나보세요. 2017년 1월 1일까지 이 곳의 프로그래밍 자료는 http://ehpub.co.kr 로 옮길 예정입니다. 본문[디딤돌 C++] 19. 특별한 멤버 this

[C++ 무료 동영상 강의] 18. 상수화 멤버

[C++ 무료 동영상 강의]18. 상수화 멤버다루는 내용const,상수화 멤버 필드,상수화 멤버 필드 초기화, 상수화 멤버 메서드 앞으로 프로그래밍 관련 글은 새롭게 개설한 언제나 휴일 전용 사이트에서 만나보세요. 2017년 1월 1일까지 이 곳의 프로그래밍 자료는 http://ehpub.co.kr 로 옮길 예정입니다. 본문[디딤돌 C++] 18. 상수화 멤버

[C언어 알고리즘] 3.5.4 힙 정렬 알고리즘 소스 코드

[C언어 알고리즘] 3.5.4 힙 정렬 알고리즘 소스 코드//힙 정렬 #include #define SWAP(a,b) {int t; t = a; a=b; b=t;}//a와 b를 교환 #define LCHILD(me) (2*me +1) #define RCHILD(me) (LCHILD(me)+1) #define PARENT(me) ((me-1)/2) void ViewArr(int *arr, int n); void HeapSort(int *base, size_t n); int main(void) { int arr[10] = { 9,4,3,10,5,8,7,6,2,1 }; ViewArr(arr, 10); HeapSort(arr, 10); ViewArr(arr, 10); return 0; } void HeapSor..

[C언어 알고리즘] 3.5.3 힙 정렬 알고리즘 구현

[C언어 알고리즘] 3.5.3 힙 정렬 알고리즘 구현 이번에는 힙 정렬 알고리즘을 구현해 보기로 해요. 힙 정렬(base:배열의 시작 주소, n: 원소 개수, compare:비교 논리) 초기 힙 구성 루트와 맨 마지막 자손 교환 n을 1 감소 반복(n: n->1) 힙 구성 루트와 맨 마지막 자손 교환 n을 1 감소 초기 힙 구성(base:배열의 시작 주소, n: 원소 개수, compare:비교 논리) 반복(i:1->n) j:=1 반복(j>0) pa:=PARENT(j) 조건: compare(base[j], base[pa])이 0보다 크면 base[j], base[pa] 교환 j: = pa 아니면 내부 루프 탈출 힙 구성(base:배열의 시작 주소, n: 원소 개수, compare:비교 논리) 반복 lc:=..

[C언어 알고리즘] 3.5.2 힙 정렬 알고리즘 성능 분석

[C언어 알고리즘] 3.5.2 힙 정렬 알고리즘 성능 분석 이번에는 힙 정렬 알고리즘의 수행 속도를 계산해 보기로 해요. 힙 정렬(base:배열의 시작 주소, n: 원소 개수, compare:비교 논리) 초기 힙 구성 루트와 맨 마지막 자손 교환 n을 1 감소 반복(n: n->1) 힙 구성 루트와 맨 마지막 자손 교환 n을 1 감소 힙 정렬 알고리즘 수행 속도는 초기 힙 구성과 힙 구성을 n-1번 수행하는 비용의 합입니다. 수행 속도 = 초기 힙 구성 속도 + 힙 구성 속도 * (n-1) 초기 힙 구성(base:배열의 시작 주소, n: 원소 개수, compare:비교 논리) 반복(i:1->n) j:=1 반복(j>0) pa:=PARENT(j) 조건: compare(base[j], base[pa])이 0보다..

[C언어 알고리즘] 3.5.1 힙 정렬 알고리즘 소개

[C언어 알고리즘] 3.5.1 힙 정렬 알고리즘 소개 힙 정렬은 힙 트리를 이용하는 알고리즘입니다. 최대 힙을 사용하면 크기 순(Ascend)으로 정렬하고 최소 힙을 사용하면 크기 역순(Descend)으로 정렬합니다. 힙 정렬은 먼저 힙 트리를 구성합니다. 그리고 루트의 값과 맨 마지막 값을 교환한 후에 정렬 범위를 1 줄입니다. 이와 같은 작업을 반복하여 정렬 범위가 1일 때까지 반복합니다. 최대 힙 트리에서 루트는 최대 값을 갖습니다. 따라서 마지막 값과 교환하면 제일 큰 값이 맨 뒤로 배치할 수 있습니다. 그리고 난 후에 정렬 범위를 줄여나가면 최종적으로 정렬 상태를 만들 수 있는 것입니다. 힙 정렬(base:배열의 시작 주소, n: 원소 개수, compare:비교 논리) 초기 힙 구성 루트와 맨 ..

[C언어 알고리즘] 3.5 힙 정렬(Heap Sort) 알고리즘

[C언어 알고리즘] 3.5 힙 정렬(Heap Sort) 알고리즘 이제 힙 정렬 알고리즘을 살펴보기로 해요. 힙 정렬은 완전 이진 트리의 한 종류인 힙 트리를 이용하여 정렬하는 알고리즘입니다. 먼저 힙 트리가 무엇인지 살펴본 후에 힙 정렬 알고리즘을 알아보고 분석 및 구현해 봅시다. 힙 트리는 부모의 값이 자식의 값보다 큰 값을 보장하는 최대 힙과 작은 값을 보장하는 최소 힙이 있습니다. 최대 힙으로 표현한 힙 트리의 루트에는 가장 큰 값을 갖고 최소 힙으로 표현하면 가장 작은 값을 갖습니다. [그림 3.12] 힙 트리 힙 트리처럼 완전 이진 트리는 배열로 많이 표현합니다. 완전 이진 트리가 아닌 이진 트리도 배열로 표현할 수 있지만 트리의 높이가 높아지고 한 쪽으로 기울어질 수록 비어있는 공간이 많아져서..

반응형