Posts

Showing posts from October, 2025

CST370 Week 7

This week, I focused on non-comparison sorting methods like counting sort and radix sort, and I saw how they achieve linear time under certain conditions. I then explored dynamic programming through the coin-collecting and coin-row problems, which helped me understand how optimal substructure and overlapping subproblems work. Next, I learned about graph-algorithms for transitive closure and all-pairs shortest paths (, ), and finally the greedy paradigm through minimum spanning trees and . Working through the example exercises clarified how each technique fits different problem types.

CST370 Week 6

This week I explored AVL trees , learning how they keep balance via rotations when insertions or deletions cause imbalance. I practiced determining valid AVL trees and performing rotations (left, right, left-right, right-left). Then we looked at 2-3 trees , which allow nodes to have 2 or 3 children and help maintain balanced search structure. After that, we studied heaps and heapsort (building max heaps, removing the max, bottom-up heap construction) and their time complexity. Finally, we covered hashing , including collision handling, load factor, and rehashing strategies. Working through the exercises and visual tools really helped solidify these more advanced data structure concepts.

CST370 Week 5

This week I dove into Quick Sort, learning how partitioning around a pivot can yield efficient sorting on average. I also studied binary tree traversals (inorder, preorder, postorder) and how to compute the tree’s height. The concept of decrease-and-conquer came next, applying it to binary search. We also learned about directed acyclic graphs (DAGs) and topological sorting, including Kahn’s algorithm. Finally, transform-and-conquer via pre-sorting taught me how sometimes sorting first can simplify later steps. These topics helped me see a broad set of algorithmic patterns and trade-offs.