[Algorithm] JavaScript Graph Data Structure

Posted Answer1215

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Algorithm] JavaScript Graph Data Structure相关的知识,希望对你有一定的参考价值。

A graph is a data structure comprised of a set of nodes, also known as vertices, and a set of edges. Each node in a graph may point to any other node in the graph. This is very useful for things like describing networks, creating related nonhierarchical data, and as we will see in the lesson, describing the relationships within one‘s family.

 

In a Graph, there are Nodes, and connects between nodes are Edges.

 

For node:

function createNode(key) {
    let children = [];
    return {
        key,
        children, // the nodes which connect to
        addChild(child) {
            children.push(child)
        }
    }
}

 

Graph:

function createGraph(directed = false) {
    const nodes = [];
    const edges = [];

    return {
        nodes,
        edges,
        directed,

        addNode(key) {
            nodes.push(createNode(key))
        },

        getNode (key) {
            return nodes.find(n => n.key === key)
        },

        addEdge (node1Key, node2Key) {
            const node1 = this.getNode(node1Key);
            const node2 = this.getNode(node2Key);

            node1.addChild(node2);

            if (!directed) {
                node2.addChild(node1);
            }

            edges.push(`${node1Key}${node2Key}`)
        },

        print() {
            return nodes.map(({children, key}) => {
                let result = `${key}`;

                if (children.length) {
                    result += ` => ${children.map(n => n.key).join(‘ ‘)}`
                }

                return result;
            }).join(‘
‘)
        }
    }
}

 

Run:

const graph = createGraph(true)

graph.addNode(‘Kyle‘)
graph.addNode(‘Anna‘)
graph.addNode(‘Krios)
graph.addNode(‘Tali‘)

graph.addEdge(‘Kyle‘, ‘Anna‘)
graph.addEdge(‘Anna‘, ‘Kyle‘)
graph.addEdge(‘Kyle‘, ‘Krios‘)
graph.addEdge(‘Kyle‘, ‘Tali‘)
graph.addEdge(‘Anna‘, ‘Krios‘)
graph.addEdge(‘Anna‘, ‘Tali‘)
graph.addEdge(‘Krios‘, ‘Anna‘)
graph.addEdge(‘Tali‘, ‘Kyle‘)

console.log(graph.print())

/*
Kyle => Anna Krios Tali
Anna => Kyle Krios Tali
Krios => Anna
Tali => Kyle
*/

 

以上是关于[Algorithm] JavaScript Graph Data Structure的主要内容,如果未能解决你的问题,请参考以下文章

[Algorithm] Median Maintenance algorithm implementation using TypeScript / JavaScript

[Algorithm] Maximum Contiguous Subarray algorithm implementation using TypeScript / JavaScript

[Algorithm] JavaScript Graph Data Structure

2019年11月Github上最热门的JavaScript项目

没有外部库的 JavaScript 自动完成

javascript数组常用的遍历方法