SlideShare une entreprise Scribd logo
1  sur  18
Project #5:

통신망에서 길 찾기




                   조 : D3

              조장 : 2011 정진아
조원 : 2008 고충욱

                 2009 김시백

                 2011 안영준

                 2011 최보은



                차 례

1. 프로젝트 설명




2. 일 정




3. 업무분담
4. 소 스



5. 회의록




1. 프로젝트 설명

directed graph(방향그래프)

한   쌍의   노드간에    방향성을   갖는   에지로   연결된   그래프를   소위   방향성

그래프(directed graph: Digraph)라 하는데, 이는 모든 에지에 대하여 한 쌍의

노드가 정돈되어 있는 그래프이다. 즉 v1, v2∈V ⇒ (v1, v2)≠(v2, v1)의 특성을
갖는 그래프이다. 이때 (v1, v2)에서 v1 은 v2 의 꼬리(tail)라하고, v2 는 v1 의

머리(head)라 한다.




                                                     <그림-1> 그래프의 유형

출처 : rohhy.kangwon.ac.kr/attachment/1288774889.hwp
precedes / antecedent(선조)

트리(tree)의 특정한 노드에 대해 관계가 있는 노드들을 나타내는 용어. 여기서

특정 노드의 선조는 트리의 근 노드에서 해당 노드까지의 경로 상에 있는 모든

노드를 말한다.

출처 : http://terms.naver.com/entry.nhn?docId=815129

indegree

외부에서 내부로 들어오는 간선들의 수
outdegree

내부에서 외부로 들어오는 간선들의 수
source
내부에서 외부로 나가는 간선들만 존재




sink
외부에서 내부로 들어오는 간선들만 존재
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    2


0    0 1 0
1   1 0 1

2   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++)
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)에 달한다.
한편 비방향성 그래프인 경우에는 행렬의 대각선을 중심으로 에지의 관계가

대칭을 이루기 때문에 에지가 중복해서 표기된다. 이에 따라 그래프를 구현할 때,

기억장소를 절약하려면 이미 배열에서 다루었던 삼각행렬(triangular matrix)이나,

희소행렬(sparse matrix)을 이용할 수               있다. 이때 만약           비방향성 그래프를

삼각행렬로 구현한다면 그래프의 탐색시간은 O(n*(n-1)/2)에 달하게 될 것이다.

출처 : http://webedu.ksc.re.kr/graduate_new/data/final_group18.pdf
rohhy.kangwon.ac.kr/attachment/1288774889.hwp
path(경로) / 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.hwp
reachability matrix(도달행렬)

E 에 대한 인접행렬이 A 이고 E*에 대한 인접행렬이 A*일 때 A*은 아래의 식으로
계산되며 이를
G 에 대한 도달행렬(reachability matrix)이라고 한다.


                                                      *
               A
출처 : chiwoos.tistory.com/attachment/499a1f051d1269L.ppt
weighted digraph(가중치그래프)가 간선에 값을 부여한 그래프이고,
weight of a path(가중치 그래프 내의 경로의 길이)는 경로 안의 간선의 가중치의
합이라는 것이다. edge(간선)                     의 가중치를 로 표기한다.
탐색트리에서 경로를 정하는 노드의 키 값처럼 그래프를 순행할 때 경로선택의

기준을 제공하는 것으로 에지의 특성을 나타내는 가중치를 가질 수 있는데 보통

그래프를 구성하는 에지의 가중치는 복합적인 에지의 속성 값으로 해석된다.

인접 행렬에서 그래프 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[]) //그래프 생성

    { ............
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.htm

shortest path
그래프의 두 정점 간의 경로 중에서 길이가 가장 짧은 경로.

[단일 시작점에서 최단 경로 구하기]
단일 시작점에서 최단 경로 구하기 문제는 임의의 시작점 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=100117639573

kth power of N


2. 일 정
일 정                            내 용

                     프로젝트 진행방향 토의 후 팀원의 임무분담을 정함.
 ‘12. 5. 16
                     알고리즘 구상, 소스 구현 및 프로젝트 관련 자료 수집

                     소스의 문제점 토의 후 해결책 제시
 ‘12. 5. 23
                     최종보고서 작성 후 검토


3. 업무분담

     이 름                        분 담 내 용

    정진아               조장임무 및 자료조사


    고충욱               알고리즘 구성 및 자료조사


    김시백               보고서작성 및 자료조사


    안영준               알고리즘을 바탕으로 한 소스구성


    최보은               알고리즘 구성 및 자료조사


4. 소 스
#include <stdio.h>
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++;
}

}

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");
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);

}


