10月26日TIL/DataStructure Graph
11269 ワード
グラフィック
グラフィックは、ノード(ノード、または頂点-頂点-)とノードを接続する幹線(edge)から構成されます.グラフィックは方向なしでよい.これは、幹線で接続された2つのノードが対称である可能性があることを意味する.一方,方向性(directed)を有する可能性があり,これは非対称関係を意味する.今回の印刷では、方向図がありません.
グラフィック用語
ノード(node) : 頂点(vertice)とも呼ばれ、通常ノードはデータを格納します.
幹線(edge):リンク、arcsとも呼ばれ、ノード間の関係を表す
隣接する頂点(隣接する頂点) : 幹線で接続された頂点.上図では、ノードAとノードBを隣接頂点と呼ぶことができる
単純パス(simple-path):パスに重複する頂点はなく、同じ幹線を通るパスはありません.
次(degree):図中の1つの頂点に隣接する頂点の数がありません.上の図Aの差は3です.
入場回数(出局回数)/入場回数(入局回数) : 方向図で使用される用語
入場回数 1つのノードから外に出る幹線の数で、
インバウンド数 外部ノードからのルート数
グラフィックタイプ
グラフィックの実装
図形の表現方式は隣接行列と隣接リストの2つの方式に分けることができる.
隣接リスト
隣接行列
グラフィックメソッド
「グラフィック」(Graph)メソッドの実装 /* Undirected Graph */
class Graph {
constructor() {
/*
* ex)
* nodes = {
* 0: [ 1, 2 ],
* 1: [ 0 ],
* 2: [ 0 ]
* }
*/
this.nodes = {};
}
addNode(node) {
//addNode(node) - 그래프에 노드를 추가합니다.
this.nodes[node] = this.nodes[node] || [];
}
contains(node) {
//contains(node) - 그래프에 해당 노드가 존재하는지 여부를 반환합니다.
if(this.nodes[node]) {
return true;
}
return false;
}
removeNode(node) {
//removeNode(node) - 그래프에서 노드를 삭제합니다.
if(!this.nodes[node]) {
return undefined;
} else {
if(this.nodes[node].length !== 0) {
for(let edge of this.nodes[node]) {
this.removeEdge(node, edge);
}
}
delete this.nodes[node];
return this.nodes;
}
}
hasEdge(fromNode, toNode) {
//hasEdge(fromNode, toNode) - fromNode와 toNode 사이의 간선 존재 여부를 반환합니다.
for(let i of this.nodes[fromNode]) {
if(i === toNode) {
return true;
}
}
return false;
}
addEdge(fromNode, toNode) {
//addEdge(fromNode, toNode) - fromNode와 toNode 사이의 간선을 추가합니다.
this.nodes[fromNode].push(toNode);
this.nodes[toNode].push(fromNode);
}
removeEdge(fromNode, toNode) {
//removeEdge(fromNode, toNode) - fromNode와 toNode 사이의 간선을 삭제합니다.
delete this.nodes[fromNode].pop(toNode);
delete this.nodes[toNode].pop(fromNode);
}
}
module.exports = Graph;
Reference
この問題について(10月26日TIL/DataStructure Graph), 我々は、より多くの情報をここで見つけました
https://velog.io/@feelslikemmmm/10월-26일-TIL-DataStructure-Graph
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
/* Undirected Graph */
class Graph {
constructor() {
/*
* ex)
* nodes = {
* 0: [ 1, 2 ],
* 1: [ 0 ],
* 2: [ 0 ]
* }
*/
this.nodes = {};
}
addNode(node) {
//addNode(node) - 그래프에 노드를 추가합니다.
this.nodes[node] = this.nodes[node] || [];
}
contains(node) {
//contains(node) - 그래프에 해당 노드가 존재하는지 여부를 반환합니다.
if(this.nodes[node]) {
return true;
}
return false;
}
removeNode(node) {
//removeNode(node) - 그래프에서 노드를 삭제합니다.
if(!this.nodes[node]) {
return undefined;
} else {
if(this.nodes[node].length !== 0) {
for(let edge of this.nodes[node]) {
this.removeEdge(node, edge);
}
}
delete this.nodes[node];
return this.nodes;
}
}
hasEdge(fromNode, toNode) {
//hasEdge(fromNode, toNode) - fromNode와 toNode 사이의 간선 존재 여부를 반환합니다.
for(let i of this.nodes[fromNode]) {
if(i === toNode) {
return true;
}
}
return false;
}
addEdge(fromNode, toNode) {
//addEdge(fromNode, toNode) - fromNode와 toNode 사이의 간선을 추가합니다.
this.nodes[fromNode].push(toNode);
this.nodes[toNode].push(fromNode);
}
removeEdge(fromNode, toNode) {
//removeEdge(fromNode, toNode) - fromNode와 toNode 사이의 간선을 삭제합니다.
delete this.nodes[fromNode].pop(toNode);
delete this.nodes[toNode].pop(fromNode);
}
}
module.exports = Graph;
Reference
この問題について(10月26日TIL/DataStructure Graph), 我々は、より多くの情報をここで見つけました https://velog.io/@feelslikemmmm/10월-26일-TIL-DataStructure-Graphテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol