Courses in Fall 2023
This course can satisfy one of the foundation courses required for computer science masters degree for the WMU-CS undergraduate students continuing their graduate studies. Check the details of foundation courses at
https://wmich.edu/cs/academics/graduate/ms-program
Prerequisites:
By Courses: (MATH 1450 or CS1310) and CS3310 or equivalent with a grade of C or better; or permission of the instructor.
By Topic: Advance understanding of high-level language programming - conditional structures; looping structures; arrays; program logic - to solve problems; object oriented programming - be able to create and use objects; software life cycle; validating quality of software produced; introductory sorting and searching algorithms; elementary data structures (linked lists, queues, stacks, hash maps); documenting programs effectively and efficiently; team work.
This is an exciting but challenging course basic, fundamental and foundational to computer science. This course is a continuation of the study of data structures and algorithms, emphasizing methods useful in practice. It provides a theoretical foundation in designing algorithms as well as their efficient implementations. The focus is on the advanced analysis of algorithms and on how the selections of different data structures affect the performance of algorithms. Topics covered include: sorting; search trees, heaps, and hashing; divide-and-conquer; dynamic programming; backtracking; branch-and-bound; amortized analysis; graph algorithms; shortest paths; network flow; computational geometry; number-theoretic algorithms; polynomial and matrix calculations; and parallel computing.
The course is appropriate for seniors and beginning graduate students. Like most college courses, this course requires students to take responsibility for their own learning. The course follows a strict schedule of reading, writing, and quizzes. Each week reading will cover one or two chapters of the textbook. The reading, writing, and examination schedule is firm. Students are required to develop the discipline to follow the schedule.
As is typical of many college courses, this course will require two midterm examinations during the course and a number of quizzes.
Classroom activities, unlike the readings and quizzes, are somewhat less structured. This allows for tangents in discussions, the use of occasional visiting guests, unforeseen instructor absences, holidays, etc. The flexibility of the classroom does not tie students or instructor to the textbook readings, but does complement and enhance those readings. Students are responsible for material in the textbook, whether or not the material is addressed in the classroom. Students are also responsible for material and skills mentoned, presented or discussed in class.
Algorithm Design and Applications by Michael Goodrich and Roberto Tamassia, Oct 2014, revised 2022 for ZyBooks interactive learning.
Sign in or create an account at learn.zybooks.com and
CS4310 students - Enter zyBook code: WMICHCS4310GuptaFall2023; Subscribe; ISBN: 979-8-203-15403-3
We will also be using Shaffer's Data Structures and Algorithms book - the link is to an older version, we will provide you an online interactive latest version on Canvas
Notes - Summation and Recurrence Relations.
A number of textbooks (in addition to GT's book) on algorithm design appropriate for this course have been published. The course will cover material from these books as well as material from research papers.
The book "Algorithms (4th Edition) by Robert Sedgewick and Kevin Wayne, Addison-Wesley Professional, ISBN-10: 032157351X, ISBN-13: 978-0321573513" used in previous semesters may not suffice for you.
The book "Algorithm Design: Foundations, Analysis and Internet Examples by Michael Goodrich and Roberto Tammassia, Wiley, ISBN: 978-0-471-38365-9" may also not suffice.
Introduction to Algorithms (4th ed.) by Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford (2022) [1990 and 2009]. MIT Press and McGraw-Hill. ISBN 9780262046305 is a good reference book to have. Read about it in its wiki page
Reinforce analytic development and problem solving abilities, and develop a deeper foundation in computer science.
Show progress with regard to understanding the analysis and performance of algorithms (for further use, e.g., in graduate level courses), including knowledge and use of terminology and how the theory connects with real-world applications, possibly in different and new areas.
Apply the concepts covered in the course to written and practical problems, e.g., by combining problem solving with computer programming and the use of software tools as part of assignments.
Students who earn a “C” or better in this course should have knowledge of
Sequential algorithms pertaining to the greedy, divide-and-conquer, dynamic programming, backtracking and branch-and-bound paradigms;
Parallel algorithms pertaining to SIMD, MIMD, shared memory and message passing systems;
Introductory databases and data management applications;
Analyzing iterative and recursive sequential and parallel algorithms;
Efficient data structures such as AVL trees, 2-3 trees, min-max heaps, B-trees.
How currently available tools work "under the hood," so you can design your own data structures and algorithms.
CS5950 - Programming for Graduate Students
This course can satisfy one of the foundation courses required for computer science masters degree for the WMU-CS undergraduate students continuing their graduate studies. Check the details of foundation courses at
https://wmich.edu/cs/academics/graduate/ms-program
Prerequisites:
Undergraduate who has learned computer programming and data structure; or graduate students; or permission of the department.
By Courses: (MATH 1450 or CS1310) and CS3310 or equivalent with a grade of C or better; or permission of the instructor.
By Topic: Advance understanding of high-level language programming - conditional structures; looping structures; arrays; program logic - to solve problems; object oriented programming - be able to create and use objects; software life cycle; validating quality of software produced; basic sorting and searching algorithms; elementary data structures (linked lists, queues, stacks, hash maps); documenting programs effectively and efficiently; team work.
This is a preparatory course foundational to graduate study in computer sciences. A project-based computer programming course. It is geared toward first-year graduate students, but other students and developers can also strengthen programming skills and enjoy concrete implementation of computer software. Students are expected to strengthen programming skills and, through software implementation projects, learn and reinforce basic concepts and techniques in data structures, algorithms, computer language, and operating systems. Upon successful completion of this course, students will be prepared with programming skills to continue study that requires computer programming and software implementation.
The course is project-based. Lecture time will be used to introduce theory and concepts related to the projects, and to solve problems students may have during programming.
Like most college courses, this course requires students to take responsibility for their own learning. It consists of digital computer programming projects involving foundational areas of computer science. Succesfully implementing a software project is a tedious process. Students are required to develop the discipline to follow a regular schedule to work on their programming projects, in contrast to working close to deadline.
Lectures and classroom activities revolve around the current project and thus somewhat less structured. This allows for tangents in discussions, the use of occasional visiting guests, unforeseen instructor absences, holidays, etc. The flexibility of the classroom does not tie students or instructor to the textbook readings, but does complement and enhance those readings. Students are responsible for material in the reading assignments, whether or not the material is addressed in the classroom. Students are also responsible for material and skills mentoned, presented or discussed in class.
NO required textbook. Most of the material is available on the web. If you like the material in a book form, see the suggested list below.
Optional Texts:
The course will cover material from the following books as well as material from web.
Algorithms (4th Edition) by Robert Sedgewick and Kevin Wayne, Addison-Wesley Professional, ISBN-10: 032157351X, ISBN-13: 978-0321573513.
Algorithm Design and Applications by Michael Goodrich and Roberto Tamassia, Oct 2014, revised 2022 for ZyBooks interactive learning.
Sign in or create an account at learn.zybooks.com and subscribe to the zyBook code: WMICHCS4310GuptaFall2023; ISBN: 979-8-203-15403-3
Introduction to Algorithms (4th ed.) by Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford (2022) [1990 and 2009]. MIT Press and McGraw-Hill. ISBN 9780262046305 is a good reference book to have. Read about it in its wiki page
Engineering a Compiler by Cooper and Torczon, 3rd edition, August 2022, Morgan Kaufmann, eBook ISBN 9780128189269
Compilers: Principles, Techniques, & Tools by Aho, Lam, Sethi, & Ullman, 2nd edition, Addison Wesley, 2006, ISBN 978-0321486813
Advance Programming in the UNIX Environment by W. Richard Stevens (ISBN 978-0321637734)
Computer Systems: A Programmer’s Perspective by Randal Bryant and David O'Hallaron (ISBN 978-0134092669)
Operating Systems: Internals and Design Principles by William Stallings (ISBN 978-0133805918)
...
Write efficient computer programs
Implement data structures (binary trees, heap, graph)
Implement searching and sorting algorithms
Conduct empirical study of algorithm performance
Get familiar with system calls and system programming
Get familiar with language parser and interpreter
Write project report
Students who earn a “C” or better in this course should have knowledge of
...(place holder)...
Courses in Summer II 2023
LMS eLearning and MS Teams areas for the class.
Prerequisites:
By Courses: CS3310 or equivalent with a grade of C or better; or permission of the instructor.
By Topic: Advance understanding of high-level language programming - conditional structures; looping structures; arrays; program logic - to solve problems; object oriented programming - be able to create and use objects; software life cycle; validating quality of software produced; sorting and searching algorithms; data structures (linked lists, queues, stacks, hash maps); divide-and-conquer, greedy, dynamic programming, branch-and-bound and backtracking algorithm design techniques; documenting programs effectively and efficiently; team work. Proficient in Java, C, C++, or C# beyond the experience in CS3310. Low-level, systems programming, and Linux programming experience desired. Some mathematics and statistics background.
Note: A student may not receive credit for both CS 4430 and CS 5430.
This course is a 3 credit hour advance undergraduate or introductory graduate level course on database systems, intended for students who plan to design and develop relational database applications, or get introduced to the area of databases for research.
The general objective of this first course in DBMS is to introduce students basic concepts, techniques and systems for data management so that students are able to design their own databases, write database queries, and develop database applications. Specific objectives include:
Understand basic concepts in databases and DBMSs
Understand the relational theory.
Develop skills needed to design relational databases.
Develop skills to write database queries.
Get experience of database programming and application development.
Upon completion of this course, students will be able to:
explain basic concepts in databases and benefits of databases to organizations,
explain relational model and query relations using algebraic expressions,
create database schema and query database using SQL,
write database programs and develop Internet applications,
design database schema using the Entity-Relationship model,
transform database schema into normalized designs.
Jeffrey D. Ullman and Jennifer Widom. A First Course in Database Systems. 3rd Edition. Prentice Hall, 2007. ISBN: 978-0136006374 (or Chapters 1-12, Database Systems: The Complete Book. 2nd Edition. ISBN: 978-0131873254) . The authors maintain a book web site at http://infolab.stanford.edu/~ullman/fcdb.html where you can find a lot of useful stuff.
Students' progress and achievements towards reaching the course goals and objectives will be apparent from such measures as: the results and creativity displayed in course assignments; and the contents of and performance on certain exam portions.
Courses in Spring 2023
This course can satisfy one of the foundation courses required for computer science masters degree for the WMU-CS undergraduate students continuing their graduate studies. Check the details of foundation courses at
https://wmich.edu/cs/academics/graduate/ms-program
Prerequisites:
By Courses: (MATH 1450 or CS1310) and CS3310 or equivalent with a grade of C or better; or permission of the instructor.
By Topic: Advance understanding of high-level language programming - conditional structures; looping structures; arrays; program logic - to solve problems; object oriented programming - be able to create and use objects; software life cycle; validating quality of software produced; introductory sorting and searching algorithms; elementary data structures (linked lists, queues, stacks, hash maps); documenting programs effectively and efficiently; team work.
This is an exciting but challenging course basic, fundamental and foundational to computer science. This course is a continuation of the study of data structures and algorithms, emphasizing methods useful in practice. It provides a theoretical foundation in designing algorithms as well as their efficient implementations. The focus is on the advanced analysis of algorithms and on how the selections of different data structures affect the performance of algorithms. Topics covered include: sorting; search trees, heaps, and hashing; divide-and-conquer; dynamic programming; backtracking; branch-and-bound; amortized analysis; graph algorithms; shortest paths; network flow; computational geometry; number-theoretic algorithms; polynomial and matrix calculations; and parallel computing.
The course is appropriate for seniors and beginning graduate students. Like most college courses, this course requires students to take responsibility for their own learning. The course follows a strict schedule of reading, writing, and quizzes. Each week reading will cover one or two chapters of the textbook. The reading, writing, and examination schedule is firm. Students are required to develop the discipline to follow the schedule.
As is typical of many college courses, this course will require two midterm examinations during the course and a number of quizzes.
Classroom activities, unlike the readings and quizzes, are somewhat less structured. This allows for tangents in discussions, the use of occasional visiting guests, unforeseen instructor absences, holidays, etc. The flexibility of the classroom does not tie students or instructor to the textbook readings, but does complement and enhance those readings. Students are responsible for material in the textbook, whether or not the material is addressed in the classroom. Students are also responsible for material and skills mentoned, presented or discussed in class.
Algorithm Design and Applications by Michael Goodrich and Roberto Tamassia, Oct 2014, revised 2022 for ZyBooks interactive learning.
Sign in or create an account at learn.zybooks.com and
CS4310 students - Enter zyBook code: WMICHCS4310GuptaFall2022; Subscribe; ISBN: 979-8-203-00712-4
CS5310 students - Enter zyBook code: WMICHCS5310GuptaFall2022; Subscribe; ISBN: 979-8-203-00721-6.
We will also be using Shaffer's Data Structures and Algorithms book - the link is to an older version, we will provide you an online interactive latest version on Canvas
Notes - Summation and Recurrence Relations.
A number of textbooks (in addition to GT's book) on algorithm design appropriate for this course have been published. The course will cover material from these books as well as material from research papers.
The book "Algorithms (4th Edition) by Robert Sedgewick and Kevin Wayne, Addison-Wesley Professional, ISBN-10: 032157351X, ISBN-13: 978-0321573513" used in previous semesters may not suffice for you.
The book "Algorithm Design: Foundations, Analysis and Internet Examples by Michael Goodrich and Roberto Tammassia, Wiley, ISBN: 978-0-471-38365-9" may also not suffice.
Introduction to Algorithms (3rd ed.) by Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford (2009) [1990]. MIT Press and McGraw-Hill. ISBN 0-262-03384-4 is a good reference book to have. Read about it in its wiki page
Reinforce analytic development and problem solving abilities, and develop a deeper foundation in computer science.
Show progress with regard to understanding the analysis and performance of algorithms (for further use, e.g., in graduate level courses), including knowledge and use of terminology and how the theory connects with real-world applications, possibly in different and new areas.
Apply the concepts covered in the course to written and practical problems, e.g., by combining problem solving with computer programming and the use of software tools as part of assignments.
Students who earn a “C” or better in this course should have knowledge of
Sequential algorithms pertaining to the greedy, divide-and-conquer, dynamic programming, backtracking and branch-and-bound paradigms;
Parallel algorithms pertaining to SIMD, MIMD, shared memory and message passing systems;
Introductory databases and data management applications;
Analyzing iterative and recursive sequential and parallel algorithms;
Efficient data structures such as AVL trees, 2-3 trees, min-max heaps, B-trees.
How currently available tools work "under the hood," so you can design your own data structures and algorithms.