The document describes a final project assignment to design and implement a SocialGraph class that extends an existing Graph class and adds social network-specific methods like calculating centrality and clustering, as well as a driver program to test the SocialGraph class by building a social graph from input data and allowing users to select operations. Students are to write code for the SocialGraph and driver classes based on the specifications provided and test their implementation using sample input/output examples.
1. Buy here:
http://theperfecthomework.com/cmsc-350-final-project/
Social Graphs - An Application of Graphs
1. Specification
The concept of Social Graph was introduced by M. Zuckerberg at the first Facebook F8
conference in 2007 when he introduced the Facebook platform to model relationships
among internet users
Part 1
Consider the attached file Graph.java which defines a generic undirected Graph class.
Design and implement a class SocialGraph (in a separate source file SocialGraph.java)
which extends the class Graph. In a social graph, the vertices (graph nodes) represent
people names while the un-directed edges represent the acquaintance relationships
between them. Class SocialGraph should define constructor(s) and enhance the behavior of
the class Graph by defining the following social graphs’ specific methods
normalizedDegreeOfCentrality calculates and returns the normalized degree of centrality for
a given
vertex v. The required value is calculated as:
degree(v) / (n-1)
where degree(v) represents the number of vertex incident edges and n represents the
number of graph vertices.
For social graphs, a high degree of centrality for a person v reflects his/her dominant position
in the group or
his/her social interaction skills.
2. numberOfTrianglesIncidentToVertex, calculates and returns the number of triangles incident
to vertex v. The
algorithm below calculates the number of triangles incident for all graph vertices (V is the set
of vertices, E is the
set of edges):
foreach v in V
foreach pair of vertices (p, q) in AdjacencyList(v)
if (p, q) is in E then add 1 to triangles[v]
listOfTrianglesIncidentToVertex calculates and returns the list of triangles incident to vertex
v.
A triangle should be specified by its vertices.
clusterIndividual for a given vertex v, calculates and returns the percentage indicating how
close its neighbors
are to make a complete graph and is calculated as:
[(number of edges connecting v's neighbor vertices) / (number of edges, potentially
connecting v's neighbor
vertices)] * 100
where:
- the number of edges connecting v’s neighbor vertices is calculated as:
(number of triangles incident to vertex v)
- the number of edges, potentially connecting v's neighbor vertices is calculated as:
[degree(v) * (degree(v) - 1)] / 2
3. This value measures how close wrapped are the persons in the social graph around the
given person.
averageClustering for the social graph is calculated as (the sum applies to all vertices v in
V):
(1 / n) * ∑ clusterIndividual (v)
This value indicates the overall density of the social graph.
isAcquaintance determines whether two persons supplied as parameters can establish
social contact direct or
through a chain of transitive acquaintance relationships (in terms of graphs it means that
there is a path
between the two nodes representing the two persons).
Part 2
Design and implement a driver program TestSocialGraph (in a separate source file
TestSocialGraph.java) for testing the methods implemented in Part 1. The driver program
should build a social graph from an input file data.txt. After building the social graph, in a
loop, the program should invite the user to select for execution one of the following
operations: (1) normalizedDegreeOfCentrality, (2) numberOfTrianglesIncidentToVertex, (3)
listOfTrianglesIncidentToVertex, (4) clusterIndividual, (5) averageClustering, (6)
isIndirectAcquaintance, (7) addVertex, (8) addEdge, (9) printEdges and (0) exit the loop and
the program. As a result of each operation execution, relevant information should be
displayed to the user. For example, as a result of invoking clusterIndividual method, the
cluster individual value for the given person should be displayed.
An example of the data input file content, its format and the corresponding social graph
layout is shown in the attached file SocialGraph_Example.pdf.
The programs should compile without errors.
Notes.
4. 1. You may consider that there are no errors in the input file structure.
2. If an operation requires additional information, the user will be prompted to enter it.
3. The input file (a simple .txt file) should be generated by the students using a simple text
editor such as Notepad.
4. Person names (instead of indices) should be used in I/O operations involved by the user
interface