Courses
Search for courses listed in this bulletin. To find a semester course schedule (including instructors, meeting times and locations), go to mynmu.nmu.edu.
- Graded: A/F
- Prerequisites: CS 222 and either CS 322 or CS 330, or permission of instructor.
A compiler is a program that translates one computer language to another. In this course, students will learn how compilers work, what makes some languages easier to compile than others, and different approaches to compiler design. Over the course of the semester, the students will build their own compilers.
- Graded: A/F
- Prerequisites: CS 222 or instructor permission.
This course covers parallel programming, including shared memory and distributed memory programming. Topics include architecture, programming techniques, the MPI, OpenMP, and pthread libraries and famous algorithms.
- Graded: A/F
- Prerequisites: CS 222, junior standing or instructor’s permission.
Students learn techniques for making computers behave more intelligently and adaptively. The course includes a survey of the broad field of computer intelligence, including newer areas of adaptive systems, such as neural networks and genetic algorithms. Specific methodologies will be explored through implementation and application to real-world problems.
- Graded: S/U
- Prerequisites: Graduate student in Computer Science or instructor permission.
In this course, one or more research areas in computer science are investigated. The purpose of this course is to expose the students to some research areas in current computer science. In order to prepare them to do research, students will read research papers in an area of computer science, write reports, and give presentations.
- Graded: A/F
- Prerequisites: Graduate student in Computer Science or instructor permission.
This course is an advanced course in design and analysis of algorithms. Algorithm design and analysis is a fundamental and important part of computer science. In this course, we will study advanced techniques for designing algorithms, verifying their correctness, and analyzing their computational complexity. Topics covered in this course include Number theoretic algorithms, dynamic programming, graph algorithms, randomized algorithm, binomial heap, Fibonacci heap, linear programming, online algorithms, parallel algorithms, and NP-completeness.
- Graded: A/F
- Prerequisites: Graduate student in Computer Science or instructor permission.
This course explores best practices covering the entire lifecycle of software development. In particular, the knowledge areas of requirements, design, construction, testing, documentation, maintenance, configuration management, and engineering management shall be explored. Best practices in these topic areas will be presented as best practice patterns. The class shall, over the course of the semester, apply these practices in a class project.
- Graded: A/F
- Prerequisites: Graduate student in Computer Science or instructor permission.
This advanced course explores the concepts of modern operating systems. Topics include memory management, processor scheduling, security management, and file system design. Design concepts such as the micro-kernel architecture and object-oriented operating systems are covered. Examples are drawn from a wide variety of operating systems, including Windows and Linux. Students will be expected to perform hands-on experiments with operating system behavior and make minor modifications to existing operating systems.
- Prerequisites: CS 510 Advanced Algorithm Design or instructor permission.
This course is an introduction to computational complexity theory and standard complexity classes. Prior knowledge of discrete mathematics and algorithms is assumed. By investigating the amount of resources (like time, memory …) to solve computational problems, we classify them into different complexity classes and explore the relationship between these classes. Topics include deterministic and nondeterministic Turing machines, diagonalization, decidable and undecidable languages, DTIME and NTIME complexity classes, P, NP and coNP classes, polynomial-time reductions, NP-hard and NP-complete problems, space complexity, polynomial hierarchy, Boolean circuits, non-uniform complexity, and randomized computation.
- Graded: A/F
- Prerequisites: CS 510 or instructor permission.
This is a course on automata, formal languages, and computability. Topics include context-free grammars, parsing, normal forms, deterministic and nondeterministic finite automata, regular languages, pumping lemma, push-down automata, and deterministic parsing, deterministic and nondeterministic Turing machines.
- Graded: A/F
- Prerequisites: CS (510) Advanced Algorithm Design or instructor permission.
This course provides an introduction to the fundamental ideas, concepts, and tools related to using randomness in computation. The ability of computers to generate random sequences and the fact that random bits can be used to design more efficient algorithms are among the most notable and surprising advancements in computer science. Topics covered in this course include equality testing, Markov and Chebyshev inequalities, median finding, perfect hashing families, Chernoff bound and its applications, polynomial identity testing, the probabilistic method, the method of conditional probabilities, Randomized Data Structures, Markov Chains, randomized complexity classes, and derandomization.
- Graded: A/F
- Prerequisites: Graduate student in Computer Science or instructor permission.
This advanced course explores the concepts of modern networks and network applications. Topics includeIPv4, IPv6, distributed hash tables, and various network APIs. Examples are drawn from a wide variety of application environments.
- Graded: A/F
- Prerequisites: Graduate student in Computer Science or instructor permission.
This course explores the fundamental aspects of modern programming languages with respect to semantic and syntax. Using a rigorous approach, we examine the design and implementation of programming languages. More specifically, by using axiomatic, operational, and denotational semantics, we formalize the intended execution and implementation of languages. We design and implement a programming language with a focus on precise and formal investigation of its features. We see how design choices affect the implementation of a programming languages. This course is not a survey of existing programming language paradigm.
- Graded: A/F
- Prerequisites: Graduate student in Computer Science or instructor permission.
This course covers many of the fundamental techniques and concepts in functional programming. We will look at many important and powerful features of functional programming languages including algebraic data types, pattern matching, higher-order functions, type classes, and polymorphism. We will also cover some theoretical aspects of functional programming including (typed) lambda calculus and structural induction.
- Graded: A/F
- Prerequisites: Graduate student in Computer Science or instructor permission.
In this course, we study algorithms for writing computer programs that improve with experience. The basic theory of machine learning will be covered, including concepts such as hypothesis space, bias, overfitting, training sets, and testing sets. We will also dive into the details of specific machine learning techniques, including decision trees, Bayesian classifiers, instance-based learning, and artificial neural networks. The course is focused primarily on supervised learning, though other approaches (semi-supervised, un-supervised, and reinforcement learning) will be explored as well.
- Graded: A/F
- Prerequisites: CS 422 Algorithms Design and Analysis, or instructor permission.
This course is an introduction to a class of algorithms based on the long term design process of natural evolution. It covers the major operators of Darwinian selection, variation, and recombination and how these can be applied together to solve problems in search, optimization, and machine learning. The course covers both practical implementation and application to real-world problems as well as current theoretical results. The course includes an overview of the major types of evolutionary algorithms and application areas, including genetic algorithms, evolution strategies, genetic programming, artificial life, artificial immune systems, learning classifier systems, evolving neural networks, co-evolution, and evolutionary robotics. A project will focus on using the best evolutionary approach, efficiently implemented on parallel hardware, to solve one challenging problem such as multi-objective optimization, engineering design, human-competitive game AI, or an open problem in NP-Complete.
- Graded: A/F
- Prerequisites: Graduate student in Computer Science or instructor permission.
This advanced course explores the concepts of databases, both traditional SQL based databases and NoSQL variants. Topics include relations and tables in SQL, union operations, group operations, SQL permissions, SQL implementations, advantages and disadvantages of NoSQL databases, MongoDB, and Memcached.
- Graded: A/F
- Prerequisites: Graduate student in Computer Science, instructor permission, and approval of department.
Independent research or study in the area of Computer Science is pursued by qualified students under the supervision of a member of the faculty within the Computer Science Committee of the Department of Mathematics and Computer Science. Supervisor and research problem must be selected prior to enrollment in this course.
- Graded: A/F
- Prerequisites: Instructor permission and approval of department.
Independent research or study in the area of Computer Science is pursued by qualified students under the supervision of a member of the faculty within the Computer Science Committee of the Department of Mathematics and Computer Science. Supervisor and research problem must be selected prior to enrollment in this course. At the conclusion of the course, a written project must be submitted. This report must be approved by student’s graduate committee. The student should consult the Mathematics and Computer Science department and the College of Graduate Studies and Research for specific requirements.
- Graded: A/F
- Prerequisites: Graduate student in Computer Science or instructor permission.
Topics reflecting special interest of students and staff.
- Graded: A/F
- Prerequisites: Graduate student in Computer Science or instructor permission.
Individual investigations of a special topic in computer science.
- Graded: A/F
- Prerequisites: CS 589, instructor permission, and approval of department.
At the conclusion of the course, a written thesis acceptable to the student's graduate committee and to the College of Graduate Studies must be filed in triplicate. The student should consult the department and the College of Graduate Studies for specific requirements.