출력결과
5. 회의록
<1 차>


회의일시 2012 년 05 월 16 일      조      D3   작성자   11 정진아

 참석자    08 고충욱 09 김시백 11 안영준 11 최보은

        1. 업무분담

회의안건 2. 알고리즘 회의

        3. 일정 계획


회의내용                      내 용                  비 고
1. 업무분담

        : 조장 : 정진아

        자료조사 : 고충욱, 최보은

        소스코딩 : 안영준

        보고서 작성 : 김시백

        2. 알고리즘 회의

        - 입력 형식 토의

        - 어떻게 결과를 나오게 할지 토의

        3. 일정 계획

        : 다음시간까지 자료조사 해 오기




<2 차>


회의일시 2012 년 05 월 23 일      조      D3   작성자   11 정진아

 참석자    08 고충욱 09 김시백 11 안영준 11 최보은
1. 알고리즘 회의

회의안건 2. 자료회의

     3. 최종보고서 작성


                       내 용                    비 고




     1. 알고리즘 회의

     : 문자들을 입력받고 n 을 입력받을 때 까지 저장

     문자들을 받을 때 처음 받은 문자는 따로 저장

     AB 가 나왔다면 A 가 앞에 나오면 A 가 지정된 2 차배열

     변수 앞쪽에 +1, 뒤에 나오면 변수 뒤쪽에 +1 을 한다

회의내용 출력할 때, 한 부분이라도 0 이 있으면 sink 나 source 를

     출력

     2. 자료회의

     : 여러 용어들에 대해 숙지

     3. 최종보고서 작성

     : 용어들에 대해 정의 및 간단한 예시 들기

     이를 토대로 보고서 작성

Contenu connexe

Tendances

이산수학 C1 프로젝트 4
이산수학 C1 프로젝트 4이산수학 C1 프로젝트 4
이산수학 C1 프로젝트 4pkok15
 
2012 Dm A0 04 Pdf
2012 Dm A0 04 Pdf2012 Dm A0 04 Pdf
2012 Dm A0 04 Pdfkd19h
 
2012 Ds A1 05
2012 Ds A1 052012 Ds A1 05
2012 Ds A1 05seonhyung
 
Coder’s High 2014 풀이
Coder’s High 2014 풀이Coder’s High 2014 풀이
Coder’s High 2014 풀이Baekjoon Choi
 
이산치5보고서
이산치5보고서이산치5보고서
이산치5보고서KimChangHoen
 
Project#1파스칼 삼각형
Project#1파스칼 삼각형Project#1파스칼 삼각형
Project#1파스칼 삼각형Kimjeongmoo
 
자료구조 01 최종 보고서
자료구조 01 최종 보고서자료구조 01 최종 보고서
자료구조 01 최종 보고서pkok15
 
[C++ Korea 2nd Seminar] Ranges for The Cpp Standard Library
[C++ Korea 2nd Seminar] Ranges for The Cpp Standard Library[C++ Korea 2nd Seminar] Ranges for The Cpp Standard Library
[C++ Korea 2nd Seminar] Ranges for The Cpp Standard LibraryDongMin Choi
 
자료구조 프로젝트
자료구조 프로젝트자료구조 프로젝트
자료구조 프로젝트hyungoh kim
 
String Searching Algorithms
String Searching AlgorithmsString Searching Algorithms
String Searching Algorithmsskku_npc
 
Computational Complexity
Computational ComplexityComputational Complexity
Computational Complexityskku_npc
 

Tendances (19)

자료구조05
자료구조05자료구조05
자료구조05
 
자료구조05
자료구조05자료구조05
자료구조05
 
이산수학04
이산수학04이산수학04
이산수학04
 
이산수학 C1 프로젝트 4
이산수학 C1 프로젝트 4이산수학 C1 프로젝트 4
이산수학 C1 프로젝트 4
 
2012 Dm A0 04 Pdf
2012 Dm A0 04 Pdf2012 Dm A0 04 Pdf
2012 Dm A0 04 Pdf
 
2012 Ds A1 05
2012 Ds A1 052012 Ds A1 05
2012 Ds A1 05
 
