
CMSC H101B Fluency with Information Technology A study of the skills, concepts and capabilities involved in the design, implementation and effective use of information technology. Using a variety of quantitative techniques, we will explore a range of uses of information technology in various fields. (Dougherty) CMSC B110 Introduction to Computing An introduction to the nature, subject matter and branches of computer science as an academic discipline, and the nature, development, coding, testing, documenting and analysis of the efficiency and limitations of algorithms. Also includes the social context of computing (risks, liabilities, intellectual property and infringement). (Blank, Kumar, Division II and Quantitative Skills) CMSC B120 Visualizing Information An introduction to visualization of complex data through computer manipulation. Explores the tools necessary to allow the human mind to make sense of vast amounts of data collected in many fields of study. Topics: 2D/3D representations, programming techniques, data conversion principles, color representation and introduction to virtual reality. (Xu, Quantitative Skills) CMSC H130 Foundations of Rigorous Thinking Develops rigorous thinking skills through the linguistic foundations of mathematics: logic and sets. Emphasis on using symbology to represent abstract objects and the application of formal reasoning to situations in computer science. (Lindell) Not offered in 200506. CMSC H187B Computing Across the Sciences This course covers the uses and internal workings of computational techniques used to study continuous and discrete systems in a variety of sciences. The first half covers numerical techniques for simulation and optimization, important in the analysis of continuous systems, and the second covers discrete systems emphasizing biological sequence alignment with DNA and proteins. No prior experience with programming is required. Prerequisite: One semester of calculus; one semester of any lab science is also highly recommended. (Wonnacott, Meneely, Division II) CMSC H205A Introduction to Computer Science A rigorous yearlong introduction to the fundamental concepts of computer science intended for students interested in doing more advanced work in technical and scientific fields. Includes the fundamental data structures of computer science and their algorithms. Examples and exercises will stress the mathematical aspects of the discipline, with a strong emphasis on programming and analytical problemsolving skills. Students without a strong (secondary school) mathematics or programming experience should take Computer Science 100 instead. (Wonnacott, Dougherty, Division II and Quantitative Skills) CMSC B206 Introduction to Data Structures Introduction to the fundamental algorithms and data structures of computer science: sorting, searching, recursion, backtrack search, lists, stacks, queues, trees, graphs, dictionaries. Introduction to the analysis of algorithms. Prerequisite: Computer Science 205 or 110, or permission of instructor. (Xu, Blank, Dougherty, Wonnacott, Division II and Quantitative Skills) CMSC H210A Linear Optimization and Game Theory Covers in depth the mathematics of optimization problems with a finite number of variables subject to constraints. Applications of linear programming to the theory of matrix games and network flows are covered, as well as an introduction to nonlinear programming. Emphasis is on the structure of optimal solutions, algorithms to find them, and the underlying theory that explains both. (Butler, Division II and Quantitative Skills) CMSC B212 Computer Graphics Presents the fundamental principles of computer graphics: data structures for representing objects to be viewed, and algorithms for generating images from representations. Prerequisite: Mathematics 203 or 215, or permission of instructor. (Xu) Not offered in 200506. CMSC H225A Fundamentals of Database Systems An introduction to the principles of relational database design and use, including the entity/relationship data model and the logical algebra/calculus model behind query languages. An integrated laboratory component covers declarative programming using the international standard SQL. Prerequisites: Computer Science 206 and 231. (Lindell, Division II) Not offered in 200506. CMSC B231 Discrete Mathematics An introduction to discrete mathematics with strong applications to computer science. Topics include set theory, functions and relations, propositional logic, proof techniques, difference equations, graphs, and trees. (Weaver, Division II and Quantitative Skills; crosslisted as MATH B231 and PHIL B230) CMSC H235A Information and Coding Theory Covers the mathematical theory of the transmission (sending or storing) of information. Included are encoding and decoding techniques, both for the purposes of data compression and for the detection and correction of errors. (Lindell) Not offered in 200506. CMSC B240 Computer Organization A lecture/laboratory course studying the hierarchical design of modern digital computers. Combinatorial and sequential logic elements; construction of microprocessors; instruction sets; assembly language programming. Lectures cover the theoretical aspects of machine architecture. In the laboratory, designs discussed in lecture are constructed in software. Prerequisite: Computer Science 206 or permission of instructor. (Kumar, Division II) CMSC B245 Principles of Programming Languages An introduction to a wide range of topics relating to programming languages with an emphasis on abstraction and design. Design issues relevant to the implementation of programming languages are discussed, including a review and indepth treatment of mechanisms for sequence control, the runtime structure of programming languages and programming in the large. The course has a strong lab component where students get to construct large programs in at least three different imperative programming languages. (Wonnacott, Division II and Quantitative Skills) CMSC B246 Programming Paradigms Topics course; course content varies. Topic for 200506 is Programming in UNIX and C. Provides an indepth introduction to C and C++, as well as programming principles such as abstraction, encapsulation and modularization. Another focus of the class is to gain proficiency in the UNIX operating system. Assumes familiarity with conditionals, loops, functions and arrays and will focus on Cspecific topics such as pointer manipulations, dynamic memory allocation and abstract data types. An excellent preparation for classes such as operating systems and software engineering principles and programming techniques to facilitate mediumscaled development projects. Prerequisite: Computer Science 205a or 110. (Xu, Division II and Quantitative Skills) CMSC B250 Computational Models in the Sciences Introductory survey of theoretical methods in the sciences. Design, implementation, interpretation, evaluation of models. Conceptual, analytical, computational models; simulations; evolutionary algorithms; optimality models; role of theory in science. Case studies from a variety of natural and social sciences. (Wong, Division II and Quantitative Skills; crosslisted as BIOL B250 and GEOL B250) CMSC B325 Computational Linguistics Introduction to computational models of understanding and processing human languages. How elements of linguistics, computer science, and artificial intelligence can be combined to help computers process human language and to help linguists understand language through computer models. Topics covered: syntax, semantics, pragmatics, generation and knowledge representation techniques. Prerequisite: some background in linguistics or computer science. (Kumar) CMSC B330 Algorithms: Design and Practice This course examines the applications of algorithms to the accomplishments of various programming tasks. The focus will be on understanding of problemsolving methods, along with the construction of algorithms, rather than emphasizing formal proving methodologies. Topics include divide and conquer, approximations for NPComplete problems, data mining and parallel algorithms. Prerequisites: Computer Science 206 and 231. (Kumar, Division II and Quantitative Skills) CMSC H340B Analysis of Algorithms Qualitative and quantitative analysis of algorithms and their corresponding data structures from a precise mathematical point of view. Performance bounds, asymptotic and probabilistic analysis, worstcase and averagecase behavior. Correctness and complexity. Particular classes of algorithms such as sorting and searching are studied in detail. Prerequisites: Computer Science 206 and some additional mathematics at the 200 level, or permission of instructor. (Lindell) Not offered in 200506. CMSC H345B Theory of Computation Introduction to automata theory, formal languages and complexity. Introduction to the mathematical foundations of computer science: finite state automata, formal languages and grammars, Turing machines, computability, unsolvability and computational complexity. Prerequisites: Computer Science 206, and some additional mathematics at the 200 level, or permission of instructor. (Lindell) CMSC B350 Compiler Design: Theory and Practice An introduction to compiler and interpreter design, with emphasis on practical solutions, using compilerwriting tools in UNIX and the C programming language. Topics covered include lexical scanners, contextfree languages and pushdown automata, symbol table design, runtime memory allocation, machine language and optimization. (Wonnacott) CMSC B355 Operating Systems A practical introduction to modern operating systems, using case studies from UNIX, VMS, MSDOS and the Macintosh. Lab sessions will explore the implementation of abstract concepts, such as resource allocation and deadlock. Topics include file systems, memory allocation schemes, semaphores and critical sections, device drivers, multiprocessing and resource sharing. (Xu) CMSC B361 Emergence A multidisciplinary exploration of the interactions underlying both real and simulated systems, such as ant colonies, economies, brains, earthquakes, biological evolution, artificial evolution, computers and life. These emergent systems are often characterized by simple, local interactions that collectively produce global phenomena not apparent in the local interactions. (Blank; crosslisted as BIOL B361) CMSC B371 Cognitive Science Cognitive science is the interdisciplinary study of intelligence in mechanical and organic systems. In this introductory course, we examine many topics from computer science, linguistics, neuroscience, mathematics, philosophy and psychology. Can a computer be intelligent? How do neurons give rise to thinking? What is consciousness? These are some of the questions we will examine. No prior knowledge or experience with any of the subfields is assumed or necessary. Prerequisite: permission of instructor. (Blank) Not offered in 200506. CMSC B372 Artificial Intelligence Survey of Artificial Intelligence (AI), the study of how to program computers to behave in ways normally attributed to "intelligence" when observed in humans. Topics include heuristic versus algorithmic programming; cognitive simulation versus machine intelligence; problemsolving; inference; natural language understanding; scene analysis; learning; decisionmaking. Topics are illustrated by programs from literature, programming projects in appropriate languages and building small robots. (Kumar, Division II and Quantitative Skills; crosslisted as PHIL B372) Not offered in 200506. CMSC B380 Recent Advances in Computer Science A topical course facilitating an indepth study on a current topic in computer science. Prerequisite: permission of instructor. (staff, Division II) Not offered in 200506. CMSC H392A Advanced Topics: High Performance Scientific Computing Prerequisite: permission of instructor. (Dougherty) CMSC H394B Advanced Topics in Discrete Mathematics and Computer Science (Lindell) Not offered in 200506. CMSC B403 Supervised Work/Independent Study 