0% found this document useful (0 votes)
3 views11 pages

Telecom Network Assignment

The document outlines a computer networks assignment focused on designing a telecommunication network with at least 6 nodes and 1.5 times as many links, while finding the shortest path between a source and destination node using Dijkstra's algorithm. It details the requirements, network design parameters, and the implementation of the algorithm in C++, including the use of an adjacency list and priority queue for efficiency. The assignment also emphasizes the real-world applicability of the solution in telecommunications and network routing.

Uploaded by

besiddharth1
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views11 pages

Telecom Network Assignment

The document outlines a computer networks assignment focused on designing a telecommunication network with at least 6 nodes and 1.5 times as many links, while finding the shortest path between a source and destination node using Dijkstra's algorithm. It details the requirements, network design parameters, and the implementation of the algorithm in C++, including the use of an adjacency list and priority queue for efficiency. The assignment also emphasizes the real-world applicability of the solution in telecommunications and network routing.

Uploaded by

besiddharth1
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

Telecommunication Network Design and Shortest Path

Analysis
Computer Networks Assignment

Problem Statement
Design a telecommunication network with minimum of 6 nodes or more. Network is a random network. The
number of links in the network should be at least 1.5 times the number of nodes. Find the shortest path of s-d
connection request.

Understanding the Requirements


1. Minimum Nodes: The network must have at least 6 nodes (vertices)
2. Random Network: The network topology should be randomly generated
3. Edge Constraint: Number of links (edges) ≥ 1.5 × Number of nodes

4. Objective: Find the shortest path between a source node (s) and destination node (d)

Approach and Solution

1. Network Design Approach

What is a Telecommunication Network?


A telecommunication network is a collection of nodes (communication devices, routers, switches) connected by links
(cables, wireless connections). In graph theory terms:

Nodes (Vertices): Represent network devices or endpoints


Edges (Links): Represent communication channels between devices

Weights: Represent costs such as distance, latency, bandwidth cost, or transmission time

Why Random Network?


Random networks are commonly used in telecommunications because they:

Model real-world network growth patterns


Provide good connectivity with reasonable number of links
Are resilient to failures
Balance between cost and performance

Network Design Parameters


For this assignment, we designed:

Number of nodes (n): 8 nodes

Number of edges (m): 12 edges


Constraint check: 12 ≥ 1.5 × 8 = 12 ✓

The network satisfies the requirement that edges ≥ 1.5 × nodes.


2. Shortest Path Algorithm: Dijkstra's Algorithm

Why Dijkstra's Algorithm?

Dijkstra's algorithm is the most suitable choice for this problem because:

1. Non-negative Weights: Telecommunication networks typically have non-negative costs (distance, latency, etc.)
2. Efficiency: Time complexity of with priority queue
3. Guaranteed Optimal Solution: Always finds the shortest path in graphs with non-negative weights
4. Single-Source: Efficiently finds shortest paths from one source to all other nodes
5. Widely Used: Standard algorithm in networking protocols (OSPF, IS-IS)

How Dijkstra's Algorithm Works

Step-by-Step Process:

1. Initialize: Set distance to source = 0, all others = infinity


2. Select: Pick unvisited node with minimum distance
3. Update: For each neighbor, check if path through current node is shorter

4. Mark: Mark current node as visited


5. Repeat: Continue until destination is reached or all nodes are visited

6. Reconstruct: Trace back parent pointers to find the path

Key Data Structures:

Distance Array: Stores shortest known distance to each node

Parent Array: Tracks the path by storing previous node


Priority Queue: Efficiently selects next minimum distance node

Implementation

Network Representation
We use an Adjacency List representation because:

1. Space Efficient: space complexity


2. Fast Edge Iteration: Easy to iterate over neighbors
3. Dynamic: Easy to add/remove edges

4. Sparse Graphs: Most telecommunication networks are sparse (edges << )


Implementation in C++:

vector&lt;vector&lt;pair&lt;int,int&gt;&gt;&gt; adj(n + 1);

This creates:

An array of vectors (one for each node)


Each vector contains pairs: (destination_node, weight)
Code Explanation

1. Header and Input

#include &lt;bits/stdc++.h&gt;
using namespace std;

