prim 알고리즘

13
PRIM 알알알알

Upload: brand

Post on 05-Jan-2016

58 views

Category:

Documents


3 download

DESCRIPTION

PRIM 알고리즘. n=input(' 노드의 갯수를 입력하세요 .'); A = randint(n,n,[1,100]); - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: PRIM  알고리즘

PRIM 알고리즘

Page 2: PRIM  알고리즘

n=input(' 노드의 갯수를 입력하세요 .');A = randint(n,n,[1,100]);for a1=1:n

for a2=a1+1:n %if A(a1,a2)>=60

A(a1,a2)=inf;endA(a2,a1)=A(a1,a2);

end A(a1,a1)=0;

end disp(' 인접행렬 생성 !')Adisp(' 유망한 집합 P1 생성 !')P1=ones(1,n) P2=ones(1,n); P3=ones(1,n); P4=ones(1,n-1); for c=1:n-1

min1=inf; for b1=1:n

if (A(1,b1)~=0)&&(min1>A(1,b1))min1=A(1,b1); inx=b1;

end end disp(' 유망한 집합 P1!')P1(1,c+1)=inx for b2=1:n

if (A(1,b2)==inf)&&(A(inx,b2)==inf)A(1,b2)=inf;

elseif A(1,b2)>A(inx,b2)

A(1,b2)=A(inx,b2);inxif b2~=inx

P2(1,b2)=inxend

end end

endP3(1,c:n-1)=P2(1,c:n-1);disp(' 연결노드 P4!')P4(1,c)=P3(1,inx)disp(' 합친행렬표시 ')A

end

짜쟌

Page 3: PRIM  알고리즘

전반적 디자인 준비

인접행렬 생성 결과값을 출력할 행렬 생성

최소비용 신장 트리 구하기 출발점에서 비용이 가장 적게 드는 노드

찾기 찾은 노드를 해집합에 합치기

Page 4: PRIM  알고리즘

준비 - 인접행렬 생성

n=input(' 노드의 갯수를 입력하세요 .');

A = randint(n,n,[1,100]);

힘들었다 ! 노드수가 증가하면 수 범위를 넓히는 것이 좋다 .그렇지 않으면 , 같은 비용을 가지는 이음선이 많아져서 후반부에는 노드가 순차적으로 나열되게 된다 .

Page 5: PRIM  알고리즘

준비 - 인접행렬 생성

for a1=1:nfor a2=a1+1:n

if A(a1,a2)>=60A(a1,a2)=inf;

end A(a2,a1)=A(a1,a2);

end A(a1,a1)=0;

end disp(' 인접행렬 생성 !')A

Page 6: PRIM  알고리즘

준비 - 인접행렬 생성 a1 a2 A(a1,a2) A(a2, a1)

1 2 (1, 2) (2. 1)

1 3 (1, 3) (3, 1)

1 4 (a2 = n)

(1, 4) (4, 1)

2 3 (2, 3) (3, 2)

2 4 (a2 = n)

(2, 4) (4, 2)

3 4 (a2 = n)

(3, 4) (4, 3)

4 X X X

1, 1

1, 2

1, 3

1, 4

2, 1

2, 2

2, 3

2, 4

3, 1

3, 1

3, 3

3, 4

4, 1

4, 2

4, 3

4, 4

Page 7: PRIM  알고리즘

준비 - 결과값을 출력할 행렬 생성

처음 시작은 노드 1 이므로 초기값은 1

P1: 1xn 행렬 ( 노드 추가 순서 ) P2: 1xn 행렬 ( 해집합 안의 어느 노드에서

연결하는지 ) P3: 1xn 행렬 ( 유망한 노드에 최소비용으로

연결하는 노드 ) P4: 1x(n-1) 행렬 ( 어느 노드에서

연결하는지 최종적으로 나타낸다 )

Page 8: PRIM  알고리즘

MST 구하기 – 출발점에서비용이 가장 적게 드는 노드 찾기

단순한 2 중 for 문 사용 찾은 최소비용 노드의 인덱스는 P(1,2)

부터 차례로 저장된다 - P(1,1) 은 1 로 초기화 되어 있다

Page 9: PRIM  알고리즘

MST 구하기 – 출발점에서비용이 가장 적게 드는 노드 찾기

disp(' 유망한 집합 P1 생성 !')P1=ones(1,n) P2=ones(1,n); P3=ones(1,n);P4=ones(1,n-1);

Page 10: PRIM  알고리즘

MST 구하기 – 출발점에서비용이 가장 적게 드는 노드 찾기 for c=1:n-1

min1=inf; for b1=1:n

if (A(1,b1)~=0)&&(min1>A(1,b1))min1=A(1,b1);

inx=b1; end

end

disp(' 유망한 집합 P1!')P1(1,c+1)=inx

Page 11: PRIM  알고리즘

MST 구하기 – 찾은 노드를 해집합에 합치기 해집합에 들어간 노드는 검색할

노드에서는 뺀다 ( 순환이 생기지 않게 ). 추가하려는 노드에 연결된 노드가 여러

개일 때 최소 가중치로 연결된 것 선택

그 노드에 연결되어있고 , 해집합에 들어있는 노드의 가중치를 비교해서 작은 값을 취하게 하면 위 두 문제를 해결

Page 12: PRIM  알고리즘

MST 구하기 – 찾은 노드를 해집합에 합치기

for c=1:n-1 최소 비용 노드 찾기for b2=1:n

if (A(1,b2)==inf)&&(A(inx,b2)==inf)A(1,b2)=inf;

elseif A(1,b2)>A(inx,b2)

A(1,b2)=A(inx,b2);inxif b2~=inx

P2(1,b2)=inx end

endend

end

Page 13: PRIM  알고리즘

MST 구하기 – 찾은 노드를 해집합에 합치기

P3(1,c:n-1)=P2(1,c:n-1);disp(' 연결노드 P4!')P4(1,c)=P3(1,inx)

disp(' 합친행렬표시 ')A

end