This week was a good balance between learning new concepts and applying them in code. I explored two sorting algorithms, Counting Sort and Radix Sort which work without making comparisons and are very efficient for certain types of numbers. I strengthened my understanding of dynamic programming by solving problems like coin collection and coin-row, and saw how it can divide and conquer solutions much faster. On the graph side, I worked with Warshall’s algorithm for transitive closures and Floyd’s algorithm for all pairs shortest paths both of which build on dynamic programming ideas. I also learned the greedy technique through Prim’s algorithm for finding minimum spanning trees. These ideas all came together through Java projects and problem-solving practice.
This week I focused a lot on understanding time complexity and recursive analysis. It was challenging at first to figure out how to break down recursive functions and write the correct recurrence relations. Applying the Master Theorem was especially tough because I had to carefully identify each part of the formula and decide which case applied. I also spent time reviewing the difference between Big O, Big Omega, and Big Theta, which helped me better understand how to describe the efficiency of an algorithm. These concepts took time to click but working through examples really helped.
Comments
Post a Comment