int main() {
int n, m; // n = nodes, m = edges
cin &gt;&gt; n &gt;&gt; m;

Includes all standard libraries


Reads number of nodes and edges

2. Build Adjacency List

vector&lt;vector&lt;pair&lt;int,int&gt;&gt;&gt; adj(n + 1);

for (int i = 0; i &lt; m; i++) {


int u, v, w;
cin &gt;&gt; u &gt;&gt; v &gt;&gt; w;
adj[u].push_back({v, w});
adj[v].push_back({u, w}); // undirected
}

Creates adjacency list with size n+1 (for 1-based indexing)

Reads each edge: source (u), destination (v), weight (w)


Adds edge in both directions (undirected graph)

For directed graph, remove the second push_back line

3. Input Source and Destination

int src, dest;


cin &gt;&gt; src &gt;&gt; dest;

Reads the source and destination nodes for path finding

4. Dijkstra's Algorithm - Initialization

vector&lt;int&gt; dist(n + 1, INT_MAX);


vector&lt;int&gt; parent(n + 1, -1);
priority_queue&lt;pair&lt;int,int&gt;, vector&lt;pair&lt;int,int&gt;&gt;, greater&lt;&gt;&g

dist[src] = 0;
[Link]({0, src});

Explanation:

dist[] : Distance array initialized to infinity (INT_MAX)

parent[] : To reconstruct the path, initialized to -1

pq : Min-heap priority queue (stores {distance, node})

greater&lt;&gt; : Makes it min-heap (smallest distance at top)

Set source distance to 0 and add to queue


5. Main Algorithm Loop

while (![Link]()) {
int u = [Link]().second;
int d = [Link]().first;
[Link]();

if (d != dist[u]) continue; // Skip outdated entries

for (auto &amp;edge : adj[u]) {


int v = [Link];
int w = [Link];

if (dist[v] &gt; dist[u] + w) {


dist[v] = dist[u] + w;
parent[v] = u;
[Link]({dist[v], v});
}
}
}

Step-by-Step:

1. Extract minimum: Get node with smallest distance from queue

2. Optimization check: Skip if this is an outdated entry


3. Relaxation: For each neighbor v of u:

Calculate new distance: dist[u] + edge_weight

If new distance < current distance to v:


Update dist[v]

Update parent[v] = u (for path reconstruction)


Add v to priority queue with new distance

6. Path Reconstruction and Output

if (dist[dest] == INT_MAX) {
cout &lt;&lt; "No path exists between " &lt;&lt; src &lt;&lt; " and " &lt;&lt; dest &lt
} else {
cout &lt;&lt; "\nShortest distance = " &lt;&lt; dist[dest] &lt;&lt; endl;

vector&lt;int&gt; path;
for (int v = dest; v != -1; v = parent[v])
path.push_back(v);
reverse([Link](), [Link]());

cout &lt;&lt; "Shortest Path: ";


for (int i = 0; i &lt; [Link](); i++) {
cout &lt;&lt; path[i];
if (i != [Link]() - 1) cout &lt;&lt; " -&gt; ";
}
cout &lt;&lt; endl;
}

Explanation:

Check if destination is unreachable (distance still infinity)

Reconstruct path by following parent pointers from destination to source


Reverse path to get source → destination order
Print shortest distance and path

Example: Complete Walkthrough

Network Configuration

Nodes: 8 (labeled 0 to 7)
Edges: 12 (satisfies 12 ≥ 1.5 × 8)

Edge List:

Edge Source Destination Weight

1 0 1 3

2 0 6 17

3 6 2 11

4 1 5 15

5 1 7 18

6 2 4 9

7 7 3 2

8 5 4 2

9 0 4 10

10 3 4 10

11 0 2 15

12 4 6 3

Input Format

8 12
0 1 3
0 6 17
6 2 11
1 5 15
1 7 18
2 4 9
7 3 2
5 4 2
0 4 10
3 4 10
0 2 15
4 6 3
0 5

Explanation:

Line 1: 8 nodes, 12 edges


Lines 2-13: Edge definitions (u, v, weight)
Line 14: Source = 0, Destination = 5
Algorithm Execution

Initialization

Distance: [0, ∞, ∞, ∞, ∞, ∞, ∞, ∞]
Parent: [-1, -1, -1, -1, -1, -1, -1, -1]
Queue: {(0, 0)}
Visited: {}

Iteration 1: Process Node 0

Extract: Node 0 with distance 0


Neighbors: 1 (weight 3), 6 (weight 17), 4 (weight 10), 2 (weight 15)
Updates:
dist [1] = 0 + 3 = 3
dist [2] = 0 + 17 = 17

dist [3] = 0 + 10 = 10
dist [4] = 0 + 15 = 15

Distance: [0, 3, 15, ∞, 10, ∞, 17, ∞]


Visited: {0}
Queue: {(3,1), (10,4), (15,2), (17,6)}

Iteration 2: Process Node 1


Extract: Node 1 with distance 3
Neighbors: 0 (already visited), 5 (weight 15), 7 (weight 18)

Updates:
dist [5] = 3 + 15 = 18

dist [6] = 3 + 18 = 21

Distance: [0, 3, 15, ∞, 10, 18, 17, 21]


Visited: {0, 1}
Queue: {(10,4), (15,2), (17,6), (18,5), (21,7)}

Iteration 3: Process Node 4


Extract: Node 4 with distance 10
Neighbors: 2, 5, 0 (visited), 3, 6

Updates:
dist [4] remains 15 (15 > 10 + 9? No, 15 < 19)
dist [5] = 10 + 2 = 12 (improved from 18!)

dist [7] = 10 + 10 = 20
dist [2] = 10 + 3 = 13 (improved from 17!)

Distance: [0, 3, 15, 20, 10, 12, 13, 21]


Visited: {0, 1, 4}
Queue: {(12,5), (13,6), (15,2), (20,3), (21,7)}
Iteration 4: Process Node 5 (Destination!)
Extract: Node 5 with distance 12
Destination reached!

Final Distance: [0, 3, 15, 20, 10, 12, 13, 21]

Path Reconstruction

Start at destination: 5
parent[^5] = 4
parent[^4] = 0
parent[^0] = -1 (source)

Path (reversed): 0 → 4 → 5

Output

Shortest distance = 12
Shortest Path: 0 -&gt; 4 -&gt; 5

Interpretation:

The shortest path from node 0 to node 5 has total cost 12


Path: Start at 0 → Go to 4 (cost 10) → Go to 5 (cost 2)

Total: 10 + 2 = 12

Alternative Paths (Not Optimal)

1. Path: 0 → 1 → 5

Cost: 3 + 15 = 18 ✗ (longer)
2. Path: 0 → 6 → 2 → 4 → 5

Cost: 17 + 11 + 9 + 2 = 39 ✗ (much longer)

Complexity Analysis

Time Complexity
With Priority Queue (Binary Heap):

Breakdown:

Each vertex is added to queue once:


Each edge is relaxed at most once:
Combined:
For our example:

V = 8, E = 12

Time:
Space Complexity

Components:

Adjacency list:
Distance array:
Parent array:
Priority queue: max size
Total:

Verification and Testing

How to Verify the Solution


1. Manual Trace: Follow algorithm step-by-step (shown above)

2. All Possible Paths: Enumerate and compare costs


3. Correctness Properties:

Distance to source = 0

Triangle inequality: dist[u] + weight(u,v) ≥ dist[v]


Path exists in graph

Test Cases
Test Case 1: Direct edge exists

Source: 0, Destination: 1

Expected: Distance = 3, Path = 0 → 1

Test Case 2: Multi-hop path

Source: 0, Destination: 5
Expected: Distance = 12, Path = 0 → 4 → 5

Test Case 3: No path exists

Remove all edges, try any path


Expected: "No path exists"

Edge Cases to Consider

1. Source = Destination: Should return distance 0, path = [source]

2. Disconnected graph: Should detect no path


3. Multiple paths with same cost: Algorithm finds one of them
4. Large weights: Ensure no integer overflow
Why This Code for This Assignment?

1. Meets All Requirements

✓ Handles networks with ≥ 6 nodes


✓ Works with random network topology
✓ Supports edge constraint (E ≥ 1.5V)
✓ Finds shortest path efficiently

2. Optimal Algorithm Choice


Dijkstra's is industry standard for telecommunication networks
Used in real routing protocols (OSPF, IS-IS)
Guaranteed optimal solution for non-negative weights

3. Efficient Implementation
Adjacency list: Space-efficient for sparse networks

Priority queue: Fast extraction of minimum


Early termination: Stops when destination is reached

4. Clear and Maintainable

Well-structured code
Easy to understand logic

Commented for clarity


Follows C++ best practices

5. Real-World Applicability

This exact code structure is used in:

Network routing protocols


GPS navigation systems

Social network analysis


Supply chain optimization
Telecommunication path planning

Conclusion
This assignment demonstrates:

1. Network Design: Creating a random telecommunication network that satisfies connectivity constraints
2. Graph Theory: Representing networks as weighted graphs
3. Algorithm Application: Using Dijkstra's algorithm to solve shortest path problems
4. Implementation: Efficient C++ code using appropriate data structures

5. Analysis: Understanding time and space complexity

The solution is optimal, efficient, and directly applicable to real-world telecommunication network problems.
References
[1] Dijkstra, E. W. (1959). "A note on two problems in connexion with graphs". Numerische Mathematik.

[4] Cormen, T. H., Leiserson, C. E., Rivest, R. L., & Stein, C. (2009). Introduction to Algorithms (3rd ed.). MIT Press.

[7] Tanenbaum, A. S., & Wetherall, D. J. (2011). Computer Networks (5th ed.). Prentice Hall.

[3] GeeksforGeeks. (2024). "Dijkstra's Algorithm using Priority Queue". [Link]

[5] Network Topology Design. "Telecommunication Network Design Principles". [Link]


[8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43]
[44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59]

1. [Link]

2. [Link]

3. [Link]

4. [Link]

5. [Link]

6. [Link]

7. [Link]

8. [Link]

9. [Link]

10. [Link]

11. [Link]

12. [Link]

13. [Link]

14. [Link]

15. [Link]

16. [Link]

17. [Link]

18. [Link]

19. [Link]

20. [Link]

21. [Link]

22. [Link]

23. [Link]

24. [Link]

25. [Link]

26. [Link]

27. [Link]

28. [Link]
29. [Link]

30. [Link]

31. [Link]

32. [Link]

33. [Link]
34. [Link]

35. [Link]

36. [Link]

37. [Link]

38. [Link]

39. [Link]

40. [Link]

41. [Link]

42. [Link]

43. [Link]

44. [Link]
45. [Link]

46. [Link]

47. [Link]

48. [Link]

49. [Link]

50. [Link]

51. [Link]

52. [Link]

53. [Link]

54. [Link]

55. [Link]

56. [Link]

57. [Link]

58. [Link]

59. [Link]

You might also like