Courses in Fall 2022
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.
CS4310-5310 - 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 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.
Prerequisites:
By Courses: CS3100 or 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, and backtracking algorithm design techniques; documenting programs effectively and efficiently; team work. Proficient in Python, R, Java, C, C++, or C# beyond the experience in CS1120. Low-level, systems programming, and Linux programming experience desired. Some mathematics and statistics background. Exposure to machine-learning, Python & R programming are a plus. Strong desire, self-motivation & dedication to learn and contribute to the interesting area of big data computing (mainly storage, retrieval and processing of big data).
This course is a 3 credit hour graduate level course, intended for students who plan to design and develop applications, or pursue R&D in the exciting area of big data computing. The primary objective of this course is to familiarize the students with the most important information technologies used in manipulating, storing, and analyzing big data. Mainly focusing on big data models, reduction techniques, applications architectures and big data analytics using cloud-based and other related services, this course will provide students with the knowledge and hand-on experience in designing and implementing big data applications. Topics may include the characteristics and challenges of the big data, state-of-the-art computing paradigm sand platforms (e.g., MapReduce), big data programming tools (e.g., Hadoop, GFS, MongoDB and various cloud-based tools), big data extraction and integration, big data storage, scalable indexing for big data, big graph processing, big data stream techniques and algorithms, big probabilistic data management, big data privacy, big data visualizations, and big data applications (e.g., spatial, finance, multimedia, medical, health, and social data). This course will also explore the current challenges facing big data computing.
The course provides the student with an advanced understanding of the issues involved in dealing with Big Data. It prepares the student for advanced handling of extremely large data sets, accessing the data, reduction of the data into a manageable size and processing the results. Students will reduce Big Data sets, use and develop R packages and other code to analyze the data and produce graphics to explore and explain the data. This course will be very small team project oriented.
Big Data Fundamentals: Concepts, Drivers & Techniques by Erl, Khattak and Buhler, 2016, Pearson, ISBN: 9780134291208 (ebook), 9780134291079 (paper).
We will also extensively refer to research papers, material available on the web and material from the following recommended textbooks.
Data Science on the Google Cloud Platform by Valliappa Lakshmanan, 2018, O'reilly, ISBN: 9781491974568
Big-Data Analytics for Cloud, IoT & Cognitive Learning by Kai Hwang and Min Chen, 2017, John Wiley & Sons Inc, ISBN: 9781119247029
Hadoop: The Definitive Guide, Third Edition, by Tom White (O'Reilly)
Data-Intensive Text Processing with MapReduce, by Jimmy Lin and Chris Dyer
R for Data Science by Hadley Wickham and Garrett Grolemund, O'Reilly, 2016, ISBN: 9781491910399
Goals
Understand the big data characteristics and challenges
Understand real world applications and their techniques involving big data
Know the current big data processing platforms and tools
Understand big data collection, integration and storage
Learn the big data indexing
Learn various queries over big data
Learn the core techniques of processing big data
Familiarity with big data characteristics and challenges
Proficiency with at least one comprehensive big data handling tool
Experience with surveying big-data-related topics and presenting them (orally as well as written)
Design and implemention of a R&D project on big data problems
Collaboration with team members to study the big data techniques and learn big data tools
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 Summer II 2022
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 2022
CS4310-5310 - 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, Wiley, ISBN - 978-1-118-33591-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 suffice for you, if you can copy problems sets needed in homeworks from one of your colleagues who has purchased the required texbook.
The book "Algorithm Design: Foundations, Analysis and Internet Examples by Michael Goodrich and Roberto Tammassia, Wiley, ISBN: 978-0-471-38365-9" may also suffice, if you can copy problems sets needed in homeworks from one of your colleagues who has purchased the required texbook.
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.