Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

digraph

유방향 간선이 있는 그래프

설명

digraph객체는간선노드를연결유방향그래프나타냅니다나타냅니다나타냅니다。digraph객체를함수를사용객체에쿼리수행하면그래프에대해자세히자세히수수수。예를,노드나간선또는제거,두두사이의최단를를확인확인,특정하거나하거나,특정특정노드나노드나간선간선수수수수수。

G = Digraph([1 1], [2 3]) e = G.Edges G = addedge(G,2,3) G = addnode(G,4) plot(G)

생성

설명

예제

G= digraph는노드나 간선이 없는 빈 유방향 graph 객체G를만듭니다.

예제

G= digraph(A)는정사각 인접 행렬A를사용유방향를합니다합니다。

  • 논리형에그래프는간선를않습니다않습니다않습니다。

  • 비논리형에그래프간선간선갖습니다갖습니다갖습니다。A의 0이 아닌 각 요소의 위치는 그래프의 간선을 지정하며, 간선의 가중치는 해당 요소의 값과 같습니다. 예를 들어,A(2,1) = 10이면G의 노드 2부터 노드 1까지 가중치가 10인 간선이 포함됩니다.

예제

G= digraph(A,NodeNames)는추가로이름지정합니다。NodeNames의요소개수는尺寸(A,1)과 같아야 합니다.

G= digraph(A,NodeTable)은테이블NodeTable을사용이름(및가능다른노드)을합니다。이테이블은A와행동일합니다합니다。테이블변수姓名을 사용하여 노드 이름을 지정합니다.

예제

G= digraph(A,___,“省略自助”)A의대각선무시자가루프가없는를합니다합니다합니다。위에구문나와있는입력를원대로하여사용할수있습니다있습니다。

예제

G= digraph(英石)는유방향 그래프 간선(s,t)를쌍하여노드타깃타깃나타냅니다나타냅니다나타냅니다。st는노드인덱스또는노드 이름을 지정할 수 있습니다.digraphG의 간선을 먼저 소스 노드를 기준으로 정렬한 다음 타깃 노드를 기준으로 정렬합니다.st와순서가 같은 간선 속성이 있는 경우 결과로 생성되는 그래프에서 간선이 동일한 방식으로 정렬되도록G = Digraph(s,t,EdgeTable)구문을하여속성전달하십시오하십시오。

예제

또한G= digraph(英石,权重)는배열权重로 간선 가중치도 지정합니다.

예제

G= digraph(英石,权重,NodeNames)는문자형구성된셀형또는또는형형형형NodeNames를사용하여 노드 이름을 추가로 지정합니다.st에는NodeNames에없는이름사용수없습니다없습니다。

G= digraph(英石,权重,NodeTable)은테이블NodeTable을사용이름(및가능다른노드)을합니다。姓名테이블변수를사용하여 노드 이름을 지정합니다.st에는NodeTable에없는이름사용수없습니다없습니다。

예제

G= digraph(英石,权重,num)은 숫자형 스칼라num으로그래프노드를합니다합니다。

G= digraph(英石,___,“省略自助”)는그래프에 자가 루프를 추가하지 않습니다. 즉,s(k) == t(k)를충족하는k는무시됩니다. 위에 열거된 구문에 나와 있는 입력 인수를 원하는 대로 조합하여 사용할 수 있습니다.

G= digraph(英石,EdgeTable,___)权重를지정하는 대신 테이블을 사용하여 간선 특성을 지정합니다.EdgeTable입력값은s에있는 요소와t에있는 요소의 각 대응 쌍에 대한 행이 포함된 테이블이어야 합니다. 테이블 변수Weight를사용간선를합니다합니다。

예제

G= digraph(EdgeTable)은테이블EdgeTable을 사용하여 그래프를 정의합니다. 이 구문에서EdgeTable의 첫 번째 변수 이름은 반드시EndNodes여야 하며, 이 변수는 그래프 간선 목록을 정의하는 2열 배열이어야 합니다.

예제

G= digraph(EdgeTable,NodeTable)은테이블NodeTable을 사용하여 그래프 노드의 이름(및 가능한 다른 노드 특성)을 추가로 지정합니다.

G= digraph(EdgeTable,___,“省略自助”)는그래프에 자가 루프를 추가하지 않습니다. 즉,edgetable.endnodes(k,1)== edgetable.endnodes(k,2)를충족하는k는무시됩니다.EdgeTable은반드시해야하며,NodeTable을선택적으로지정할수있습니다。

입력 인수

