반응형

소스 구현 59

6.2.2 WebPageGetter 구현

6.2.2 WebPageGetter 구현 이번에는 웹 페이지를 수집하는 WebPageGetter 클래스를 구현합시다. class WebPageGetter { } 멤버 이벤트로 웹 페이지 수집 완료 이벤트가 필요합니다. 이 부분은 이미 WebCollect에서 설명하였습니다. internal event WebPostedEventHandler WebPosted = null; 웹 페이지를 수집하는 방법은 여러가지 방법이 있는데 여기에서는 WebBrowser 컨트롤을 사용할게요. 이를 위해 Windows.Windows.Forms.dll을 참조 추가가 필요합니다. 멤버 필드로 웹 페이지 수집에 필요한 WebBrowser 개체를 생성합시다. WebBrowser wb = new WebBrowser(); 수집 결과를 표..

[Java 언어 활용] 3.12 HashMap 클래스

[Java 언어 활용] 3.12 HashMap 클래스 Java의 HashMap 클래스는 Map 인터페이스 기반의 구현 클래스입니다. 그리고 해쉬 테이블 자료 구조를 표현한 클래스입니다. 앞에서 다루었던 HashSet 클래스도 해쉬 테이블 자료 구조를 표현한 클래스였습니다. HashSet 클래스는 Collecion 인터페이스 기반의 구현 클래스로 단일 개체를 보관하는 클래스이며 HashMap 클래스는 key와 value를 쌍으로 보관하는 클래스입니다. 보관할 때 key를 해쉬 테이블 내부의 해쉬 함수를 통해 보관하여 검색할 때 key로 검색하면 빠르게 value를 찾을 수 있는 장점을 갖고 있습니다. HashMap 형식 변수 선언 및 개체 생성할 때는 제네릭 형식 인자로 키와 값을 명시하여 표현합니다. H..

[C언어 알고리즘] 7.4.1 크루스칼 알고리즘 구현

[C언어 알고리즘] 7.4.1 크루스칼 알고리즘 구현이제 크루스칼 알고리즘을 구현하기로 해요. 이 책에서는 크루스칼 알고리즘을 구현할 때 그래프를 인접행렬로 표현하지 않고 정점과 간선의 집합체로 정의할게요. 인접행렬로 표현한 소스 코드는 인터넷이나 다른 레퍼런스에 많이 나와있으니 이를 참고하세요. 그래프는 프림 알고리즘을 구현하면서 만든 것을 사용하세요. void SelectVertex(Graph *mstree,Graph *origin); Array *MakeSortedEdges(Array *edges); void SelectEdge(Array *graphs,Array *sorted_edges); Graph *Kruskal(Graph *origin) { Array *sorted_edges=0; Array..

[C언어 알고리즘] 7.3.2 프림 알고리즘 구현

[C언어 알고리즘] 7.3.2 프림 알고리즘 구현이제 프림 알고리즘을 구현해 보아요. 프림 알고리즘에서는 최소 비용의 정점을 선택하는 내부 알고리즘이 필요해요. 프림 알고리즘에서 정점을 선택해 나갈 때 현재까지 선택한 정점에서 갈 수 있는 정점 목록에서 최소 비용의 정점을 선택해야겠죠. 이를 위해 다음과 같은 논리가 필요해요. 정점선택알고리즘(mstree:최소신장트리,graph:원본 그래프) selectedge:= NULL으로 초기화 seek:= graph의 시작 정점 위치 end:= graph의 마지막 정점 위치 반복(seek가 end가 아닐 때) edge:=seek에 있는 간선 조건(edge가 mstree에 선택한 정점을 하나만 포함하고 있을 때) 조건(selectedge가 있다면) 조건(select..

[C언어 알고리즘] 7.3.1 프림 알고리즘에 맞게 그래프 소스 코드 수정

[C언어 알고리즘] 7.3.1 프림 알고리즘에 맞게 그래프 소스 코드 수정이 책에서는 프림 알고리즘을 구현할 때 그래프를 인접행렬로 표현하지 않고 정점과 간선의 집합체로 정의할게요. 인접행렬로 표현한 소스 코드는 인터넷이나 다른 레퍼런스에 많이 나와있으니 이를 참고하세요. 프림 알고리즘을 구현하기 전에 그래프 알고리즘에 몇 가지 함수를 추가하기로 해요. 먼저 정점의 개수를 구하는 함수를 제공하기로 해요. int Graph_GetVtCnt(Graph *graph); 그리고 그래프의 맨 앞에 있는 정점을 구하는 함수도 제공해요. Vertex Graph_GetFront(Graph *graph); 마지막으로 간선에 특정 정점을 끝점으로 하는지 판별하는 함수를 제공하기로 해요. int Edge_Include(Ed..

[C언어 알고리즘] 6.2.6 깊이우선탐색(DFS) 알고리즘의 경험 정보 구현

[C언어 알고리즘] 6.2.6 깊이우선탐색(DFS) 알고리즘 경험 정보 구현 초기 경험 정보를 생성하는 함수를 작성합시다. Heuristic *MakeInitHeuristic(Graph *graph,Vertex start,Vertex goal) { Heuristic *heu = 0; 경험 정보 크기의 메모리를 할당합니다. heu = (Heuristic *)malloc(sizeof(Heuristic)); 이동 경로를 보관할 동적 배열을 생성합니다. heu->exprs = New_Array(); 그래프와 출발점, 도착점을 설정합니다. heu->graph = graph; heu->start = start; heu->goal = goal; 출발점을 이동 경로에 보관합니다. Array_PushBack(heu->e..

[C언어 알고리즘] 6.2.5 깊이우선탐색(DFS) 알고리즘의 경험(Heuristic) 정보 설계

[C언어 알고리즘] 6.2.5 깊이우선탐색(DFS) 알고리즘의 경험(Heuristic) 정보 설계 동적 알고리즘에서는 경험 정보를 설계하는 것이 매우 중요합니다. DFS 알고리즘에서의 경험 정보는 그래프에서 출발점과 도착점 사이에 이동 경로를 기억하고 있어야 합니다. 여기에서는 이동 경로를 배열을 이용하여 보관하기로 할게요. 그리고 총 이동 거리도 멤버로 구성합시다. typedef struct _Heuristic Heuristic; struct _Heuristic { Array *exprs; Graph *graph; Vertex start; Vertex goal; int total_weight; }; 초기 경험 정보를 생성하는 함수를 제공합시다. 초기 경험 정보를 생성하려면 그래프와 출발지, 도착점을 알..

[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(); 입력 인자로 전달받은 ..

반응형