반응형

알고리즘 65

[C언어 알고리즘] 6.2.3 그래프 테스트(DFS 알고리즘에 사용할 그래프)

[C언어 알고리즘] 6.2.3 테스트(DFS 알고리즘에 사용할 그래프) 이제 작성한 그래프가 잘 동작하는지 테스트 코드를 작성합시다. [그림 6.4]는 앞으로 그래프를 사용하는 알고리즘에서 사용할 그래프의 논리적 모습입니다. [그림 6.4] 그래프 논리적 도식 int main() { 먼저 그래프를 동적으로 생성합니다. Graph *graph = New_Graph(); 정점을 그래프에 추가합시다. Graph_AddVertex(graph,"A"); Graph_AddVertex(graph,"B"); Graph_AddVertex(graph,"C"); Graph_AddVertex(graph,"D"); Graph_AddVertex(graph,"E"); Graph_AddVertex(graph,"F"); Graph_A..

[C언어 알고리즘] 6.2.2 그래프 구현(DFS 알고리즘에 사용할 그래프)

[C언어 알고리즘] 6.2.2 그래프 구현(DFS 알고리즘에 사용할 그래프) 동적으로 그래프를 생성하는 함수를 구현합시다. Graph *New_Graph() { Graph *graph = 0; 그래프 형식 크기의 메모리를 할당합니다. graph = (Graph *)malloc(sizeof(Graph)); 정점을 보관할 동적 배열과 간선을 보관할 동적 배열을 생성한 후에 그래프를 반환합니다. graph->vertexs = New_Array(); graph->edges = New_Array(); return graph; } 동적으로 생성한 그래프를 소멸하는 함수를 구현합시다. void Delete_Graph(Graph *graph) { 그래프 내부에서는 간선을 동적으로 생성하므로 그래프를 소멸하는 과정에서 ..

[C언어 알고리즘] 6.1.3 순열 알고리즘 테스트 코드 작성

[C언어 알고리즘] 6.1.3 순열 알고리즘 테스트 코드 작성 먼저 시뮬레이션에 사용할 초기 바구니에 넣을 공의 집합을 생성하는 함수를 작성할게요. Array * InitSimulation() { int ball = 0; Array *bucket = 0; 먼저 동적 배열을 생성합니다. bucket = New_Array(); 0번 공부터 9번 공까지 순차적으로 이동하면서 배열에 순차 보관합니다. for(ball = 0; ball> 뒤에 명시한 파일로 출력합니다. 결과 파일을 더블 클릭하여 원하는 모든 결과를 출력하는지 확인해 보세요.

[C언어 알고리즘] 6.1.2 순열 알고리즘의 경험 정보 구현

[C언어 알고리즘] 6.1.2 순열 알고리즘의 경험 정보 구현 초기 경험 정보를 생성하는 함수를 작성합시다. Heuristic *MakeInitHeuristic(Array *bucket) { Heuristic *heu = 0; 입력 인자로 전달받은 바구니에 있는 공을 순차적으로 접근하기 위해 반복자 변수를 두 개 선언할게요. Iterator seek=0, end=0; Heuristic 크기의 메모리를 할당합니다. heu = (Heuristic *)malloc(sizeof(Heuristic)); 꺼내지 않은 공을 보관할 동적 배열과 꺼낸 공을 보관할 동적 배열을 생성합니다. heu->ori_bucket = New_Array(); heu->out_bucket = New_Array(); 입력 인자로 전달받은 ..

[C언어 알고리즘] 5.1.1 인접 행렬로 방향성 없는 그래프 소스 코드

[C언어 알고리즘] 5.1.1 인접 행렬로 방향성 없는 그래프 소스 코드//방향성 없는 그래프 #include #include #include typedef struct{//그래프 형식 정의 int vn; //정점 개수 int **matrix;//그래프 인접 행렬 }Graph; Graph *MakeGraph();//그래프 만들기 void ViewNeighbors(Graph *g);//이웃 정점 보여주기 void DeleteGraph(Graph *graph);//그래프 소멸 int main(void) { Graph *graph; graph = MakeGraph();//그래프 만들기 ViewNeighbors(graph); //이웃 정점 보여주기 DeleteGRaph(graph);//그래프 소멸 return ..

[C언어 알고리즘] 5.1 인접 행렬로 방향성 없는그래프

[C언어 알고리즘] 5.1 인접 행렬로 방향성 없는그래프방향성 없는 그래프는 정점 A에서 정점 B로 이동할 수 있으면 언제나 정정 B에서 정정 B로 이동할 수 있음을 보장하는 그래프예요. 방향성 없는 그래프를 표현하는 방법 중에 간단한 그래프에는 인접 행렬을 많이 사용해요. 인접 행렬로 방향성 없는 그래프를 표현하면 좌상단에서 우하단으로 이어지는 대각선에 대칭 형태죠. 먼저 그래프 형식을 정의하기로 해요. 인접 행렬로 그래프를 표현할 때 그래프에는 정점 개수와 인접 행렬이 필요하겠죠. typedef struct{//그래프 형식 정의 int vn; //정점 개수 int **matrix;//그래프 인접 행렬 }Graph; 여기에서는 그래프 생성, 소멸, 간선 추가, 이웃 정점을 보여주는 기능을 제공하기로 해..

[C언어 알고리즘] 5.그래프(Graph)

[C언어 알고리즘] 5.그래프(Graph)이번에는 그래프를 알아보기로 해요. 그래프는 정점과 간선으로 구성하는 자료구조예요. 그래프를 표현하는 방법은 여러가지가 있어요. 여기에서는 인접 행렬을 이용하는 방법과 연결리스트를 이용하는 방법을 알아볼게요.[C언어 알고리즘] 5.1 인접 행렬로 방향성 없는그래프[C언어 알고리즘] 5.2 인접 행렬로 방향성 있는그래프[C언어 알고리즘] 5.3 진입 차수, 진출 차수[C언어 알고리즘] 5.4 인접 행렬로 표현한 그래프 소스 코드

[C언어 알고리즘] 4.2 이진 탐색 알고리즘

[C언어 알고리즘] 4.2 이진 탐색 알고리즘 이번에는 이진 탐색 알고리즘을 알아봅시다. 이진 탐색 알고리즘은 특정 키순으로 정렬 상태의 배열에서 원하는 값의 요소를 빠르게 검색하는 알고리즘입니다. 순차적으로 비교하여 검색한다면 자료의 개수가 N개인 배열에서 최악의 경우 N번 비교해야 합니다. 하지만 이진 탐색 알고리즘으로 검색하면 logN 번이면 검색할 수 있습니다. 이진 탐색 알고리즘은 배열의 중간에 있는 요소와 비교해서 배열의 요소가 크면 재귀적으로 앞쪽 배열에서 검색하고 배열의 요소가 작으면 재귀적으로 뒤쪽 배열에서 검색합니다. 만약 같은 값이면 해당 인덱스를 반환합니다. 그리고 배열의 원소 개수가 0이면 재귀를 탈출하기 위해 인덱스 -1을 반환합니다. 이진 탐색 알고리즘(base:배열, asiz..

[C언어 알고리즘] 4.1.1 최소값(최대값) 찾기 알고리즘 소스 코드

[C언어 알고리즘] 4.1.1 최소값(최대값) 찾기 알고리즘 소스 코드//common.h #pragma once //헤더 파일을 한 번만 포함해서 컴파일 #include #include #include #include #include #include #include #pragma warning(disable:4996) //4996컴파일 경고 메시지 출력 해제 //Book.h #pragma once #include "common.h" #define MAX_TIT_LEN 200 #define MAX_AUT_LEN 20 typedef struct _Book Book; struct _Book { char title[MAX_TIT_LEN+1]; char author[MAX_AUT_LEN+1]; int num; }..

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

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

반응형