Data Structures

Document Sample

```					                                       Last Updated: 12/30/2011 3:05:24 PM

CMPS 2153-Data Structures

Test 2 – Take Home

HONOR CODE

I ______________________________ have neither given nor received
assistance from anyone.

I realize that if my answers come close to resembling that of another
student and/or digital source, where this resemblance is based on the
judgment of the instructor, I can be given a score of zero.

Student Signature:________________________________

Student M Number:_______________________________

Turn your completed take home exam by Monday, April 12, 2010. Your completed exam will not have ANY
handwritten portions (except your signature) whatsoever and will not be graded if it does.
Last Updated: 12/30/2011 3:05:24 PM

1. Give the appropriate matrix and list implementations using the above graph.

2. Give a depth and breadth first search starting at ‘A’ and choosing next vertices based on alphabetical
order. Explain the implementations of each (data structures used, etc.).

3. Suppose you have a directed graph representing all the flights that an airline flies. What algorithm
might be used to find the best sequence of connections from one city to another? If we just wanted to
find out if there was a flight from one city to another, would you use the same algorithm? Explain and
justify why you would or wouldn’t.

4. Which graph representation allows the most efficient determination of the existence of a particular
edge in a graph? Explain and justify.
Last Updated: 12/30/2011 3:05:24 PM

5. Write some c++ code that would implement the backend of the following interface, with the resulting
structure. Our goal here is to create a randomly generated graph with the constraints specified by the
user. You must use the given definitions below:
The following input:
Could create the following structure:

Dynamic Structure Generator
---------------------------------

Enter   max   nodes: 5
Enter   max   links per node: 4
Enter   max   data value: 15
Enter   the   seed for srand():34345

Press any key to continue...

Given:

struct Node{
int Id;
int Data;
vector<int> Edges;
};

vector <Node*> Graph;

To add a Node to the Graph you can use:
Node *Temp = new node;
Temp->Id = 0;
Temp->Data = rand()%15;
Graph.push_back(Temp);

You can access this newly added node by using the following syntax:
Graph[0].something

For example, to add an edge to vertex 0:
Graph[0].Edges.push_back(3);

Where 3 is the id of the vertex being connected to Vertex 0
Last Updated: 12/30/2011 3:05:24 PM

6. Using the graph below, design a greedy algorithm that will traverse the graph given a source node S and a sink
node T, and traverse the graph in a greedy fashion (with largest edge weight being the greedy choice), until one
of three things happens:
 Your stuck with edge to leave on.
 You found the sink node T.

0   San Francisco ->[1,45]
1   LA
2   San Diego           ->[1,45]
3   Chicago             ->[7,20]->[0,25]
4   Dallas              ->[1,80]->[2,90]
5   Miami               ->[4,50]
6   New York            ->[3,75]->[7,100]->[4,125]->[5,90]
7   Denver              ->[0,75]->[1,100]

For example, if the S = New York and T = L.A. you would traverse in this fashion:
 New York -> Dallas (125 > 75,100,90)
 Dallas -> San Diego (90 > 80)
 San Diego -> L.A. (only edge)

Using the list based implementation shown above, and assuming a graph definition similar to problem 5, write
your greedy algorithm in C++ like pseudo code.
Last Updated: 12/30/2011 3:05:24 PM

7. Describe and justify Dijkstra’s algorithm for finding the shortest path between two vertices in a directed graph
with non-negative lengths associated with its edges. In your justification, I want you to give me a weak proof
(in your own words) of why Dijkstra’s gives the optimal solution.

8. How may Djikstra's algorithm be modified to determine if it is possible to get from a given vertex to
all other vertices in the graph?

9. A directed graph of n nodes numbered 1, 2, . . . , n can be represented by an n × n adjacency matrix G1, where
G1[i, j] is true if there is an edge connecting node i to node j, and G1[i, j] is false otherwise.

By extension, define Gk to be that matrix such that Gk[i, j] is true if there is a path of length <= k connecting
node i to node j, and Gk[i, j] is false otherwise.

Describe an algorithm to generate G2 from G1 using C++ like pseudo code.

10. Insert these keys into an AVL Tree: 342, 206, 444, 523, 607, 301, 142, 183, 102, 157, 149, illustrating
the problematic insertions.

11. Describe the AVL Tree’s insert method and explain why its insertion time complexity is still of the
same order as a Binary Tree. What are the differences between an AVL Tree and a Binary Tree?
When would you use an AVL Tree?
Last Updated: 12/30/2011 3:05:24 PM

Label the balancing factor for each               Insert 60 into the following tree:
node in the following tree

Insert 60 into the following tree:              Insert 5 into the following tree:

```
DOCUMENT INFO
Shared By:
Categories:
Tags:
Stats:
 views: 7 posted: 12/30/2011 language: English pages: 6