Western Governors University

C950: Data Structures and Algorithms II

A study guide to WGU's C950, the advanced algorithms course on graphs, hashing, dynamic programming and NP-complete problems, solved in Python.

Updated October 2026 · 5 min read

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

ItemDetails
UniversityWestern Governors University (WGU)
Course codeC950
LevelUndergraduate, competency-based
Builds onC949 Data Structures and Algorithms I
LanguagePython
Typical workDesigning and implementing an algorithmic solution, with written justification

What C950 Covers

TopicIn plain language
GraphsNodes and edges; shortest paths, traversal and spanning trees
HashingHash tables built and tuned for fast lookup
Self-adjusting structuresStructures such as splay trees that reorganize themselves around frequent access
Set representationsStoring and combining sets efficiently
Dynamic programmingSolving big problems by storing answers to overlapping subproblems
NP-completenessProblems with no known fast exact solution, and why heuristics are used
Memory and compressionUsing 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

ElementWhat it testsHow to approach it
Algorithm choiceJustified designCompare two options and explain the trade-off
Own data structureImplementation skillBuild it yourself when the task forbids libraries
Complexity analysisBig-O reasoningGive time and space cost for each major part
Scalability discussionThinking beyond the test dataSay 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

Study Tips for C950

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 Help

Free revisions · Full refund if late · Written from scratch for your order

Frequently Asked Questions

What does C950 cover?

Graphs, hashing, self-adjusting data structures, set representations, dynamic programming and NP-complete problems, implemented in Python.

Do I need C949 first?

C950 builds on C949 Data Structures and Algorithms I; check your degree plan for the exact prerequisites.

What is a self-adjusting data structure?

One that reorganizes itself based on use, such as a splay tree moving recently accessed items near the root.

Why learn about NP-complete problems?

They explain why some problems are solved with heuristics, which give good answers quickly but not guaranteed best ones.

Can you debug my C950 code?

Yes. We review your code, explain the errors and show how to fix them, so you understand the solution.

Is GradeEssays affiliated with WGU?

No. We are independent of Western Governors University.