C950 Data Structures and Algorithms II is Western Governors University's follow-on to C949, focused on high-performance data structures and the algorithms that use them.
The course description lists graphs, hashing, self-adjusting data structures, set representations and dynamic programming, and introduces NP-complete problems. It also covers using Python techniques to build software solutions to problems of memory management and data compression.
Students find the jump from C949 steep. Problems no longer have one textbook answer, so you must choose an approach, justify it and show it works at scale.
Course at a Glance
| Item | Details |
|---|---|
| University | Western Governors University (WGU) |
| Course code | C950 |
| Level | Undergraduate, competency-based |
| Builds on | C949 Data Structures and Algorithms I |
| Language | Python |
| Typical work | Designing and implementing an algorithmic solution, with written justification |
What C950 Covers
| Topic | In plain language |
|---|---|
| Graphs | Nodes and edges; shortest paths, traversal and spanning trees |
| Hashing | Hash tables built and tuned for fast lookup |
| Self-adjusting structures | Structures such as splay trees that reorganize themselves around frequent access |
| Set representations | Storing and combining sets efficiently |
| Dynamic programming | Solving big problems by storing answers to overlapping subproblems |
| NP-completeness | Problems with no known fast exact solution, and why heuristics are used |
| Memory and compression | Using algorithms to save space, for example Huffman coding |
Key Concepts Explained
Shortest Paths with Dijkstra's Algorithm
Dijkstra's algorithm finds the shortest distance from a start node to every other node when edge weights are non-negative. It repeatedly picks the unvisited node with the smallest known distance and updates its neighbors.
Example: From A, edges are A-B 4, A-C 1, C-B 2, B-D 1. Start: A=0. Visit A: C=1, B=4. Visit C: B becomes min(4, 1+2) = 3. Visit B: D = 3+1 = 4. Shortest A to D is 4, via A, C, B, D.
NP-Complete Problems and Heuristics
Problems such as the traveling salesman problem have no known algorithm that finds the exact best answer quickly for large inputs. Practical programs use heuristics, such as nearest neighbor, which give good but not guaranteed optimal results. Being able to explain this trade-off is part of the course.
Huffman Coding for Compression
Huffman coding gives frequent symbols short codes and rare symbols long ones.
Example: In a message with A x5, B x2, C x1, D x1, combine C and D (2), then B with CD (4), then A with that (9). Codes: A=0, B=10, C=110, D=111. Total bits: 5 + 4 + 3 + 3 = 15, versus 18 with a fixed 2-bit code.
Dynamic Programming in Practice
Dynamic programming works when a problem breaks into overlapping subproblems whose answers can be stored and reused. Instead of recomputing the same thing many times, you fill a table once.
Example: Counting the ways to climb 5 stairs taking 1 or 2 steps at a time. Ways(n) = Ways(n-1) + Ways(n-2), with Ways(1) = 1 and Ways(2) = 2. The table fills as 1, 2, 3, 5, 8, so there are 8 ways. Naive recursion recomputes the same values repeatedly and grows exponentially; the table needs only n steps.
In Python, a dictionary used as a memo or a simple list used as a table are both common. Explaining which subproblems you store and why is as important as the code.
Building Your Own Hash Table
Some tasks ask you to build a structure yourself rather than rely on Python's built-in dictionary. A simple chaining hash table needs a list of buckets, a hash function that maps keys to bucket indices, and insert, lookup and delete methods. Discuss the load factor: as buckets fill, lookups slow down, so resizing keeps performance close to constant time.
Typical Work and How to Approach It
| Element | What it tests | How to approach it |
|---|---|---|
| Algorithm choice | Justified design | Compare two options and explain the trade-off |
| Own data structure | Implementation skill | Build it yourself when the task forbids libraries |
| Complexity analysis | Big-O reasoning | Give time and space cost for each major part |
| Scalability discussion | Thinking beyond the test data | Say what happens as inputs grow |
Read the current task instructions carefully: they define which libraries are allowed and what the write-up must contain.
Where Students Get Stuck
- Starting with code, not design. Sketch the data flow and structures before writing Python.
- Missing write-up elements. Code alone rarely meets the rubric; explanations and complexity analysis matter.
- Edge cases. Test empty inputs, ties and unreachable nodes.
- Comments and readability. Evaluators read your code; clear names and comments help them follow it.
Study Tips for C950
- Trace Dijkstra's algorithm and a dynamic programming table by hand before coding them.
- Keep a log of design decisions as you work; it becomes the core of your justification.
- Time your program on larger inputs to support your scalability claims.
- Use version control so you can return to a working state.
How We Help with C950
Send the task instructions, rubric, your code and any evaluator comments. A Python tutor explains the relevant algorithms, reviews your design and code, helps you debug, and shows how to structure the written justification.
GradeEssays is independent of Western Governors University. We support learning: the code and write-up you submit must be your own work under WGU's academic integrity rules, and we never access student accounts. Revisions within the scope of your original request are free.
Get Unstuck on C950
Share your task, code and evaluator feedback. A CS tutor explains the algorithms and reviews your design and write-up.
Start My C950 HelpFree revisions · Full refund if late · Written from scratch for your order
Frequently Asked Questions
Graphs, hashing, self-adjusting data structures, set representations, dynamic programming and NP-complete problems, implemented in Python.
C950 builds on C949 Data Structures and Algorithms I; check your degree plan for the exact prerequisites.
One that reorganizes itself based on use, such as a splay tree moving recently accessed items near the root.
They explain why some problems are solved with heuristics, which give good answers quickly but not guaranteed best ones.
Yes. We review your code, explain the errors and show how to fix them, so you understand the solution.
No. We are independent of Western Governors University.