모두 확장

인접 행렬로, 비희소(Full) 형식 또는 희소 형식의 숫자형 행렬로 지정됩니다.A의 요소는 그래프의 노드 사이의 연결 네트워크(간선)를 지정합니다.A에서 0이 아닌 각 요소의 위치는 두 노드 사이의 간선을 지정합니다. 그 요소의 값은 간선 가중치를 제공합니다. 논리형 인접 행렬의 경우 비가중 그래프(Unweighted Graph)가 생성됩니다.

A의 주대각선상에 있는 0이 아닌 요소는자가 루프즉,간선으로 자기 자신에 연결되는 노드를 지정합니다. 대각선상의 요소를 무시하려면'omitselfloops'입력 옵션을 사용하십시오.

예:A = [0 1 0; 0 0 0; 5 0 0]은 3개의 노드와 2개의 간선이 있는 그래프를 설명합니다. 노드 1에서 노드 2까지의 간선은 가중치가1이며,노드3에서노드노드까지간선은가중치가가중치가5입니다。

데이터형:单身的|double|logical

노드 이름으로, 문자형 벡터로 구성된 셀형 배열 또는 string형 배열로 지정됩니다.NodeNames는길이가numnodes(G)와같아야,그래프의노드대한있지고유한을포함해야합니다합니다。

예:g = digraph(a,{'n1','n2','n3'})은 3×3 인접 행렬A에대해의노드을합니다합니다합니다。

데이터형:细胞|string

소스 노드와 타깃 노드 쌍으로, 노드 인덱스 또는 노드 이름으로 지정됩니다.digraphst의 대응하는 노드 사이에 유방향 간선을 생성합니다. s와 t는 둘 다 숫자형이거나, 둘 다 문자형 벡터, 문자형 벡터로 구성된 셀형 배열, categorical형 배열 또는 string형 배열이어야 합니다. 어떤 경우이든st의요소개수는같아야 합니다.

  • st가숫자형노드의에됩니다됩니다됩니다。숫자형노드인덱스는보다같은의정수합니다합니다합니다합니다。

  • st가문자형,문자형벡터로된셀형또는또는형형이면의이름을지정합니다합니다。그래프의Nodes속성은 노드 이름G.Nodes.Name을가진姓名변수를포함하는 테이블입니다.

  • st가 categorical형 배열인 경우st의 범주는 그래프의 노드 이름으로 사용됩니다. 여기에는s또는t의 요소가 아닌 범주도 포함될 수 있습니다.

  • st가 동일한 두 노드 사이의 다중 간선을 지정하는 경우, 결과는다중 그래프가됩니다。

다음 표에서는 숫자형 노드 인덱스 또는 노드 이름을 사용하여 하나 이상의 노드를 참조하는 몇 가지 방법을 보여줍니다.

형식 단일 노드 여러 노드
노드인덱스

스칼라

예:1

벡터

예:[1 2 3]

노드 이름

문자형벡터

예:'一个'

문자형벡터로 구성된 셀형 배열

예:{'a''b''c'}

string형 스칼라

예:"A"

字符串형배열

예:["A" "B" "C"]

categorical형 배열

예:categorical("A")

categorical형 배열

예:categorical(["A" "B" "C"])

예:g = digraph([1 2 3],[2 4 5])는5개의 노드와 3개의 간선이 있는 그래프를 생성합니다.

예:g = digraph({'波士顿''纽约''华盛顿D.'},{'纽约'新泽西州'pittsburgh'})는명명노드노드개와간선간선개개있는그래프생성합니다합니다

간선,스칼라,벡터,행렬또는배열됩니다됩니다。权重는스칼라이거나 요소 개수가st와동일한 배열이어야 합니다.

digraph는간선가중치를G.Edges속성테이블에Weight변수로합니다。그래프를가중치를추가변경하려면테이블를직접수정됩니다됩니다G.Edges.Weight = [25 50 75]').

权重를빈 배열[]로 지정하면 가중치는 무시됩니다.

예:g = digraph([1 2],[2 3],[100 200])은 3개의 노드와 2개의 간선이 있는 그래프를 생성합니다. 간선은100200의가중치가집니다。

데이터형:单身的|double

그래프 노드 개수로, 양의 정수 스칼라로 지정됩니다.numst의 가장 큰 요소보다 크거나 같아야 합니다.

예:G = Digraph([1 2],[2 3],[],5)는연결된 노드 3개와 고립된(Isolated) 노드 2개가 있는 그래프를 생성합니다.

