Posts

CST 438 - Software Engineering - Week 1

Image
  Before starting this course, I expected software engineering to be about writing code and building software applications. I thought it would be like the other programming classes I have taken, where the focus is mainly on syntax and getting the program to work. I figured we would work on a team project, write some code, and maybe talk about best practices on how to implement each project. After completing week 1, my mind has changed. I have learned that software engineering is more about making code maintainable and sustainable over time, not just getting it to work today. The quiz and reading from the Software Engineering at Google book showed how important things like version control policies, testing strategies, and codebase size are. One concept that stood out was shifting left, which means addressing problems early in the development process, like thinking about security and performance from the beginning. Overall, I can already tell this class is going to focus more on real...

CST 462S - Race Gender & Class Digital World - Week 8

Image
  My service learning experience was great overall. I had the opportunity to work with a classmate to create a tool for The Furnace Teen Center . The project was to build a sign-in form that students could use before starting an activity. For example, if a student wanted to do some reading, they would scan a QR code that took them to a form where they entered their info. That info was then sent to a spreadsheet so the site supervisor could track who was participating and when. One thing I think could be improved is making the tool work more like a gym check-in system. Each student could have a membership card that, when scanned, would automatically log their activity into a database. But to do that, we would need to build Android and iOS apps, which takes way more time than the 25 hours we had. This kind of project really needs someone with experience in app development and a longer timeline to do it right. One of the biggest challenges was the time limit. Since we only had 25 hour...

CST 370 - Design and Analysis of Algorithms - Week 7

Image
  This week in CST-370, I learned about non-comparison based sorting algorithms such as Counting Sort and Radix Sort. Unlike traditional sorting algorithms that rely on comparisons, Counting Sort uses frequency counting and distribution calculations to sort integers efficiently when the range of numbers is relatively small. The time complexity of Counting Sort is O(n + k), where n is the number of elements and k is the range of values. Additionally, I learned about Radix Sort, which processes numbers digit by digit, starting from the least significant digit (LSD) and applying Counting Sort iteratively. Radix Sort is particularly useful for sorting numbers with multiple digits, and its efficiency is O(d * (n + k)), where d represents the number of digits in the largest number. Counting Sort maintains the stability of elements, preserving their relative order in the output. I also learned more Dynamic Programming (DP) and its applications in optimization problems. The concept of over...

CST 370 - Design and Analysis of Algorithms - Week 6

Image
  This week in CST-370, we learned about more advanced data structures such as AVL trees, heaps, and hashing. AVL trees solve the issue of unbalanced binary search trees by maintaining a balance factor between -1 and 1, ensuring logarithmic time complexity for operations like search, insert, and delete. I learned how rotations (left, right, and combinations of both) restore balance when inserting or deleting nodes. The concept of balancing height was interesting because it talks about the trade-offs between complexity and performance. We also learned about heaps, focusing on their role as priority queues. A heap is a complete binary tree where each parent node adheres to a specific order property, either greater than (max-heap) or less than (min-heap) its children. I learned the importance of heapify operations and how heaps support efficient insertion and deletion in logarithmic time. Also, heapsort was introduced as a sorting algorithm that leverages the heap’s structure to achie...

CST 370 - Design and Analysis of Algorithms - Week 5

Image
  This week in CST-370, I learned more about QuickSort and its importance in algorithm design. QuickSort is a divide and conquer algorithm, which stands out for being efficient and "in place" unlike Merge Sort. I learned how the partitioning step affects its performance, with the best case being a balanced split and the worst case occurring when the partition divides unevenly, such as in already sorted or reverse sorted arrays. Empirical analysis mentions the practical implications of efficient algorithms over brute computational power, which made me prioritize learning effective techniques. Additionally, I learned about binary tree traversals, specifically preorder, inorder, and postorder traversal methods. These techniques consist of visiting each node and I practiced some examples to better understand the order in which nodes are visited. Also, I was introduced to the "Decrease and Conquer" approach, an algorithm design technique that simplifies a problem by solv...

CST 370 - Design and Analysis of Algorithms - Week 4

Image
  This week in CST-370, we learned about the merge sort algorithm. Merge sort follows the divide and conquer technique to efficiently sort an input array, with a time complexity of Θ(n log n). I found this algorithm relatively easy to understand. The process begins by dividing an unsorted array into two halves, and this division continues recursively until we are left with individual elements. Once the base case is reached, the sorting phase begins, where smaller elements are placed on the left and larger elements on the right. This merging process continues until a fully sorted array is obtained. Besides learning about merge sort, we spent the rest of the week reviewing for the midterm. While we did not cover much new material, I found merge sort to be an interesting and useful algorithm.

CST 370 - Design and Analysis of Algorithms - Week 3

Image
  This week in CST370, we focused on understanding various brute force and exhaustive search algorithms, such as string matching, depth-first search and breadth-first search. I learned that brute force is a straightforward approach to solving problems by directly applying the problem's definition. For instance, selection sort and bubble sort are classic examples of brute force algorithms where elements are compared and swapped until the array is sorted. The brute force string matching algorithm was particularly insightful, as it involves searching for a pattern in a given text through character by character comparisons. We also learned about its efficiency in terms of best case and worst case scenarios, noting that its average case efficiency is linear, Θ(n). This helped me understand the importance of time complexity when analyzing algorithms and how different cases affect performance. In addition to brute force algorithms, we learned about exhaustive search approaches, such as th...