CS 253: Homework 1 Problem 1. Design a program that allows you to experiment with different sort algorithms. This program should allow you to easily plug-in new sorting algorithms and compare them. For this homework, you will work with insertion, selection and bubble sorts (more sorts will be added later). Assume that input data is generated randomly and stored in a text file. You will experiment with your program in two steps: Step 1: Experimenting with a prototype data (integers from 1 to 10) to ensure that your implementation works correctly. The results must be reported in a table format (not generated by the program, but collected manually from multiple program runs) in the a Word document as follows: best case worst case average case char.1...char.N char.1...char.N char.1...char.N alg.1 ... .... ... ... ... ... alg.2 ... .... ... ... ... ... ... alg.N ... .... ... ... ... ... Step 2: Experimenting with a large data set of 2000 elements. The results must be reported in the same table format. In adition, in the report, explain the empirical results generated by your program comparing them to the known theoretical results paying special attention to any inconsistensies. Must submit for grading: an UML diagram of the program design, the java code, the random text file(s) generated by an independent module (you may need multiple random text files to better characterize the average efficiency of the respective algorithm), the report as a Word document. Problem 2. Study, program, and compare the efficiencies of the following recursive algorithms: - Recursive binary search - Computing the factorial of N - Computing the N-th Fibonacci number. Must submit the tree of recursive calls for each program (in any format as long as I can open it for a reasonable N), the Big-O function with an explanation for each program, PLUS the java code and example runs to demonstrate the correctness of the implementation. ALL HOMEWORKS WILL BE POSTED ON THE COURSE WEBSITE, BUT SUBMITTED VIA BBLearn. Remember that homework projects are individual assignments. Shared work will be graded by the rule "Share the work, share the grade". However, you can get some help from the code on my Web site. You may design your program in whatever environment you want, but the final version of your programs that you submit for grading must run in jdk. Test it, to make sure it does. Also, this in NOT a programming course -- you will be graded on your understanding of CONCEPTS and THEORY that each programming project covers. That is, your perfect implementation may result in 0 points, if you fail to explain your results, especially if they are wrong.