간선정보입니다。st를지정하지 않으면EdgeTable의첫는그래프간선을정의하는하는열열행렬행렬행렬행렬행렬행렬벡터로구성된된셀형배열배열또는또는형형형형EndNodes라는이름가져야합니다。간선가중치,이이변수이그래프에서에서사용변수변수Weight를사용하십시오. 변수Weight가있는경우해당값은숫자형열벡터여야합니다. 테이블을 생성하는 방법에 대한 자세한 내용은桌子을 참조하십시오.

그래프를생성한후G.Edges를사용하여 간선 정보 테이블을 쿼리합니다.

예:EdgeTable = table([1 2; 2 3; 3 5; 4 5],'VariableNames',{'EndNodes'})

데이터형:桌子

노드정보입니다。NodeTable은그래프특성설명할변수하는수만큼수있습니다있습니다있습니다。노드이름,이변수이일부함수에서사용변수변수姓名을 사용하십시오. 변수姓名이 있는 경우 그 값은 각 행의 고유 이름을 지정하는 문자형 벡터로 구성된 셀형 배열 또는 string형 배열이어야 합니다. 테이블을 생성하는 방법에 대한 자세한 내용은桌子을 참조하십시오.

그래프를생성한후G.Nodes를사용하여 노드 정보 테이블을 쿼리합니다.

예:NodeTable = table({'a'; 'b'; 'c'; 'd'},'VariableNames',{'Name'})

데이터형:桌子

속성

모두 확장

그래프의간선으로, 테이블로 반환됩니다. 기본적으로M×1테이블이며, 여기서M은 그래프의 간선 개수입니다.G.Edges.Endnodes의 간선 목록은 먼저 소스 노드를 기준으로 정렬된 다음 타깃 노드를 기준으로 정렬됩니다.

  • 그래프에간선속성을하려면하려면边缘테이블에 새 변수를 생성하십시오.

  • 그래프에간선추가하려면添加객체 함수를 사용하고 제거하려면rmedge객체 함수를 사용하십시오.

예:G.Edges는그래프을하는테이블반환합니다합니다。

예:G.Edges.Weight는간선가중치의 숫자형 벡터를 반환합니다.

예:G.Edges.Weight = [10 20 30 55]'는그래프새간선를합니다합니다합니다。

예:g.edges.normweight = g.edges.cepter/sum(g.edges.peight)는간선의 정규화된 가중치가 포함된 테이블에 새 간선 속성을 추가합니다.

데이터형:桌子

그래프의,테이블로반환。기본적으로있는N×0테이블이며, 여기서N은 그래프의 노드 개수입니다.

  • 그래프에 새 노드 속성을 추가하려면Nodes테이블에 새 변수를 생성하십시오.

  • 그래프에 노드를 추가하려면addNode객체 함수를 사용하고 제거하려면rmnode객체 함수를 사용하십시오.

예:G.Nodes는그래프의노드속성을 나열하는 테이블을 반환합니다. 이 테이블은 기본적으로 비어 있습니다.

예:G.Nodes.Names = {'Montana', 'New York', 'Washington', 'California'}'Nodes테이블에변수姓名s를추가하여 그래프에 노드 이름을 추가합니다.

