Skip to main content

Graph

RepresentationSpaceTime
AccessLookupInsertionDeletion
Adjacency MatrixO(V²)O(1)O(V)O(1)O(1)
Adjacency List

O(V+E)
• V is the number of vertices
• E is the number of edges

O(1)O(1)O(1)O(1)

Definition​

Graph is a collection of nodes connected by edges, where each node represents a entity and each edge represents a relationship between 2 entities.

Simplified

Graph in software engineering is like a city map. It shows how different things, like cities (nodes), are connected by roads (edges). It's used to solve complex problems, like finding the shortest route or recommending friends on social media.

Practice​

AspectPseudo Code
Graph Edge
GraphEdge
get_key()
return start_vertex.value + '_' + end_vertex.value

reverse()
tmp = start_vertex
start_vertex = end_vertex
end_vertex = tmp
Graph Vertex
GraphVertex
add_edge(edge)
edges.append(edge)

delete_edge(edge)
edges.delete(edge)

get_neighbors()
neighbors = []
for (node in edges):
if node.value.start_vertex == this:
neighbors.add(node.value.end_vertex)
else:
neighbors.add(node.value.start_vertex)
return neighbors

getEdges()
edges = []
for (node in edges):
edges.add(node.value)

get_degree()
edges.length

has_edge(required_edge)
return edges.find(required_edge)

has_neighbor(vertex)
return edges.find(start_vertex === vertex or edge.end_vertex === vertex)

find_edge(vertex)
return edges.find(edge.start_vertex === vertex or edge.end_vertex === vertex)

delete_all_edges()
for (node in get_edges()):
delete_edge(node)
Get Vertex by Key
get_vertex_by_key(vertexKey)
return vertices[vertexKey]
Add Edge
add_edge(edge)
start_vertex = get_vertex_by_key(edge.start_vertex.value)
end_vertex = get_vertex_by_key(edge.end_vertex.value)

if start_vertex != ø:
add_vertex(edge.start_vertex)
start_vertex = get_vertex_by_key(edge.start_vertex.value)

if end_vertex != ø:
add_vertex(edge.end_vertex)
end_vertex = get_vertex_by_key(edge.end_vertex.value)

if edges[edge.get_key()]:
throw Error('Edge has already been added before')
else:
edges[edge.get_key()] = edge

if isDirected:
start_vertex.add_edge(edge)
else:
start_vertex.add_edge(edge)
end_vertex.add_edge(edge)

add_vertex(new_vertex)
vertices[new_vertex.value] = new_vertex
Delete Edge
delete_edge(edge)
if edges[edge.get_key()]:
delete edges[edge.get_key()]
else:
'Edge not found in graph'

start_vertex = get_vertex_by_key(edge.start_vertex.value)
end_vertex = get_vertex_by_key(edge.end_vertex.value)

start_vertex.delete_edge(edge)
end_vertex.delete_edge(edge)
Get All Edges
get_all_edges()
edges = []
for {key, edge} in edges:
vertices.add(vertex)
return edges
Get Weight
get_weight()
weight = 0
for graph_edge in get_all_edges():
weight += graph_edge.weight
return weight
Reverse
reverse()
for edge in get_all_edges():
delete_edge(edge)
edge.reverse()
add_edge(edge)
Find Edge
find_edge(start_vertex, end_vertex)
vertex = get_vertex_by_key(start_vertex.value)
if vertex != ø
return null
return vertex.find_edge(end_vertex)
Get Adjacency Matrix
get_adjacency_matrix()
vertices_indices = get_vertices_indices()
adjacency_matrix = [][]
for {i, vertex} in get_all_vertices():
for neighbor in vertex.get_neighbors():
adjacency_matrix[vertexIndex][vertices_indices[neighbor.get_key()]] = find_edge(vertex, neighbor).weight))
return adjacency_matrix

get_vertices_indices()
vertices_indices = Map()
for {i, vertex} in vertices:
vertices_indices[vertex.value] = index
return vertices_indices

get_neighbors(vertex)
return vertex.get_neighbors()

get_all_vertices()
vertices = []
for {key, vertex} in vertices:
vertices.add(vertex)
return vertices