이산치수학 Project5
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
347
On Slideshare
347
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
1
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Project #5:통신망에서 길 찾기 조 : D3 조장 : 2011 정진아
  • 2. 조원 : 2008 고충욱 2009 김시백 2011 안영준 2011 최보은 차 례1. 프로젝트 설명2. 일 정3. 업무분담
  • 3. 4. 소 스5. 회의록1. 프로젝트 설명directed graph(방향그래프)한 쌍의 노드간에 방향성을 갖는 에지로 연결된 그래프를 소위 방향성그래프(directed graph: Digraph)라 하는데, 이는 모든 에지에 대하여 한 쌍의노드가 정돈되어 있는 그래프이다. 즉 v1, v2∈V ⇒ (v1, v2)≠(v2, v1)의 특성을
  • 4. 갖는 그래프이다. 이때 (v1, v2)에서 v1 은 v2 의 꼬리(tail)라하고, v2 는 v1 의머리(head)라 한다. <그림-1> 그래프의 유형출처 : rohhy.kangwon.ac.kr/attachment/1288774889.hwpprecedes / antecedent(선조)트리(tree)의 특정한 노드에 대해 관계가 있는 노드들을 나타내는 용어. 여기서특정 노드의 선조는 트리의 근 노드에서 해당 노드까지의 경로 상에 있는 모든노드를 말한다.출처 : http://terms.naver.com/entry.nhn?docId=815129indegree외부에서 내부로 들어오는 간선들의 수outdegree내부에서 외부로 들어오는 간선들의 수source내부에서 외부로 나가는 간선들만 존재sink외부에서 내부로 들어오는 간선들만 존재
  • 5. adjacency matrix(인접 행렬)인접 행렬은 정점의 개수가 N 일 때, 정점 i 와 정점 j 사이의 가중치를  N×N 의2 차원행렬 M 의 (i,j)에 저장한다.그래프의 각 노드에 일련번호를 부여하고, 일련번호에 의한 노드들을 그래프의노드집합으로 관찰한다. 그리고 그래프의 에지는 노드의 수에 대한 정방형행렬에서 행과 열이 만나는 원소로 나타냄으로써 그래프를 구현할 수 있다. 이에따라 에지는 정방형 행렬에서 다음과 같이 표기할 수 있다.A(i, j) = 1 : (vi, vj)∈E 의 경우A(i, j) = 0 : (vi, vj)∉E 의 경우이에 대해 인접행렬에 의한 그래프는 다음과 같이 구현한다.class Graph{ int edge[max][max]; // 에지의 집합}예를 들어 그림-5.1 의 방향성 그래프 2)를 인접행렬로 구현하면, 에지는 다음과같이 정방형 행렬로 작성한다. 0 1 20 0 1 0
  • 6. 1 1 0 12 0 0 0[그림-5.7] 인접행렬 //인접행렬을 통한 그래프 생성과 출력 #include <iostream.h> const int max=3; class Graph { int edge[max][max]; // 에지의 집합 public: void build() { int n; for (int i=0; i<max; i++) for (int j=0; j<max; j++) { cin>>n; edge[i][j]=n; } } //그래프의 에지를 (a, b)의 형태로 출력 void display() { for (int i=0; i<max; i++)
  • 7. for (int j=0; j<max; j++) { if (edge[i][j]==1) cout<<"("<<i<<", "<<j<<") "; } } }; void main() { Graph *obj=new Graph(); obj->build(); obj->display(); } //입력자료: 0 1 0 1 0 1 0 0 0 //출력결과: (0, 1) (1, 0) (1, 2)인접행렬로 그래프를 구현할 경우 한 노드에 접근하는데 요구되는 시간은 노드의수에 따라 결정된다. 그러나 인접행렬로 구현된 그래프는 접근시간이 짧기때문에 에지가 존재하는지 자주 알 필요가 있을 때 유용하다.인접행렬에 의한 방향성 그래프는 n2 보다 적은 에지를 갖은 경우일지라도에지를 구성하기 위해 n2 에 해당하는 메모리를 필요로 한다. 뿐만 아니라 한노드를 탐색하는데 소요되는 시간은 노드의 수 n 에 관련 O(n2)에 달한다.
  • 8. 한편 비방향성 그래프인 경우에는 행렬의 대각선을 중심으로 에지의 관계가대칭을 이루기 때문에 에지가 중복해서 표기된다. 이에 따라 그래프를 구현할 때,기억장소를 절약하려면 이미 배열에서 다루었던 삼각행렬(triangular matrix)이나,희소행렬(sparse matrix)을 이용할 수 있다. 이때 만약 비방향성 그래프를삼각행렬로 구현한다면 그래프의 탐색시간은 O(n*(n-1)/2)에 달하게 될 것이다.출처 : http://webedu.ksc.re.kr/graduate_new/data/final_group18.pdfrohhy.kangwon.ac.kr/attachment/1288774889.hwppath(경로) / length(길이)그래프 G 에서 한 쌍의 노드 v0, vn∈V 에서, n≥0 이고, 모든 0≤i≤n 에 대하여 에지(vi, vi+1)∈E 가 존재하면, 일련의 노드(v0, v1, ...., vn)을 v0 에서 vn 에 이르는 n길이(length)의 경로(path)라 한다.예를 들면 그림-1 의 2)에서 (a, b, c)는 길이가 2 인 경로이다. 이러한 경로개념은도로망, 교통망, 통신망 등에서 자주 응용되고 있다.출처 : rohhy.kangwon.ac.kr/attachment/1288774889.hwpreachability matrix(도달행렬)E 에 대한 인접행렬이 A 이고 E*에 대한 인접행렬이 A*일 때 A*은 아래의 식으로계산되며 이를G 에 대한 도달행렬(reachability matrix)이라고 한다. * A출처 : chiwoos.tistory.com/attachment/499a1f051d1269L.pptweighted digraph(가중치그래프)가 간선에 값을 부여한 그래프이고,weight of a path(가중치 그래프 내의 경로의 길이)는 경로 안의 간선의 가중치의합이라는 것이다. edge(간선) 의 가중치를 로 표기한다.
  • 9. 탐색트리에서 경로를 정하는 노드의 키 값처럼 그래프를 순행할 때 경로선택의기준을 제공하는 것으로 에지의 특성을 나타내는 가중치를 가질 수 있는데 보통그래프를 구성하는 에지의 가중치는 복합적인 에지의 속성 값으로 해석된다.인접 행렬에서 그래프 G=(V, E, W)의 가중치는 다음과 같이 정의한다.A[i, j] = w(vi, vj) : (vi, vj)∈E 의 경우 에지의 특성을 가중치로 두 노드 vi, vj간의 인접관계를 나타낸다.A[i, j] = c : 그 밖의 경우 임의의 값으로 노드간에 관계가 없음을 나타낸다.앞 프로그램 TestGraph2 클래스에 가중치 처리부분을 추가하면 다음과 같다.//인접 리스트를 통한 가중치 그래프 생성과 출력 #include <iostream.h> const int max=3; class Gnode //그래프 노드 { public: int nr; //노드의 번호 int weight; //가중치 Gnode *next; //인접노드에 대한 에지 } class Graph //그래프 연산 { public void build(Gnode *node[]) //그래프 생성 { ............
  • 10. if (n!=0) { temp->nr=j; temp->weight=n; ............. } //그래프의 에지를 (a, w, b)의 형태로 출력 public void display(Gnode *node[]) { ............. while (pt->next!=NULL) { pt=pt->next; cout<<"("<<i<<", "<<pt->weight<<", "<<pt->nr<<") "; } } } //그래프 입력자료: 0 5 0 6 0 3 0 0 0 //그래프의 출력: (0, 5, 1) (1, 6, 0) (1, 3, 2)출처 : rohhy.kangwon.ac.kr/attachment/1288774889.hwp출처 : http://www.aistudy.com/math/shortest_johnsonbaugh.htmshortest path그래프의 두 정점 간의 경로 중에서 길이가 가장 짧은 경로.[단일 시작점에서 최단 경로 구하기]
  • 11. 단일 시작점에서 최단 경로 구하기 문제는 임의의 시작점 1 개를 정하고 다른노드들 사이의 최단 경로를 구하는 경우에 사용 된다.그림을 보면 알듯이 임의의 노드 ‘A’를 먼저 선택 한다. 임의의 노드가 정해졌다면 임의의 노드에 연결된 간선 중 비용이 적게 드는 간선을 선택하여 인접노드와 연결을 하게 된다. 위의 그림에서는 노드 ‘A’에 연결된 간선(A->B)는 1,간선(A->D)는 6 이다. 여기서 간선(A->B)를 선택 하게 된다. 이렇게 인접 노드와연결이 되었다면 다시 임의의 노드와 인접 노드에 연결된 노드 중 간선의가중치가 적은 간선을 선택 하여 연결하게 되는데, 위의 그림에서 보면 노드’B’는노드 ‘A’에서 오는 간선의 가중치가 있으므로 포함하여 간선의 가중치를 계산해야 한다. (A -> D)의 비용은 6 이고, (A->B->D)의 비용은 5 이다. 이렇듯 노드로오기까지의 비용을 계산 해야 한다.출처 : http://blog.naver.com/songsmir?Redirect=Log&logNo=100117639573kth power of N2. 일 정
  • 12. 일 정 내 용 프로젝트 진행방향 토의 후 팀원의 임무분담을 정함. ‘12. 5. 16 알고리즘 구상, 소스 구현 및 프로젝트 관련 자료 수집 소스의 문제점 토의 후 해결책 제시 ‘12. 5. 23 최종보고서 작성 후 검토3. 업무분담 이 름 분 담 내 용 정진아 조장임무 및 자료조사 고충욱 알고리즘 구성 및 자료조사 김시백 보고서작성 및 자료조사 안영준 알고리즘을 바탕으로 한 소스구성 최보은 알고리즘 구성 및 자료조사4. 소 스#include <stdio.h>
  • 13. int main(){int node;//처음 입력받는 노드수char n[400][2];//입력받을 노드char no[20];//받는 노드의 종류int nod[20][2];//각 노드가 입력받은 횟수int x,y,z;//for 문용int v;//중복확인용int a=0;//노드 입력횟수용int b=0;//입력횟수 확인용char w;//잡 문자 처리용scanf("%d",&node);scanf("%c",&w);for(z=0;z<20;z++){no[z]=0;}for(x=0;x<400;x++){b++;for(y=0;y<2;y++){v=0;scanf("%c",&n[x][y]);for(z=0;z<node;z++){if(no[z]==n[x][y]){v++;
  • 14. }}if(v==0){no[a]=n[x][y];nod[a][0]=0;nod[a][1]=0;a++;}}scanf("%c",&w);if(w==n){break;}}for(x=0;x<b;x++){for(y=0;y<2;y++){for(z=0;z<node;z++){if(no[z]==n[x][y]){nod[z][y]++;}}}}printf("n");
  • 15. for(z=0;z<node;z++){printf("%c %2d %2d ",no[z],nod[z][1],nod[z][0]);if(nod[z][1]==0){printf("source");}if(nod[z][0]==0){printf("sink");}printf("n");}scanf("%d",&x);}출력결과
  • 16. 5. 회의록<1 차>회의일시 2012 년 05 월 16 일 조 D3 작성자 11 정진아 참석자 08 고충욱 09 김시백 11 안영준 11 최보은 1. 업무분담회의안건 2. 알고리즘 회의 3. 일정 계획회의내용 내 용 비 고
  • 17. 1. 업무분담 : 조장 : 정진아 자료조사 : 고충욱, 최보은 소스코딩 : 안영준 보고서 작성 : 김시백 2. 알고리즘 회의 - 입력 형식 토의 - 어떻게 결과를 나오게 할지 토의 3. 일정 계획 : 다음시간까지 자료조사 해 오기<2 차>회의일시 2012 년 05 월 23 일 조 D3 작성자 11 정진아 참석자 08 고충욱 09 김시백 11 안영준 11 최보은
  • 18. 1. 알고리즘 회의회의안건 2. 자료회의 3. 최종보고서 작성 내 용 비 고 1. 알고리즘 회의 : 문자들을 입력받고 n 을 입력받을 때 까지 저장 문자들을 받을 때 처음 받은 문자는 따로 저장 AB 가 나왔다면 A 가 앞에 나오면 A 가 지정된 2 차배열 변수 앞쪽에 +1, 뒤에 나오면 변수 뒤쪽에 +1 을 한다회의내용 출력할 때, 한 부분이라도 0 이 있으면 sink 나 source 를 출력 2. 자료회의 : 여러 용어들에 대해 숙지 3. 최종보고서 작성 : 용어들에 대해 정의 및 간단한 예시 들기 이를 토대로 보고서 작성