Posts

CST 370 - Week 7

 Hey everyone, This week’s learning journey took me through several important algorithmic techniques and problem-solving strategies, expanding both my theoretical knowledge and my practical skills. I began with Non-Comparison Sorting , where I explored Counting Sort and Radix Sort . Unlike traditional comparison-based methods like Merge Sort or Quick Sort, these algorithms leverage properties of the input data to achieve better-than- O(n log n) performance in certain cases. Counting Sort uses frequency counting to sort integers efficiently, while Radix Sort applies a digit-by-digit sorting approach (often using Counting Sort as a subroutine), making it especially useful for fixed-length integers or strings. The visualizations helped me understand how these algorithms maintain stability and avoid element comparisons altogether. Next, I dove into Dynamic Programming (DP) . The key takeaway was that DP is all about solving complex problems by breaking them into overlapping subproble...

CST 370 - Week 6

 Hey everyone, This week, I explored several fundamental data structures and algorithms that are essential for efficient data organization and manipulation. I started with AVL Trees , where I learned how self-balancing binary search trees maintain their height through rotations. From the lecture and exercises, I practiced identifying whether a tree is AVL and performed left and right rotations to restore balance. The AVL tree visualization tool was especially helpful in understanding how the tree structure changes dynamically during insertions. Additionally, I shared about my experience in comparing test cases in our homework assignments with my classmates on Discord. I shared how to add the "a.out" file and use the manual commands provided by the professor. I also studied 2-3 Trees , a type of balanced search tree where nodes can contain two or three children. I learned how values are inserted and how nodes split when they become overfull. The video introduction and exercise...

CST 370 - Week 5

 Hey everyone! This week, I explored several important algorithm design techniques and deepened my understanding of how they are applied in solving complex problems efficiently. One of the key highlights was learning about Quick Sort , a widely used sorting algorithm that relies on the Divide-and-Conquer strategy. I now understand how Quick Sort works by dividing the array into smaller parts around a pivot, sorting those parts recursively, and then combining the results. I also learned about its efficiency and how its performance depends on the choice of the pivot. I also studied Binary Tree traversal methods, such as inorder, preorder, and postorder, and how each serves a specific purpose when working with hierarchical data. Alongside traversal, I learned how to calculate the height of a binary tree , which is a foundational concept for evaluating the balance and efficiency of tree-based data structures. I even added my insights on the class Discord group, explaining an easy calc...

CST 370 - Week 4

 Hey everyone! This week in class, I focused on two main things: learning about Merge Sort and reviewing for the upcoming midterm . We covered Merge Sort in detail, and it really helped me understand how divide-and-conquer algorithms work. I learned that Merge Sort breaks down an array into smaller parts, sorts each part, and then merges them back together in a sorted order. What stood out to me is how efficient it is, especially for large datasets, with a time complexity of O(n log n) . I found the recursive nature of the algorithm interesting, and practicing it helped me see how smaller problems can be solved independently and then combined to solve the larger problem. Aside from learning new material, a big part of this week was focused on reviewing for the midterm . I went over topics from previous weeks like brute-force algorithms, string matching, and graph traversal methods (DFS and BFS). I also spent time practicing problems and using flashcards to reinforce key concepts....

CST 370 - Week 3

 Hey everyone! This week was packed with foundational concepts in computer science and algorithm design. From string matching to exhaustive search strategies and graph traversal techniques, I gained a clearer understanding of how various algorithms work under the hood and how they can be applied to solve complex problems. Here's a breakdown of what I learned: I started the week exploring Brute Force String Matching , one of the simplest ways to find a pattern within a larger text. The method checks for a match by comparing the pattern to every possible position in the text. While it's not the most efficient, it’s a great way to understand the basics of string comparison and sets the stage for more advanced algorithms. The video walkthrough helped solidify how this method operates step-by-step. I then moved on to Exhaustive Search strategies, which involve exploring all possible solutions to find the best one. Three classic problems were covered: TSP (Travelling Salesman Prob...

CST 370 - Week 2

 Hey everyone, This week in class was a mix of challenges, "aha" moments, and some solid progress in understanding how algorithms really tick under the hood. We dove deeper into asymptotic notations like Big-O, Big-Theta, and Big-Omega—which, to be honest, felt a little abstract at first. But once I started thinking of them as tools to describe how fast an algorithm grows, it started to click. Theta notation stood out to me the most because it gives the full picture—kind of like saying, "Hey, this is how your algorithm behaves on average , not just in the worst case." We also covered recursive vs. non-recursive algorithms , and I practiced breaking down recurrence relations using backward substitution . There’s something strangely satisfying about peeling back the recursion layer by layer until you hit the base case and suddenly realize, “Oh! This runs in linear time!” On the more interactive side, I shared a few tips in our class Discord group , which was pretty r...

CST 370 - Week 1

 Hey everyone, This week, we learned several important topics that form the foundation of computer science and programming. We started with GitHub and practiced using manual commands like git init, git add, git commit, and git push to manage our code. This helped us understand version control and how to keep track of changes when working on projects, especially when collaborating with others. We were also introduced to algorithms and learned what they are—step-by-step methods for solving problems. One example we focused on was Euclid’s Algorithm for finding the greatest common divisor (GCD) of two numbers. It uses a simple but powerful idea: repeatedly replace the numbers with GCD(b, a % b) until the second number becomes zero. We also practiced writing pseudocode, which helped us plan out algorithms in plain language before coding. We also had a homework assignment to help us further understand GitHub commands. Later in the week, we learned about graphs, both weighted and unweight...