Posts

Showing posts from July, 2025
This week I got a better understanding of some core algorithm techniques. Quick Sort stood out as a strong example of divide and conquer breaking problems into smaller parts to solve them efficiently. I also learned how binary trees work especially how to traverse them and calculate their height. We explored decrease and conquer which is similar to divide and conquer but focuses on solving smaller pieces one at a time. Insertion sort and Khan’s algorithm for topological sorting helped with that. We also looked at transform and conquer like using pre sorting to simplify a problem.
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.
This week I learned how brute-force algorithms can be used for problems like string matching and knapsack, where every possible option is explored to find the best result. I also got more comfortable with graph traversal using depth-first and breadth-first search paying attention to how the order of visiting nodes can affect the outcome. The materials helped me understand how to build search trees and mark visit sequences correctly. I also studied the Master Theorem, which makes it easier to analyze the efficiency of recursive algorithms. It was helpful to see how these different topics connect.
This week I learned how to analyze algorithm efficiency using Big O, Theta, and Omega notation. I also explored both nonrecursive and recursive algorithms including how to use recurrence relations and brute force strategies. In Homework 2-1 I practiced reading user input, storing integers, sorting them, and finding the smallest distance between any two numbers. It helped me get more comfortable with arrays, loops, and basic math logic in Java. In Homework 2-2 I built on that by sorting numbers and displaying them in a cleaner format using ranges for consecutive values like 51 to 53. This helped reinforce conditionals and how to work with array data more efficiently. Overall this week was a solid mix of theory and hands-on coding.
This week I learned about important data structures including linked lists, stacks, queues, graphs, and trees. The lessons on graphs helped me understand how to represent relationships between data and I saw the difference between unweighted and weighted graphs. Learning about trees gave me a clearer picture of how hierarchical data can be organized. I also started exploring algorithm analysis where I learned how to think about time and space efficiency when writing code. One of the highlights of the week was working on a Java program that checks if a string is a palindrome. This program gave me a chance to practice taking user input, cleaning the input by removing symbols and ignoring case, and using a loop to compare characters from both ends of the string. It tied together several concepts we learned including string handling and logical thinking. Overall this week helped me build a stronger understanding of both data structures and algorithm efficiency while applying those ideas in...