NCSC 6021 Analysis of Algorithms (3 sem. cr.) This course is an introductory graduate course and advanced undergraduate course on the design and analysis of algorithms. Students learn algorithm design techniques such as divide-and-conquer, dynamic programming, and greedy algorithms for a variety of tasks such as sorting, searching, and graph problems. The course also covers lower bounds and computational models.
NCSC 6031 Introduction to Parallel Computing (3 sem. cr.)
The ever increasing computational and storage requirements of scientific, engineering, and commercial applications provide strong motivation for the use of parallel computing platforms. This course provides an overview of diverse parallel platforms and a detailed discussion of parallel programming APIs and core parallel algorithms. After an overview of physical organization, communication mechanisms, metrics, and principles of algorithm design, students learn about messaging APIs (MPI) and threads (POSIX and OpenMP), as well as parallel algorithms such as dense matrix algorithms, graph algorithms, sorting, discrete optimization, and dynamic programming.
NCSC 6101 Operating Systems Principles (3 sem. cr.)
This course is concerned with the principles and practice of modern operating systems. Students examine core operating system principles: kernel design, processes and threads, concurrency and synchronization, deadlock, resource management, memory management and virtual memory, I/O and file systems, distributed file systems, protection, and security. They also examine the design and implementation of different operating system features across a wide variety of systems, including UNIX-Linux, Solaris, Windows, and a teaching operating system called Nachos. They learn about the inner workings of the operating system as well as the exposed systems programming interface. Several programming projects are used to gain hands-on experience with real operating systems issues.
NCSC 6121 Programming Language Principles (3 sem. cr.)
This course covers the central principles of designing and implementing programming languages, including the four main paradigms of programming: imperative, object-oriented, functional, and logic. Programming language specification (syntax and semantics) is emphasized, and special attention is given to the functional paradigm because of its usefulness in specifying the semantics of imperative languages. Students implement portions of a programming language in a class project.
NCSC 6321 Internet Protocols (3 sem. cr.)
The Internet is one of the most important technical inventions of the last 50 years. In this course, students explore the TCP/IP family of protocols, including IP, UDP, TCP, routing, DNS, and ICMP. This course introduces several protocols: for each protocol, students discuss its function(s), messages, principles of operation, and design subtleties. Students also briefly review the application programming interface for distributed applications (i.e., sockets programming) and some factors in client/server design. Security is one of the design aspects repeatedly featured. Homework assignments include hands-on networking experiments. A project gives the opportunity to learn one protocol or property of the Internet in depth.
NCSC 6331 Computer Networks I (3 sem. cr.)
This course is an intensive study of the network architecture and its protocols. Topics include OSI and TCP/IP network architectures, analog and digital transmission, error correction and detection, data link protocols, multiplexing and switching, ADSL, HDSL, RADSL, SDSL, VDSL, cable networks, optical transmissions, Ethernet, fast Ethernet, Gbps Ethernet, wireless LANs, token bus, token ring, FDDI, DQDB, SMDS, ISDN and Broadband ISDN, X.25, Frame Relay, PPP, SONET/SDH, ATM, and various routing protocols.
NCSC 6333 Data Communication Networks (3 sem. cr.)
This course introduces students to the fundamentals of data communication networks, their architecture, principles of operations, and performance analyses. Students are expected to have a strong mathematical background and an understanding of probability theory.
NCSC 6401 Database Management Systems (3 sem. cr.)
This course helps students learn about relational database management systems, which are a core technology for the information age. Students discuss database concepts underlying the important application domains of informed decision-making and work-flow automation.
NCSC 6431 Distributed Database Systems (3 sem. cr.)
This course examines the fundamental issues in large distributed systems, which are motivated by the computer networking and distribution of processors, and control. Discussion topics include the theory, design, implementation, and performance of large systems, including concurrency, consistency, integrity, reliability, privacy, and security in distributed systems. Advanced features of the course include research related to mobile data management, streaming databases, and peer-to-peer systems.
NCSC 6461 Data Mining (3 sem. cr.)
Many companies that gather huge amounts of electronic data have begun applying data mining techniques to discover and extract pieces of information useful for making smart business decisions. Effective data mining, as opposed to data dredging, requires an understanding of concepts including exploratory data analysis, pattern recognition, machine learning, heterogeneous databases, parallel processing, and data visualization, as well as knowledge of the problem domain. This course focuses on basic techniques for data mining, including methods useful for analyzing information from the World Wide Web. While techniques for database representation/modeling, clustering, classification, finding associations and sequence processing are studied, emphasis is placed on the issues of algorithm scalability, performance, interpretability, and the ability to deal with garbage data.
NCSC 6831 Distributed Computing Systems (3 sem. cr.)
This course examines the core concepts of distributed computing systems and cutting-edge examples of real systems that apply those concepts. Students survey “building block” topics in network communication, RPC, naming, fault tolerance, scheduling, consistency, and distributed file systems. They investigate systems and applications that are putting the concepts into practice in the areas of Internet services, Web services, grids, and peer-to-peer systems. The course consists of textbook and Internet readings, research papers, and several distributed programming projects.
NCSC 6993 Independent Study (1–3 sem. cr.)
Students complete an independent study on a computer science topic with course objectives determined in consultation with a supervising instructor.
NCSC 6994 Directed Research (1–3 sem. cr.)
Students research an area of computer science under the supervision of an instructor. The research problem is determined in consultation with the supervising instructor.
NCSC 8011 Advanced Data Structures (3 sem. cr.)
This course develops efficient data structures used to obtain more efficient solutions to classical problems, such as those based on graph theoretical models, as well as problems that arise in application areas of contemporary interest.
NCSC 8997 Thesis (3 sem. cr.)
Students may conduct thesis research to complete the M.S. in Computer Science program, in lieu of general elective courses. Students may register for this course for a maximum of two semesters, for a total of six semester credits.