The advising team wihtin the Computer Science Department of ABCU has asked me to evaluate, design, and develop an advising assistance program utilizing the best data structure and algorithm that best fits the need of the advisors. For this project, I was given a dataset of courses, with info such as course name, course code, and prerequisites of each course (If Any). I was then asked to evaluate the following data structures to find the best performing structure for primarily searching capabilities:
- Vectors / Arrays
- Linked Lists
- Hash Tables
- Binary Search Tree
After designing and evaluating each data structure in regards to search algorithmic efficiency, I then implemented the solution and developed the assistance program, solving the needs of the advising team.
As stated above, I approached this problem by first evaluating each data structures efficiency for different algorithmic aspects such as searching, inserting, and removing. Next, I then implemented each data structure to evaluate the differences in time taken to do each operation on a small and large dataset. Finally, I finalized my pseudocode designs for each data structure (found above) and analyzed the time spent for each operation on each data structure implemented side-by-side. In doing this type of research and testing prior to fully implementing a solution, I was significantly more informed on which data structure would be the best fit for the given problem provided that we also had an idea of which algorithm we were idealing performing. This allowed for an educated and structured implementation process to be streamlined and allowed for me to provide that solution with no problems occurring.
For the duration of this course, most of my problems were encountered in the beginning and middle portions of the course, such as stack overflow issues, and other implementation challenges that I faced early on. When faced with an implementation issue, I delved deep into research utilizing different forms of documentation to ensure that I was not missing sections within my code that would cause the issues to arise. In doing so and after thorough analysis of my codebase with other resources, I would end up finding and fixing the bugs causing the issues.
How has your work on this project expanded your approach to designing software and developing programs?
Like all my other previous CS classes thus far, this project and course has added to my approach significantly and has positively impacted my mindset in how I look at problems and go through a structured set of questions before applying a solution to that problem. Now, when I am facing a problem, I ask myself, what data structure can I use here? Or, what algorithm can I implement here? I also spend more time designing my code before hand now than I did before as I have seen how important and beneficial it can be to design an implementation through pseudocode prior to ever actually implementing it in code.
How has your work on this project evolved the way you write programs that are maintainable, readable, and adaptable?
As stated above, I have found myself spending more time in pseudocode design first, ensuring that I know exactly how the code will be implemented. This allows me to create code that is modular, making it easier to test in small quantities, adding to the readability of the code, and overall allows for code blocks to be easily adapted to new circumstances. By designing and implementing code in a modular style, it allows for easy testing and easy identification of any bugs that may be present.