Coder’s High 2014 풀이
Coder’s High 2014 풀이Coder’s High 2014 풀이
Coder’s High 2014 풀이
 
이산치5보고서
이산치5보고서이산치5보고서
이산치5보고서
 
Java standard(8~13)
Java standard(8~13)Java standard(8~13)
Java standard(8~13)
 
2012 Ds 01
2012 Ds 012012 Ds 01
2012 Ds 01
 
강의자료3
강의자료3강의자료3
강의자료3
 
자료구조01
자료구조01자료구조01
자료구조01
 
자료구조01
자료구조01자료구조01
자료구조01
 
Project#1파스칼 삼각형
Project#1파스칼 삼각형Project#1파스칼 삼각형
Project#1파스칼 삼각형
 
자료구조 01 최종 보고서
자료구조 01 최종 보고서자료구조 01 최종 보고서
자료구조 01 최종 보고서
 
[C++ Korea 2nd Seminar] Ranges for The Cpp Standard Library
[C++ Korea 2nd Seminar] Ranges for The Cpp Standard Library[C++ Korea 2nd Seminar] Ranges for The Cpp Standard Library
[C++ Korea 2nd Seminar] Ranges for The Cpp Standard Library
 
자료구조 프로젝트
자료구조 프로젝트자료구조 프로젝트
자료구조 프로젝트
 
String Searching Algorithms
String Searching AlgorithmsString Searching Algorithms
String Searching Algorithms
 
Computational Complexity
Computational ComplexityComputational Complexity
Computational Complexity
 

En vedette

Universidad fermín toro diapositivas
Universidad fermín toro diapositivasUniversidad fermín toro diapositivas
Universidad fermín toro diapositivasJOSEYENIBORGES
 
数学之美与浪潮之巅
数学之美与浪潮之巅数学之美与浪潮之巅
数学之美与浪潮之巅wangqunbaidu
 
Activitat 11
Activitat 11Activitat 11
Activitat 11jgalan33
 
자료구조 Project4
자료구조 Project4자료구조 Project4
자료구조 Project4KoChungWook
 
Activitat 11
Activitat 11Activitat 11
Activitat 11jgalan33
 
Story board
Story boardStory board
Story board10ggo
 
Geometry Unit Slideshow
Geometry Unit SlideshowGeometry Unit Slideshow
Geometry Unit Slideshowmrsfrasure
 
Equations & Expressions Sub Unit B
Equations & Expressions Sub Unit BEquations & Expressions Sub Unit B
Equations & Expressions Sub Unit Bmrsfrasure
 
Social Media to Enable Sales for Natwest Summer Time Talk
Social Media to Enable Sales for Natwest Summer Time TalkSocial Media to Enable Sales for Natwest Summer Time Talk
Social Media to Enable Sales for Natwest Summer Time TalkJane Frankland
 
"Getting Creative with Social Media" BlogPaws Presentation
"Getting Creative with Social Media" BlogPaws Presentation"Getting Creative with Social Media" BlogPaws Presentation
"Getting Creative with Social Media" BlogPaws Presentationdogtipper
 
이산치수학 Project6
이산치수학 Project6이산치수학 Project6
이산치수학 Project6KoChungWook
 
Presentatie 26 juni 2012 boven ij ziekenhuis
Presentatie 26 juni 2012 boven ij ziekenhuisPresentatie 26 juni 2012 boven ij ziekenhuis
Presentatie 26 juni 2012 boven ij ziekenhuisrenskepat
 
이산치수학 Project2
이산치수학 Project2이산치수학 Project2
이산치수학 Project2KoChungWook
 
자료구조 Project1
자료구조 Project1자료구조 Project1
자료구조 Project1KoChungWook
 
자료구조 Project2
자료구조 Project2자료구조 Project2
자료구조 Project2KoChungWook
 
이산치수학 Project7
이산치수학 Project7이산치수학 Project7
이산치수학 Project7KoChungWook
 
Make It Happen - AWE Summitt 14 (Zurich)
Make It Happen - AWE Summitt 14 (Zurich)Make It Happen - AWE Summitt 14 (Zurich)
Make It Happen - AWE Summitt 14 (Zurich)Jane Frankland
 
Universidad fermín toro diapositivas
Universidad fermín toro diapositivasUniversidad fermín toro diapositivas
Universidad fermín toro diapositivasJOSEYENIBORGES
 

