Graph Algorithms

I have a project that I need to be implemented in C. It requires an implementation of a given priority queue specification and then using that to implement 4 algorithms: BFS, Bellman-Ford, Dijkstra’s and A*.

Project files have been given and it just requires the interfaces in pq.h and sp_algorithms.h to be implemented and ap.c to have its functionality completed. There are additional tests that need to pass to check the code works well (Provided).

FULL Description:

Intended Learning Outcomes (ILOs)
Upon successful completion of this lab, you will be able to

explain the various shortest path algorithms and their advantages/disadvantages

use existing data structures in your algorithms

combine existing data structures to get new functionality

write C code for the above concepts

use a test-driven development approach for algorithms and data structures

Assignment
Summary: Implement the interfaces specified in pq.h, sp_algorithms.h , and the functionality described in ap.c.

General Notes
Unless otherwise specified, its fine to over-estimate required array sizes to avoid dynamic re-allocation. For example, the queue required for BFS can be implemented as array with a size of num_nodes. This is the worst-case space required, but in most cases, significantly less nodes will be required, such that a dynamically growing queue would be more efficient (but also more complicated to implement1)

Try to program in a modular way. Do not duplicate functionality, but move it to own functions. Also, do not artificially inline unrelated functionality (for example, priority queue operations should not go inline into Dijkstras algorithm!). This only makes the algorithms complicated to read, and does not even bring efficiency advantages, as modern compilers are very good at automatically inlining themselves.

The assignment comes with a test-generator , which will test your data-structures and algorithms on randomly generated input data. Use this to test each module in isolation, before you build modules depending on it! Its much simpler to debug Dijkstras algorithms if you know that your priority queue is correct!

Also, feel free to modify the tests, e.g., to generate additional output useful for debugging your problem, or to pin down a particular bug. You can use the msg and assertmsg macros, that accept printf format strings.

Have a look at for the tests that we will run on your submission!

Min-Heaps
The elements of the heap will be nodes (node_t = unsigned integer). The priorities are given by an array D from nodes to weights (see weights.h for the available operations on weights)..

You have already seen a heap data structure, implemented by a tree encoded into an array. In this assignment, you will extend this idea to support an efficient operation to decrease the priority of a node that is already on the heap, as well as an efficient check whether a node is on the heap. For this, you maintain an additional mapping from nodes to heap-indexes. After decreasing a nodes priority, you use its heap-index to start a sift-up operation.

The file specifies the interface, including the required complexities for most operations. The file provides some suggestions how to implement the operations. You are free to follow them, or do your own implementation from scratch.

Shortest Paths Algorithms
The file specifies basic graph operations. The file provides an interface how to return results for single-source shortest path algorithms. You have to implement:

BFS, that ignores the weights and returns paths with minimal number of edges.

Bellman-Ford. First, dont care about negative weight cycles. Once you have got the algorithm correct for this case, you can try to correctly handle negative weight cycles: If, after |V|1 steps, you can still relax edges, set their target nodes distance to . Continue (for at most |V|1 more steps) until all nodes reachable via negative weight cycles have distance . However, do not update the predecessor map in this second phase!

Dijkstra. This will need a working priority queue implementation.

A*. We strongly recommend to implement this after Dijkstra! You can assume a monotone heuristics, such that it will be very similar to Dijkstra.

The Airport Example
In this example you will work on a graph generated from the openflight database, that encodes connections between airports on the world.

Your task is to implement a (DFS) based algorithm to count the number of airports that can be reached from a given start airport, and to compute shortest routes between two given airports. Use your graph algorithms!

See for the interface, and for a description what to implement. Exactly stick to the output format described there!

Systematic literature search

Essay 2000 words plus 10-15 references (Vancouver reference style is preferred)
– The project should be presented in the form of a scientific report that is to be considered for publication in a scientific journal, i.e. make use of subheadings, tables, figures, etc. Figures and tables should have legends. Figure and table legends, abstracts, and references do not count towards the word limit. 

Self-Reflection

Reflect on your experience in the course.

Synthesize the following:

Finding Your True North: A Personal Guide
Complexity Leadership: Enabling People and Organizations for Adaptability
Your newly-emerged insights on authentic leadership and teaming
Use Template provided in the writing tools I posted in “Course introduction and Materials”.

Write a 900- to 1200-word article that addresses the following:

Who am I as a leader?
What is my leadership purpose?
How can I remain authentic?
What insights from the course will you use immediately, and what strategies will you have to work on?
make sure you connect it to reputable references.
This is still an academic paper, so APA and academic tone are critical (See writing helps and expectations)
Make sure you access and read the rubric.

Make sure you read the writing rubric along with the writing tools I posted in “Course introduction and Materials”. Your grade will be based on this rubric.

Cite at least two reputable references to support your article (e.g., trade or industry publications, government or agency websites, scholarly works, or other sources of similar quality).

Wk 6 Individual Assignment: Course Project: Part 2

Create a 10-minute, 7- to 9-slide voice-over presentation using either Microsoft PowerPoint or websites such as Google Slides, Adobe Slate, or Prezi. The presentation will cover the volunteer opportunity you completed for this course. Consider the following as you create your presentation:

At which organization did you volunteer?
What did volunteering entail?
Did you meet with any leader of the organization?
Explain how the volunteering ties to your leadership purpose.
Include references as this is still an academic exercise.
Make sure you use writing tools I posted in “Course introduction and Materials”. Your grade will be based on these expectations.

If you elected to interview:

Create a 10-minute, 7- to 9-slide voice-over presentation using either Microsoft PowerPoint or websites such as Google Slides, Adobe Slate, or Prezi. This interview will cover the interview you conducted with a leader of a volunteer organization. Consider the following as you create your presentation:

Who did you interview?
What organization do they work for?
What questions did you ask?
Did they know about the concepts of finding your true north, complexity leadership, and leadership purpose? If not, what do they think about it?
What did you learn in your interview?
What can you use immediately, and what strategies will you have to work on?
Include references as this is still an academic exercise.
Make sure you use writing tools I posted in “Course introduction and Materials”. Your grade will be based on these expectations.

Note: Protect your interviewees privacy, and only mention their name and position if you have permission to do so.

Submit your assignment. For additional help, check out the ULTRA: Access your assignments page.

Use this space to build your submission.
You can add text, images, and files.
Add Content
Details & Information