version 2.0

Note some clarifications will be done over the weekend 4 Nov.

so check this page at least once more in the next week.

Check at the bottom for some hints and how you can get a bonus.

1. [10] Exercise 25. 2-4 from the book. p.,531.

2. [10] Steiner problem:

a. [5] Does the competitive
ratio of the Naive algorithm change

when all edges have weight
1?

Argue/prove your answer.

b. [5] What is the
competitive ratio of the Naive if all edges

have weight 1 and the maximum
distance is at most K hops?

Prove your answer.

3. [10] Problem 26.1 page 576: Transitive closure of a dynamic
graph.

Do only:

3.1 [5] 26.1.a.
Just provide *some* polynomial algorithm and calculate

its complexity.

3.2 [5] 26.1.b.

Hint:
Give an example where by adding one edge you can achieve a

many entries in your matrix. Try to think of a case where you can have

N/2 nodes becoming able to reach N/2 nodes.

4. [10] Give an example of a weighted directed graph with negative-weight
edges, but no negative-weight cycles, such that

Dijkstra's algorithm runs incorrectly if started from some node of
the graph. (see text p. 515)

5. In the network given below, we are at the root and we want
to

establish a communication tree with all the other nodes.

Each edge has a) a delay, and b) a cost value. The delay

shows the delay in milliseconds for transferring data over the edge.

The cost is the amount in sweet US dollars that we have to pay

in order to include (lease) the edge in our communication tree.

a. [5] Assume that we are only interested in
minimizing

the total cost (in $) of the tree that we want to create.

Which algorithm should you use? Which is the tree with the minimum

cost?

Show the tree, its cost, and the order with which
the nodes join the tree

according to your algorithm. Show the tree's evolution one node at
a time.

b. [5] Assume that we are only interested in

minimizing the end-to-end delay (the delay from when you

send the data until a friend receives it) between the root

and each possible destination.

Which algorithm should you use? Which is the tree that minimizes

the end-to-end delays?

Show the tree and the order with which the nodes join the tree

according to your algorithm, and the delay that the delivery

of data towards each destination (the delay of the path on

the tree).Show the tree's evolution one node at a time.

Programming part. [50]

You are given a directed graph with positive weights. However, the meaning
of the weight is available bandwidth.

Given two points in the graph, you want to calculate the path with
the maximum bandwith. The maximum bandwidth of a path is the minimum bandwith
among each edges.

ATTENTION: YOUR PROGRAM SHOULD RUN IN LINUX ON hill.cs.

ANYTHING ELSE DOES NOT COUNT.

Also, no makefile and no report will severely reduce your
grade!!!!!

In more detail, your executable should be named "run" and it should be run as follows:

$ run < datafile

Your program should handle more than the sample data files given.

The data file should first give the total number of nodes,
the root of the tree and then pairs of nodes that are connected with an
edge:

30
// total number of nodes

5
// start node

3
// end nore

1 2
100 // edge (1, 2) with bandwidth 100

2 3
150

. . .

n1 n2 bandwidth

OUTPUT:

[5] The input graph. See samples
sample1.txt

[15] The path with maximum bandwidth:

" a -> b with
bandwith b"
for every edge of the path

[5] The maximum bandwidth

The other 25 points: are the report, the makefile, the programming style,
programming efficiency etc.

More specifically from the 25 points we have:

A.The report [15 points] is a very important file since you need
to describe

a. how you solve the problem

b. why do you think your solution is correct
(arguements not proof)

B. 5 points are given for coming up with a different algorithm
than the basic provided at the end

even if you implement the basic one. You should argue (not prove)
why your algorithm is

expected to find the correct path.

You need to have classes and methods with the name:

class Graph

Graph::calculateMaxBandPath(......)

Graph::printMaxBandPath(.....)

Graph::readInputGraph(.....)

Programs and output

Electronically: submit

a. your program ready
to compile and your executable named: run

b. your makefile

c. a README file for
instructions on how to run it

f. the report in ascii.

e. the output of your
program in the sample datasets (datasets to be provided)

A copy of your report should be given with the Part I of the assignment.

WARNING: A report that makes false claims about the program will be
considered as cheating.

An output sample that is not generated by the submitted program will also
be cosidered as cheating.

Check: http://www.cs.ucr.edu/~klick/ the links
for linux (for makefiles) and programming for

stylisitc and programming suggestions.

Hints and Bonus: (NEW)

We provide a basic algorithm that you can use.
To get full marks you have

to think of another algorithm and explain why it would work, though
you

can implement the basic. You should also explain why the basic
shold work

For bonus points [10], we should implement
your algorithm (INSTEAD of the

basic).

The basic algorithm for the programming part is the
following.

* Repeat

* Find a path from the source
to the destination

* Remove the bottleneck link
of the path from the graph

* End repeat

* Among all the paths you have identified, keep the
one with the maximum bandwidth

Note: bottleneck link of a path is the link with the minimum bandwidth