En vedette (20)

Universidad fermín toro diapositivas
Universidad fermín toro diapositivasUniversidad fermín toro diapositivas
Universidad fermín toro diapositivas
 
Budget 2013
Budget 2013Budget 2013
Budget 2013
 
Klik today
Klik todayKlik today
Klik today
 
数学之美与浪潮之巅
数学之美与浪潮之巅数学之美与浪潮之巅
数学之美与浪潮之巅
 
Activitat 11
Activitat 11Activitat 11
Activitat 11
 
자료구조 Project4
자료구조 Project4자료구조 Project4
자료구조 Project4
 
Activitat 11
Activitat 11Activitat 11
Activitat 11
 
Story board
Story boardStory board
Story board
 
Geometry Unit Slideshow
Geometry Unit SlideshowGeometry Unit Slideshow
Geometry Unit Slideshow
 
Equations & Expressions Sub Unit B
Equations & Expressions Sub Unit BEquations & Expressions Sub Unit B
Equations & Expressions Sub Unit B
 
Social Media to Enable Sales for Natwest Summer Time Talk
Social Media to Enable Sales for Natwest Summer Time TalkSocial Media to Enable Sales for Natwest Summer Time Talk
Social Media to Enable Sales for Natwest Summer Time Talk
 
"Getting Creative with Social Media" BlogPaws Presentation
"Getting Creative with Social Media" BlogPaws Presentation"Getting Creative with Social Media" BlogPaws Presentation
"Getting Creative with Social Media" BlogPaws Presentation
 
이산치수학 Project6
이산치수학 Project6이산치수학 Project6
이산치수학 Project6
 
Presentatie 26 juni 2012 boven ij ziekenhuis
Presentatie 26 juni 2012 boven ij ziekenhuisPresentatie 26 juni 2012 boven ij ziekenhuis
Presentatie 26 juni 2012 boven ij ziekenhuis
 
이산치수학 Project2
이산치수학 Project2이산치수학 Project2
이산치수학 Project2
 
자료구조 Project1
자료구조 Project1자료구조 Project1
자료구조 Project1
 
자료구조 Project2
자료구조 Project2자료구조 Project2
자료구조 Project2
 
이산치수학 Project7
이산치수학 Project7이산치수학 Project7
이산치수학 Project7
 
Make It Happen - AWE Summitt 14 (Zurich)
Make It Happen - AWE Summitt 14 (Zurich)Make It Happen - AWE Summitt 14 (Zurich)
Make It Happen - AWE Summitt 14 (Zurich)
 
Universidad fermín toro diapositivas
Universidad fermín toro diapositivasUniversidad fermín toro diapositivas
Universidad fermín toro diapositivas
 

Similaire à 이산치수학 Project5

자료구조 그래프 보고서
자료구조 그래프 보고서자료구조 그래프 보고서
자료구조 그래프 보고서mil23
 
자료구조5보고서
자료구조5보고서자료구조5보고서
자료구조5보고서KimChangHoen
 
5통신망에서 길 찾기
5통신망에서 길 찾기5통신망에서 길 찾기
5통신망에서 길 찾기herojoon1378
 
Project#5 통신망에서 길 찾기 Hwp
Project#5 통신망에서 길 찾기 HwpProject#5 통신망에서 길 찾기 Hwp
Project#5 통신망에서 길 찾기 HwpKimjeongmoo
 
자료구조 Project5
자료구조 Project5자료구조 Project5
자료구조 Project5KoChungWook
 
Project#5 최단거리 찾기 D0 Hwp
Project#5 최단거리 찾기 D0 HwpProject#5 최단거리 찾기 D0 Hwp
Project#5 최단거리 찾기 D0 HwpKimjeongmoo
 
[Swift] Data Structure - Graph
[Swift] Data Structure - Graph[Swift] Data Structure - Graph
[Swift] Data Structure - GraphBill Kim
 
[Swift] Data Structure - Graph(BFS)
[Swift] Data Structure - Graph(BFS)[Swift] Data Structure - Graph(BFS)
[Swift] Data Structure - Graph(BFS)Bill Kim
 
사회 연결망의 링크 예측
사회 연결망의 링크 예측사회 연결망의 링크 예측
사회 연결망의 링크 예측Kyunghoon Kim
 
