From C++ file reader to JavaFX algorithm testing application.
Originally, this artifact was a basic C++ application that read and printed data from a text file using
a binary tree.
The data contained in the text file was a list of university courses, each with a course number, course
name,
and a sublist of prerequisites. The core purpose of the application was to demonstrate the
implementation of basic
data structures and algorithms in a static, text-based environment.
After enhancements, the artifact has evolved into a robust Java-based algorithm testing application
with a dynamic, interactive interface using JavaFX. The updated version allows users to test and
visualize multiple algorithms such as Binary Search, Quick Sort, Merge Sort, Insertion Sort, and
others in real-time, providing a clear understanding of their performance and behavior with different
data structures. I created the original version in 2022 for the CS 300 (Data structure and Algorithms)
course and developed the enhanced version this year for the CS 499 Computer Science Capstone course.
Throughout the development and enhancement of the Algorithms Testing Application I faced complex challenges such as algorithm optimization, data structure selection, and real-time performance visualization. I employed innovative techniques and industry-standard tools to create a robust and interactive solution. These enhancements reflect my ability to design and evaluate computing solutions, communicate technical concepts clearly to diverse audiences, and adhere to best practices in software development. The following outcomes showcase how these skills have been demonstrated and further refined through the project’s progression:
Design, develop, and deliver professional-quality oral, written, and
visual
communications that are coherent, technically sound, and appropriately adapted to specific
audiences and
contexts.
One of the key enhancements was the real-time algorithm visualization. I implemented visual
aids where
each element of a data structure is represented by a rectangle. The rectangles dynamically
change colors
to visually communicate the search process: starting with black, turning blue when visited,
and
highlighted in green when the target element is found. For sorting algorithms, I introduced
animations
that show the movement of each element as they are sorted, with rectangles shifting from
right to left
and turning blue once sorted. In the QuickSort algorithm, I highlighted the pivot element in
red on each
iteration. This visual representation significantly enhances the user experience by clearly
demonstrating how each algorithm operates.
Below each algorithm, I added Vertical Boxes to display execution results such as
runtime and memory
usage, along with clear explanations of the algorithm’s behavior and time complexity. This
visual and
written communication ensures the application is technically sound and easy for users to
understand.
Additionally, I included extensive comments throughout the code to ensure that collaborators
and future
developers could easily navigate, understand, and extend the project.
Design and evaluate computing solutions that solve a given problem using algorithmic principles and computer science practices and standards appropriate to its solution, while managing the trade-offs involved in design choices. Porting this artifact from C++ to Java with JavaFX involved critical design choices and adaptations. I faced the challenge of translating and restructuring the code to fit Java’s syntax and object-oriented structure while ensuring the application maintained its original functionality. This transition not only improved the user interface with JavaFX but also enhanced the performance of the algorithms. I implemented multiple sorting and searching algorithms to test them across different data structures, allowing for a versatile execution environment. For example, sorting algorithms were applied to course objects alphabetically by course name, while searching algorithms targeted course objects by course number. To compare performance, I added both recursive and non-recursive searching algorithms, allowing users to test and evaluate their efficiency in real time. This enhancement demonstrates my ability to design computing solutions that address specific problems while managing trade-offs in performance and complexity.
Demonstrate an ability to use well-founded and innovative techniques, skills, and tools in computing practices for the purpose of implementing computer solutions that deliver value and accomplish industry-specific goals. I refactored and modularized the code into distinct classes, separating the algorithms from the data structures, following industry-standard practices. This modular design makes the application scalable, maintainable, and easier to debug. I created a GlobalUI class that implements the main components of the user interface, such as algorithm boxes, buttons, rectangles, containers, and labels. This class is reusable and adaptable, meaning future developers can easily modify the UI by working within this class without affecting the core functionality of the program. By centralizing UI management in the GlobalUI class, the project becomes more flexible and resilient to changes, enabling easy updates or redesigns to the interface. This modular approach, along with the integration of performance metrics (runtime and memory usage), ensures that the application delivers tangible value while adhering to best practices in software development. It also provides a solid foundation for further enhancements, such as integrating more advanced algorithms or refining the visual experience.