예:G.Nodes.WiFi = logical([1 0 0 1 1]')은 변수WiFiNodes테이블에 추가합니다. 이 속성은 특정 공항에서 무선 인터넷을 사용할 수 있음을 지정합니다.

데이터형:桌子

객체 함수

모두 확장

添加 그래프에 새 간선 추가
rmedge 그래프에서간선제거
Flipedge 간선 방향 반전
addNode 그래프에 새 노드 추가
rmnode 그래프에서 노드 제거
找到 그래프에서 간선 찾기
findnode 그래프에서노드찾기
numedges 그래프의간선개수
numnodes 그래프의노드개수
edgecount 두노드사이간선개수
reordernodes 그래프 노드 다시 정렬
subgraph 부분(子图)추출
中心性 노드 중요도 측정
toposort 유방향 비순환 그래프의 위상 순서(Topological Order)
transclosure 전이적폐포(传递闭合)
transreduction 전이적 축약(Transitive Reduction)
isdag 그래프가(无环)인지인지
Conncomp 그래프의성분(连接的组件)
condensation 그래프 응축
maxflow 그래프의최대 흐름(Maximum Flow)
isisomorphic 두그래프가동형인지확인
同构 두그래프의동형사상계산
iSmultraph 그래프에 다중 간선이 있는지 여부 확인
简化 다중 그래프를 단순 그래프(simple graph)로 만들기
bfsearch 너비 우선 그래프 탐색(Breadth-first Graph Search)
dfsearch 깊이우선그래프(深度优先图)
shortestpath 두 단일 노드 사이의 최단 경로
shortestpathtree 노드의최단트리
distances 모든노드의최단경로거리
allpaths Find all paths between two graph nodes
hascycles Determine whether graph contains cycles
allcycles Find all cycles in graph
adjacency 그래프인접(邻接矩阵)
incidence 그래프 결합 행렬(Incidence Matrix)
入度 노드의 진입차수
outdegree 노드의 진출차수(Outdegree)
前任 선행노드(前任)
successors 후속 노드(Successor)
nearest 반지름 내 최근접이웃
inedges 노드로의 진입 간선
outedges 노드의 진출 간선
plot 그래프노드와플로팅하기

예제

모두 축소

3개의 노드와 3개의 간선이 있는digraph객체를만듭니다。한간선은은에서에서노드노드노드로로연결연결이고이고이고이고이고이고은은은은노드은노드노드에서에서에서노드노드노드노드노드노드노드노드노드노드노드노드노드노드의의의의의의의의의연결연결이며이며,세세이며이며세세세세세번째간선간선간선은은은은노드노드노드노드노드노드노드노드노드노드노드노드노드2。

g = digraph([1 1 2],[2 3 1])
G = Digraphwith properties: Edges: [3x1 table] Nodes: [3x0 table]

그래프의간선테이블을 확인합니다. 유방향 그래프의 경우, 첫 번째 열은 각 간선의 소스 노드를 나타내고 두 번째 열은 타깃 노드를 나타냅니다.

G.Edges
ans=3×1 table末日________ 1 2 1 3 2 1

그래프에 노드 이름을 추가한 다음 새 노드와 간선 테이블을 확인합니다. 이제 각 간선의 소스 노드와 타깃 노드가 해당 노드 이름을 사용하여 표시됩니다.

g.nodes.name = {'一个''b''C'} ';G.Nodes
ans=3×1 table姓名_____ {'A'} {'B'} {'C'}
G.Edges
ans=3×1 tableEndNodes ______________ {'A'} {'B'} {'A'} {'C'} {'B'} {'A'}

Nodes테이블과边缘테이블에 추가 변수를 추가하거나 수정하여 그래프 노드나 간선의 특성을 설명할 수 있습니다. 그러나, 이러한 테이블을 수정하여 그래프의 노드나 간선의 개수를 직접 변경할 수는 없습니다. 대신,添加,rmedge,addNode,rmnode함수등을 사용하여 그래프의 노드나 간선 개수를 수정할 수 있습니다.

예를들어,2와노드노드사이그래프간선추가하고새간선목록을합니다합니다。

G = addedge(G,2,3)
G = Digraphwith properties: Edges: [4x1 table] Nodes: [3x1 table]
G.Edges
ans=4×1 tableEndNodes ______________ {'A'} {'B'} {'A'} {'C'} {'B'} {'A'} {'B'} {'C'}

차수가 4인 완전한 유방향 그래프를 생성하는 대칭 인접 행렬A를만듭니다. 가중치 없이 그래프를 생성하려면 논리형 인접 행렬을 사용하십시오.

a =一个(4) -  diag([1 1 1 1 1])
A =4×40 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0
G = Digraph(A~=0)
G = Digraphwith properties: Edges: [12x1 table] Nodes: [4x0 table]

그래프의간선목록을 확인합니다.

G.Edges
ans=12×1桌末日________ 1 2 1 3 1 4 2 1 2 3 2 4 3 1 3 2 3 4 4 1 4 2 4 3

인접 행렬을 만듭니다.

a =魔术(4);a(a> 10)= 0
A =4×40 2 3 0 5 0 10 8 9 7 6 0 4 0 0 1

인접행렬을명명노드가있는를합니다합니다합니다。'omitselfloops'를지정하여A의 대각선상에 있는 요소를 무시합니다.

names = {'alpha''beta''gamma''delta'};g = digraph(a,名称,'omitselfloops')
G =具有属性的Digraph:边缘:[8x2表]节点:[4x1表]

간선정보노드를합니다합니다。

G.Edges
ans=8×2 tableEndNodes Weight ______________________ ______ {'alpha'} {'beta' } 2 {'alpha'} {'gamma'} 3 {'beta' } {'alpha'} 5 {'beta' } {'gamma'} 10 {'beta' } {'delta'} 8 {'gamma'} {'alpha'} 9 {'gamma'} {'beta' } 7 {'delta'} {'alpha'} 4
G.Nodes
ans=4×1 table姓名_________ {'alpha'} {'beta' } {'gamma'} {'delta'}

각간선노드을사용정육면체그래프생성하고합니다합니다합니다。

s = [1 1 1 2 2 3 4 5 5 6 7];t = [2 4 8 3 7 4 6 5 6 8 7 8];g = digraph(s,t)
G = Digraphwith properties: Edges: [12x1 table] Nodes: [8x0 table]
plot(G,'Layout','force')

图包含一个轴对象。轴对象包含类型图形图的对象。

각간선노드을사용정육면체그래프생성하고합니다합니다합니다。별도의으로이름과간선를합니다합니다합니다。

s = [1 1 1 2 2 3 4 5 5 6 7];t = [2 4 8 3 7 4 6 5 6 8 7 8];权重= [10 10 1 10 1 10 1 1 12 12 12 12]; names = {'一个''b''C''D''E''F''G''H'};G = Digraph(S,T,权重,名称)
G = Digraphwith properties: Edges: [12x2 table] Nodes: [8x1 table]
plot(G,'Layout','force','EdgeLabel',g.edges.

图包含一个轴对象。轴对象包含类型图形图的对象。

각간선끝목록을사용하여그래프그래프(加权图)를생성합니다。10개개의가포함함지정합니다합니다합니다합니다。

s = [1 1 1 1 1]; t = [2 3 4 5 6]; weights = [5 5 5 6 9]; G = digraph(s,t,weights,10)
G = Digraphwith properties: Edges: [5x2 table] Nodes: [10x0 table]

그래프를 플로팅합니다. 추가 노드는 주 연결성분과 연결되어 있지 않습니다.

plot(G)

图包含一个轴对象。轴对象包含类型图形图的对象。

빈digraph객체G를만듭니다.

G = Digraph;

그래프에 3개의 노드와 3개의 간선을 추가합니다.st의 대응 요소가 간선의 소스 노드와 타깃 노드를 정의합니다.添加는적절한 노드를 그래프에 자동으로 추가합니다(아직 없는 경우).

s = [1 2 1];t = [2 3 3];g =添加(g,s,t)
G = Digraphwith properties: Edges: [3x1 table] Nodes: [3x0 table]

간선 목록을 확인합니다. 각 행은 그래프의 간선을 설명합니다.

G.Edges
ans=3×1 table末日________ 1 2 1 3 2 3

최적의 성능을 구현하려면digraph에대한 단일 호출을 사용하여 그래프를 한 번에 모두 생성하십시오. 루프에 노드나 간선을 추가하면 큰 그래프의 경우 속도가 느려질 수 있습니다.

변수EndNodes,Weight,代码가 포함된 간선 테이블을 만듭니다. 그런 다음 변수姓名Country가포함노드을만듭니다。각테이블는노드와간선속성지정합니다합니다합니다。

s = [1 1 1 2 2 3];t = [2 3 4 3 4 4];权重= [6 6.5 7 11.5 12 17]';代码= {'1/44''1/49''1/33''44/49''44/33''49/33'} ';EdgeTable = table([s' t'],weights,code,...'variablenames',{'endnodes''重量''代码'})
EdgeTable=6×3 tableEndNodes Weight Code ________ ______ _________ 1 2 6 {'1/44' } 1 3 6.5 {'1/49' } 1 4 7 {'1/33' } 2 3 11.5 {'44/49'} 2 4 12 {'44/33'} 3 4 17 {'49/33'}
names = {'美国''gbr''DEU''FRA'} ';country_code = {'1''44''49''33'} ';NodeTable = table(names,country_code,'variablenames',{'Name''Country'})
NodeTable=4×2 table姓名Country _______ _______ {'USA'} {'1' } {'GBR'} {'44'} {'DEU'} {'49'} {'FRA'} {'33'}

노드 테이블과 간선 테이블을 사용하여 그래프를 생성합니다. 노드 레이블과 간선 레이블로 국가 코드를 사용하여 그래프를 플로팅합니다.

G = Digraph(EdgeTable,NodeTable); plot(G,'NodeLabel',G.Nodes.Country,'EdgeLabel',G.Edges.Code)

图包含一个轴对象。轴对象包含类型图形图的对象。

확장 기능

버전 내역

R2015b에 개발됨

모두 확장

R2018A에서동작됨됨