프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기Jongwook Choi
 
자료구조 트리 보고서
자료구조 트리 보고서자료구조 트리 보고서
자료구조 트리 보고서mil23
 
이산치4보고서
이산치4보고서이산치4보고서
이산치4보고서KimChangHoen
 
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)Tae Young Lee
 
Data Structure 2
Data Structure 2Data Structure 2
Data Structure 2yonsei
 
2012 Ds B2 05
2012 Ds B2 052012 Ds B2 05
2012 Ds B2 05chl132435
 
2012 Ds B2 02 Pdf
2012 Ds B2 02 Pdf2012 Ds B2 02 Pdf
2012 Ds B2 02 Pdfkd19h
 
2012 Ds B2 02
2012 Ds B2 022012 Ds B2 02
2012 Ds B2 02chl132435
 

Similaire à 이산치수학 Project5 (20)

자료구조 그래프 보고서
자료구조 그래프 보고서자료구조 그래프 보고서
자료구조 그래프 보고서
 
자료구조5보고서
자료구조5보고서자료구조5보고서
자료구조5보고서
 
5통신망에서 길 찾기
5통신망에서 길 찾기5통신망에서 길 찾기
5통신망에서 길 찾기
 
Project#5 통신망에서 길 찾기 Hwp
Project#5 통신망에서 길 찾기 HwpProject#5 통신망에서 길 찾기 Hwp
Project#5 통신망에서 길 찾기 Hwp
 
자료구조 Project5
자료구조 Project5자료구조 Project5
자료구조 Project5
 
Project#5 최단거리 찾기 D0 Hwp
Project#5 최단거리 찾기 D0 HwpProject#5 최단거리 찾기 D0 Hwp
Project#5 최단거리 찾기 D0 Hwp
 
[Swift] Data Structure - Graph
[Swift] Data Structure - Graph[Swift] Data Structure - Graph
[Swift] Data Structure - Graph
 
[Swift] Data Structure - Graph(BFS)
[Swift] Data Structure - Graph(BFS)[Swift] Data Structure - Graph(BFS)
[Swift] Data Structure - Graph(BFS)
 
사회 연결망의 링크 예측
사회 연결망의 링크 예측사회 연결망의 링크 예측
사회 연결망의 링크 예측
 
자료구조01
자료구조01자료구조01
자료구조01
 
프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기
 
자료구조 트리 보고서
자료구조 트리 보고서자료구조 트리 보고서
자료구조 트리 보고서
 
이산치4보고서
이산치4보고서이산치4보고서
이산치4보고서
 
자구5번
자구5번자구5번
자구5번
 
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)
 
Data Structure 2
Data Structure 2Data Structure 2
Data Structure 2
 
2012 Ds B2 05
2012 Ds B2 052012 Ds B2 05
2012 Ds B2 05
 
자구2번
자구2번자구2번
자구2번
 
2012 Ds B2 02 Pdf
2012 Ds B2 02 Pdf2012 Ds B2 02 Pdf
2012 Ds B2 02 Pdf
 
2012 Ds B2 02
2012 Ds B2 022012 Ds B2 02
2012 Ds B2 02
 

이산치수학 Project5

  • 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.hwp precedes / antecedent(선조) 트리(tree)의 특정한 노드에 대해 관계가 있는 노드들을 나타내는 용어. 여기서 특정 노드의 선조는 트리의 근 노드에서 해당 노드까지의 경로 상에 있는 모든 노드를 말한다. 출처 : http://terms.naver.com/entry.nhn?docId=815129 indegree 외부에서 내부로 들어오는 간선들의 수 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 2 0 0 1 0
  • 6. 1 1 0 1 2 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.pdf rohhy.kangwon.ac.kr/attachment/1288774889.hwp path(경로) / 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.hwp reachability matrix(도달행렬) E 에 대한 인접행렬이 A 이고 E*에 대한 인접행렬이 A*일 때 A*은 아래의 식으로 계산되며 이를 G 에 대한 도달행렬(reachability matrix)이라고 한다. * A 출처 : chiwoos.tistory.com/attachment/499a1f051d1269L.ppt weighted 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.htm shortest 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=100117639573 kth power of N 2. 일 정
  • 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++;
  • 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. 최종보고서 작성 : 용어들에 대해 정의 및 간단한 예시 들기 이를 토대로 보고서 작성