Location: Bowdoin / The College Catalogue / Courses / Computer Science / Courses

The College Catalogue

Computer Science – Courses

Introductory, Intermediate, and Advanced Courses

1101 {101} a - MCSR. Introduction to Computer Science. Every semester. Sean Barker and Mohammad Irfan.

What is computer science, what are its applications in other disciplines, and what is its impact in society? A step-by-step introduction to the art of problem solving using the computer and programming. Provides a broad introduction to computer science and programming through real-life applications. Weekly labs provide experiments with the concepts presented in class. Assumes no prior knowledge of computers or programming. Final examination grade must be C or better to serve as a prerequisite for Computer Science 2101.

2101 {210} a - MCSR. Data Structures. Every semester. Stephen Majercik.

Solving complex algorithmic problems requires the use of appropriate data structures such as stacks, priority queues, search trees, dictionaries, hash tables, and graphs. It also requires the ability to measure the efficiency of operations such as sorting and searching in order to make effective choices among alternative solutions. Offers a study of data structures, their efficiency, and their use in solving computational problems. Laboratory exercises provide an opportunity to design and implement these structures. Students interested in taking Computer Science 2101 {210} are required to pass the computer science placement examination with a grade of C or better before class starts.

Prerequisite: Computer Science 1101 {101} with a grade of C or better on the final examination; placement above Computer Science 1101 {101}; or permission of the instructor.

2200 {231} a - MCSR. Algorithms. Fall 2014 and Spring 2015. Laura Toma.

An introductory course on the design and analysis of algorithms. Introduces a number of basic algorithms for a variety of problems such as searching, sorting, selection, and graph problems (e.g., spanning trees and shortest paths). Discusses analysis techniques, such as recurrences and amortization, as well as algorithm design paradigms such as divide-and-conquer, dynamic programming, and greedy algorithms.

Prerequisite: Computer Science 2101 {210} or permission of the instructor.

[2210 {289} a - MCSR. Theory of Computation.]

[2300 {220} a. Computer Organization.]

2310 {240} a - MCSR. Operating Systems. Fall 2014. Sean Barker.

An introduction to operating systems concepts, design, and implementation. Operating systems (OS) are essential to any computer system and, although we have witnessed rapid changes in applications and in the use of computers, the fundamental concepts that underlie an OS remain the same. Students get hands-on experience experimenting with Linux—a real, widely used, open source OS. Concepts studied are applicable to most operating systems: Windows, OS X, FreeBSD, Solaris. Compares differences in design choices among these other systems. Topics include process management (scheduling, threads, interprocess synchronization, and deadlocks), main memory and virtual memory, file and I/O subsystems, and the basics of OS protection and security.

Prerequisite: Computer Science 2101 {210}, or permission of the instructor.

2325 {250} a - MCSR. Principles of Programming Languages. Fall 2014. Mohammad T. Irfan.

Focuses on different paradigms for solving problems and their representation in programming languages. These paradigms correspond to distinct ways of thinking about problems. For example, “functional” languages (such as Haskell) focus attention on the behavioral aspects of the real-world phenomena being modeled; “logic programming” languages (such as Prolog) focus attention on the declarative aspects of problem-solving. Covers principles of language design and implementation including syntax, semantics, type systems, control structures, and compilers.

Prerequisite: Computer Science 2101 {210} or permission of the instructor.

2400 {270} a - MCSR. Artificial Intelligence. Fall 2014. Stephen Majercik.

Explores the principles and techniques involved in programming computers to do tasks that would require intelligence if people did them. State-space and heuristic search techniques, logic and other knowledge representations, reinforcement learning, neural networks, and other approaches are applied to a variety of problems with an emphasis on agent-based approaches.

Prerequisite: Computer Science 2101 {210} or permission of the instructor.

[2505 {281} a. Mobile Computing.]

2970–2973 {291–294} a. Intermediate Independent Study in Computer Science. The Department.

2999 {299} a. Intermediate Collaborative Study in Computer Science. The Department.

3225 {350} a. GIS Algorithms and Data Structures.
Fall 2014. Laura Toma.

Geographic information systems (GIS) handle geographical data such as boundaries of countries; course of rivers; height of mountains; and location of cities, roads, railways, and power lines. GIS can help determine the closest public hospital, find areas susceptible to flooding or erosion, track the position of a car on a map, or find the shortest route from one location to another. Because GIS deals with large datasets, making it important to process data efficiently, it provides a rich source of problems in computer science. Topics covered include data representation, triangulation, range searching, point location, map overlay, meshes and quadtrees, terrain simplification, and visualization.

Prerequisite: Computer Science 2101 {210} and 2200 {231}, or permission of the instructor.

3250 a. Computational Geometry. Spring 2016.

Computational geometry studies algorithms for collections of geometric objects such as points, lines, polygons, and planes. Geometric algorithms arise in areas such as computer graphics, robotics, or image processing. Covers the basic geometric problems and techniques: polygon triangulations, convex hulls, Delaunay triangulations and Voronoi diagrams, visibility, geometric searching, and motion planning.

Prerequisite: Computer Science 2101 {210} and 2200 {231}, or permission of the instructor.

3350 a. Social and Economic Networks. Spring 2015. Mohammad Irfan.

Examines the social and economic aspects of today’s connected world from a multitude of perspectives: network science, sociology, economics, and computer science. Addresses these fundamental questions: What is a network? What does a real-world network look like? What are its effects on various social and behavioral phenomena, such as smoking, obesity, or even videos going viral? Studies the network structure of the Internet, how companies like Google search it, and how they make money doing so. Also addresses further economic implications of networks, including networked economies and markets.

[3355 {315} a. Open Source Software Development.]

[3400 {355} a. Cognitive Architecture.]

3425 {375} a. Optimization and Uncertainty. Spring 2016.

Optimization problems and the need to cope with uncertainty arise frequently in the real world. A numeric framework, rather than the symbolic one of traditional artificial intelligence, is useful for expressing such problems. In addition to providing a way of dealing with uncertainty, this approach sometimes permits performance guarantees for algorithms. Topics include constraint satisfaction, systematic and non-systematic search techniques, probabilistic inference and planning, and population-based optimization techniques (e.g., genetic algorithms and ant colony optimization).

Prerequisite: Computer Science 2101 {210} or permission of the instructor.

3440 {344} a. Nature-Inspired Computation. Spring 2015. Stephen M. Majercik.

The size and complexity of real-world optimization problems can make it difficult to find optimal solutions in an acceptable amount of time. Researchers have turned to nature for inspiration in developing techniques that can find high-quality solutions in a reasonable amount of time; the resulting algorithms have been applied successfully to a wide range of optimization problems. Covers the most widely used algorithms, exploring their natural inspiration, their structure and effectiveness, and applications. Topics will be drawn from: genetic algorithms, particle swarm optimization, ant colony optimization, honeybee algorithms, immune system algorithms, and bacteria optimization algorithms. Requirements include labs, programming assignments, and a larger final project.

Prerequisite: Computer Science 2101 {210} or permission of the instructor.

4000–4003 {401–404} a. Advanced Independent Study in Computer Science. The Department.

4029 {405} a. Advanced Collaborative Study in Computer Science. The Department.

4050–4051 a. Honors Project in Computer Science. The Department.

Online Catalogue content is current as of August 1, 2014. For most current course information, use the online course finder. Also see Addenda.