Courses in Fall 2024
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: WMICHCS4310GuptaFall2024; Subscribe; ISBN: 979-8-203-41560-8
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.
CS5115 - Programming Prep 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)
Course Learning Outcomes
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 I 2024
CS4310 - Design and Analysis of Algorithms
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 & CS5310 students - Enter zyBook code: WMICHCS4310GuptaSummer2024; Subscribe; ISBN: 979-8-203-34268-3
We may 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.
Courses in Spring 2024
CS6310 - Design of Algorithms and Advance Data Structures
Prerequisites:
Undergraduate background in Design and Analysis of Algorithms and/or consent of the instructor.
This is a challenging graduate course basic to computer science. A primary objective is to develop the advanced skills necessary for designing sequential and parallel high-performing algorithms. We will study advance concepts in various algorithm design paradigms such as divide & conquer, greedy, dynamic programming, backtracking, and branch & bound. We will also study NP problems, lower-bound proofs, approximation and randomized algorithms as well as combinatorial optimization. Focus is on algorithmic thinking, performance guarantees and boundary cases, and efficient solutions to practical problems. Two-thirds of this course will be devoted to algorithms and the rest to development/understanding/application of data structures.
One cannot design efficient algorithms (or solution to computational problems) without careful selection and use of appropriate data structures. On the other hand, one can't discuss data structures without the context of algorithms and problems in which they are most efficient. In this course, we re-examine, in depth, the basic algorithm design techniques (namely, divide & conquer, greedy, dynamic programming, backtracking, and branch-and-bound) and the data structures already known to us (namely, lists, priority queues, search trees, graphs, etc.). We will see and evaluate variations of these basic structures and their applicability to various fundamental and todays computational problems.
Introduction to Algorithms (3rd ed.) by Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford (2009) [1990]. MIT Press and McGraw-Hill. ISBNs 9780262033848 and 0-262-03384-4 is a good book to have. Read about it in its wiki page
Notes - Summation and Recurrence Relations.
A number of textbooks (in addition to CLRS'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.
Algorithm Design by J. Kleinberg and E. Tardos, Pearson / Addison Wesley, 2006, ISBN-10: 0-321-29535-8; ISBN-13: 978-0-321-29535-4.
Computers and Intracatibility: The Guide to the Theory of NP-Completemness by M. Garey and D. Johnson, W. H. Freeman, 1979.
Randomized Algorithms by R. Motwani and P. Raghavan, Cambridge University Press, 1995.
Combinatorial Optimization - Algorithms and Complexity by C. Papadimitriou, K. Steiglitz, Prentice-Hall, 1982.
Clever Algorithms: Nature-Inspired Programming Recipes by Jason Brownlee, LuLu, 2011
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 R&D), 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 high-performance computing (HPC) algorithms pertaining to the greedy, divide-and-conquer, dynamic programming, backtracking and branch-and-bound paradigms;
Introductory parallel algorithms pertaining to SIMD, MIMD, shared memory and message passing systems;
Analyzing iterative and recursive HPC algorithms;
Efficient data structures such as min-max heaps, B-trees, k-d trees, union-find;
Exposure to approximation algorithms, randomized algorithms, and combinatorial optimization.
CS5820-Artificial Intelligence
Provides an overview of artificial intelligence including basic A.I. techniques and concepts, e.g., production systems, heuristic searching techniques, knowledge representation, predicate calculus, and pattern recognition. Introduces A.I. application areas such as game playing, expert systems, vision, natural language processing, and learning.
Prerequisites : Prerequisite: CS 3310.
Credits 3 hrs.
Notes:
Open to Upperclass and Graduate Students. Undergraduates with junior or senior status who have met the specific course Prerequisites or have the permission of the instructor may enroll in 5000-level courses.