Books by Brown CS Authors
Algorithm Design: Foundations, Analysis, and Internet Examples
Michael T. Goodrich, Roberto Tamassia
Wiley; International Student Edition
Michael Goodrich and Roberto Tamassia, authors of the successful, Data Structures and Algorithms in Java, 2/e, have written Algorithm Engineering, a text designed to provide a comprehensive introduction to the design, implementation and analysis of computer algorithms and data structures from a modern perspective. This book offers theoretical analysis techniques as well as algorithmic design patterns and experimental methods for the engineering of algorithms. Market: Computer Scientists; Programmers.
Artificial Intelligence Programming
Christopher K. Riesbeck, Drew V. McDermott, J.Meehan, Eugene Charniak
Lawrence Erlbaum Associates; 2nd edition
Artificial intelligence research has thrived in the years since this best-selling AI classic was first published. The revision encompasses these advances by adapting its coding to Common Lisp, the well-documented language standard, and by bringing together even more useful programming tools. Today's programmers in AI will find this volume's superior coverage of programming techniques and easily applicable style anything but common.
Artificial Intelligence: Theory and Practice
Addison Wesley; 1st edition
Emphasize both scientific theory and practical applications with Artifical Intelligence: Theory and Practice, a new text by Thomas Dean with James Allen and Yiannis Aloimonos. This modern, balanced introduction to artificial intelligence examines both the representational and computational issues that arise in developing systems capable of machine intelligence. The authors discuss these issues in terms of their syntax, semantics, and computation and offer detailed coverage of both traditional symbolic reasoning techniques and alternative techniques such as neural networks, probabilistic reasoning, and image processing. In addition, they emphasize the role of experimental computer science by showing the practical implementation of algorithms by first using pseudocode and then LISP code. To ensure that readers fully understand the topic and its applications, the authors provide motivating examples throughout. AI in Practice boxes appear in each chapter, demonstrating real-world uses of artificial intelligence by NASA, General Motors Corporation, Microsoft Corporation, and other companies. LISP Implementation appendices are found at the end of most chapters, providing fully-documented implementations of important algorithms (also available in Scheme and C++ implementations via ftp). These are carefully coordinated with the discussions in the chapters making it easy for students to complete computational experiments. Plus, the text features summaries, exercises, and background sections describing related work at the end of each chapter.
Complexity of Computing
John E. Savage
Krieger Publishing Company
Computational Geometry: An Introduction
Franco P. Preparata, Michael Ian Shamos
Springer; 1 edition
From the reviews: "This book offers a coherent treatment, at the graduate textbook level, of the field that has come to be known in the last decade or so as computational geometry. ... ... The book is well organized and lucidly written; a timely contribution by two founders of the field. It clearly demonstrates that computational geometry in the plane is now a fairly well-understood branch of computer science and mathematics. It also points the way to the solution of the more challenging problems in dimensions higher than two." [Mathematical Reviews]
Computer Graphics: Principles and Practice in C (2nd Edition)
James D. Foley, Andries van Dam, Steven K. Feiner, John F. Hughes
Addison-Wesley Professional; 2 edition
Uniquely combines current concepts and practical applications in computer graphics. Provides the most comprehensive, authoritative, and up-to-date coverage of the field. DLC: Computer graphics.
Constraint Satisfaction in Logic Programming
Pascal Van Hentenryck
The MIT Press
This book tackles classic problems from operations research and circuit design using a logic programming language embedding consistency techniques, a paradigm emerging from artificial intelligence research. Van Hentenryck proposes a new approach to solving discrete combinatorial problems using these techniques. Logic programming serves as a convenient language for stating combinatorial problems, but its "generate and test" paradigm leads to inefficient programs. Van Hentenryck's approach preserves one of the most useful features of logic programming - the duality of its semantics - yet allows a short development time for the programs while preserving most of the efficiency of special purpose programs written in a procedural language. Embedding consistency techniques in logic programming allows for ease and flexibility of programming and short development time because constraint propagation and tree-search programming are abstracted away from the user. It also enables logic programs to be executed efficiently as consistency techniques permit an active use of constraints to remove combinations of values that cannot appear in a solution Van Hentenryck presents a comprehensive overview of this new approach from its theoretical foundations to its design and implementation, including applications to real life combinatorial problems. The ideas introduced in Constraint Satisfaction in Logic Programming have been used successfully to solve more than a dozen practical problems in operations research and circuit design, including disjunctive scheduling, warehouse location, cutting stock car sequencing, and microcode labeling problems.
Constraint-Based Local Search
Pascal Van Hentenryck and Laurent Michel
The MIT Press
The ubiquity of combinatorial optimization problems in our society is illustrated by the novel application areas for optimization technology, which range from supply chain management to sports tournament scheduling. Over the last two decades, constraint programming has emerged as a fundamental methodology to solve a variety of combinatorial problems, and rich constraint programming languages have been developed for expressing and combining constraints and specifying search procedures at a high level of abstraction. Local search approaches to combinatorial optimization are able to isolate optimal or near-optimal solutions within reasonable time constraints. This book introduces a method for solving combinatorial optimization problems that combines constraint programming and local search, using constraints to describe and control local search, and a programming language, COMET, that supports both modeling and search abstractions in the spirit of constraint programming. After an overview of local search including neighborhoods, heuristics, and metaheuristics, the book presents the architecture and modeling and search components of constraint-based local search and describes how constraint-based local search is supported in COMET. The book describes a variety of applications, arranged by meta-heuristics. It presents scheduling applications, along with the background necessary to understand these challenging problems. The book also includes a number of satisfiability problems, illustrating the ability of constraint-based local search approaches to cope with both satisfiability and optimization problems in a uniform fashion.
Data Structures and Algorithms in C++
Michael T. Goodrich, Roberto Tamassia, David M. Mount
John Wiley & Sons, Inc.
Provides a comprehensive introduction to data structures and algorithms, including their design, analysis, and implementation. Each data structure is presented using ADTs and their respective implementations. Helps provide an understanding of the wide spectrum of skills ranging from sound algorithm and data structure design to efficient implementation and coding of these designs in C++.
Data Structures and Algorithms in Java, 4th Edition
Michael T. Goodrich, Roberto Tamassia
John Wiley & Sons, Inc.
Fundamental data structures in a consistent object-oriented framework Now revised to reflect the innovations of Java 5.0, Goodrich and Tamassia's Fourth Edition of Data Structures and Algorithms in Java continues to offer accessible coverage of fundamental data structures, using a consistent object-oriented framework. The authors provide intuition, description, and analysis of fundamental data structures and algorithms. Numerous illustrations, web-based animations, and simplified mathematical analyses justify important analytical concepts. Key Features of the Fourth Edition: * Updates to Java 5.0 include new sections on generics and other Java 5.0 features, and revised code fragments, examples, and case studies to conform to Java 5.0. * Hundreds of exercises, including many that are new to this edition, promote creativity and help readers learn how to think like programmers and reinforce important concepts. * New case studies illustrate topics such as web browsers, board games, and encryption. * A new early chapter covers Arrays, Linked Lists, and Recursion. * A new final chapter on Memory covers memory management and external memory data structures and algorithms. * Java code examples are used extensively, with source code provided on the website. * Online animations and effective in-text art illustrate data structures and algorithms in a clear, visual manner.
The Field Programming Environment: A Friendly Integrated Environment for Learning and Development
Steven P. Reiss
Kluwer Academic Publishers
FIELD has been a remarkably successful research project. The ideas first exhibited in the environment now form the basis for most of the current generation of programming environments, including Hewlett-Packard's Softbench, DEC's FUSE, Sun's Tooltalk, Lucid's Energize, and SGI's Codevision. FIELD pioneered the notion of broadcast messaging as a basis for tool integration. Moreover, many of the other tool concepts introduced in FIELD have made their way into these environments. Thus in discussing the FIELD environment, this book actually explains the inner workings of today's programming environments. The book will be valuable for those interested in the development of programming tools and environments, as well as serious users of programming environments. It will also be of interest to anyone undertaking a large software project, both by introducing the software tools needed to work on such a project and by demonstrating the concepts of message-based integration which can be applied to a variety of domains.
Frontiers of Human-Centred Computing, Online Communities and Virtual Environment
Rae Earnshaw, Richard Guedj, Andries van Dam and John Vince (Eds)
This volume presents the results of a joint National Science Foundation and European Commission Workshop which was set up to identify the future key strategic research directions in the areas of human-centred interaction, online communities and virtual environments. A research agenda is proposed for each area. There is an urgent need to make interaction more centred around human needs and capabilities, and to consider the human environment in virtual environments and in other contextual information-processing activities. The overall goal is to make users more effective in their information or communication tasks by reducing learning times, speeding up performance, lowering error rates, facilitating retention, and increasing subjective satisfaction. Online communities is an area of rapid and dynamic growth with new kinds of interaction, behaviours, communication, and relationship to the world of users and information. Guidelines for basic user interface design need to be extended to accommodate these new technologies and interfaces to users. Fruitful lines of research investigation in all these areas are set out in this book.
Fundamentals of Interactive Computer Graphics
Andries van Dam, James D. Foley
This book presents graphics concepts and recent advances in graphics hardware and software. A complete graphics application program is developed in Pascal, based on both the ACM SIGGRAPH core system of grfaphics subroutines and the newly adopted GKS international 2D standard.
Graph Drawing: Algorithms for the Visualization of Graphs
Ioannis G. Tollis, Giuseppe Di Battista, Peter Eades, Roberto Tamassia
Prentice Hall; 1st edition
This book is designed to describe fundamental algorithmic techniques for constructing drawings of graphs. Suitable as a book or reference manual, its chapters offer an accurate, accessible reflection of the rapidly expanding field of graph drawing.
How to Design Programs: An Introduction to Programming and Computing
Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, Shriram Krishnamurthi
The MIT Press
This introduction to programming places computer science in the core of a liberal arts education. Unlike other introductory books, it focuses on the program design process. This approach fosters a variety of skills--critical reading, analytical thinking, creative synthesis, and attention to detail--that are important for everyone, not just future computer programmers. The book exposes readers to two fundamentally new ideas. First, it presents program design guidelines that show the reader how to analyze a problem statement; how to formulate concise goals; how to make up examples; how to develop an outline of the solution, based on the analysis; how to finish the program; and how to test. Each step produces a well-defined intermediate product. Second, the book comes with a novel programming environment, the first one explicitly designed for beginners. The environment grows with the readers as they master the material in the book until it supports a full-fledged language for the whole spectrum of programming tasks. All the book's support materials are available for free on the Web. The Web site includes the environment, teacher guides, exercises for all levels, solutions, and additional projects.
Introduction to Artificial Intelligence
Eugene Charniak, Drew McDermott
Addison Wesley Publishing Company
Introduction to Computer Engineering
Franco P. Preparata
John Wiley & Sons
Provides a basic knowledge of the organization and operation of computing systems, assuming no prior computer background. Describes the computer at a functional level, including the detailed register structure of the various functional units, and explains techniques for designing digital networks. Discussion develops from simple to complex computers, with consideration given to the hardware-software trade-off (i.e. the simpler the software, the more complex the hardware). The author uses a pedagogical machine to illustrate the computer as an evolving system, then, in the Appendix, relates the model to the Motorola MC68000 microprocessor. Contains many examples, exercises, and references.
Introduction to Computer Graphics
James D. Foley, Andries van Dam, Steven K. Feiner, John F. Hughes, Richard L. Phillips
Addison-Wesley Professional; 1st edition
Most comprehensive and authoritative work in the field. Worked examples have been added to illustrate concepts and techniques, and program code has been written in the C language to enhance the book's usefulness. DLC: Computer graphics.
Models of Computation: Exploring the Power of Computing
John E. Savage
Addison Wesley Publishing Company
In Models of Computation: Exploring the Power of Computing, John Savage re-examines theoretical computer science, offering a fresh approach that gives priority to resource tradeoffs and complexity classifications over the structure of machines and their relationships to languages. This viewpoint reflects a pedagogy motivated by the growing importance of computational models that are more realistic than the abstract ones studied in the 1950s, '60s and early '70s. Assuming only some background in computer organization, Models of Computation uses circuits to simulate machines with memory, thereby making possible an early discussion of P-complete and NP-complete problems. Circuits are also used to demonstrate that tradeoffs between parameters of computation, such as space and time, regulate all computations by machines with memory. Full coverage of formal languages and automata is included along with a substantive treatment of computability. Topics such as space-time tradeoffs, memory hierarchies, parallel computation, and circuit complexity, are integrated throughout the text with an emphasis on finite problems and concrete computational models.
Numerica: A Modeling Language for Global Optimization
Pascal Van Hentenryck, Laurent Michel and Yves Deville
The MIT Press
Many science and engineering applications require the user to find solutions to systems of nonlinear constraints or to optimize a nonlinear function subject to nonlinear constraints. The field of global optimization is the study of methods to find all solutions to systems of nonlinear constraints and all global optima to optimization problems. Numerica is modeling language for global optimization that makes it possible to state nonlinear problems in a form close to the statements traditionally found in textbooks and scientific papers. The constraint-solving algorithm of Numerica is based on a combination of traditional numerical methods such as interval and local methods, and constraint satisfaction techniques. This comprehensive presentation of Numerica describes its design, functions, and implementation. It also discusses how to use Numerica effectively to solve practical problems and reports a number of experimental results. A commercial implementation of Numerica is available from ILOG under the name ILOG Numerica.
The OPL Optimization Programming Language
Pascal Van Hentenryck
The MIT Press
Linear programming, integer programming, and combinatorial optimization problems are ubiquitous in areas such as planning, scheduling, sequencing, resource allocation, design, and configuration, yet they are still challenging to formulate and express. OPL (Optimization Programming Language) is a new modeling language for combinatorial optimization that simplifies the formulation and solution of optimization problems. Perhaps the most significant dimension of OPL is the support for constraint programming, including sophisticated search specifications, logical and higher order constraints, and support for scheduling and resource allocation applications. This book, written by the developer of OPL, is a comprehensive introduction to the OPL programming language and its application to problems in linear and integer programming, constraint programming, and scheduling. Readers should be familiar with combinatorial optimization, at least from an application standpoint. An industrial implementation of OPL is available from the international software company Ilog.
Object Oriented Programming in Pascal: A Graphical Approach
D. Brookshire Conner, David Niguidula, Andries van Dam
Addison Wesley Longman; 1st edition
Covers all of the essential concepts of objectoriented programming, including object re-use, inheritance, virtual methods, and polymorphisms. Paper. DLC: Object-oriented programming (Computer science).
Object-Oriented Programming in Java: A Graphical Approach, Preliminary Edition
Kathryn E. Sanders, Andy van Dam
Addison Wesley; Bk&CD-Rom edition
This principle-driven introduction to programming with Java and its standard Swing graphics library by world-renowned computer science professor Andy van Dam and professor Kate Sanders emphasizes object-oriented design and programming. It covers all important object-oriented programming mechanisms at the beginning of the book-from encapsulation through inheritance, interfaces, and polymorphism. It uses numerous executable examples to teach modularization and other good programming habits that will stay with students for a lifetime. Most of the programming examples and exercises take advantage of the visual appeal of interactive graphics to provide essential motivation for first-time programmers. With Object-Oriented Programming in Java: A Graphical Approach, students will: *Use an approach to learning object-oriented design and programming that has been tested for a decade and used successfully at multiple universities. *Experience reading and writing non-trivial, interactive programs that are systems of cooperating objects. *Capitalize on the powerful features of Java 5.0 including Swing class, generics, and static imports. *Get a good introduction to fundamental data structures (stacks, queues, linked lists and trees) and a complete chapter on design patterns.
Planning and Control
Thomas L. Dean and Michael P. Wellman
Morgan Kaufmann Publishers
Planning and Control explores planning and control by reformulating the two areas in a common control framework, developing the corresponding techniques side-by-side, and identifying opportunities for integrating their ideas and methods. This book is organized around the central roles of prediction, observation, and computation control. The first three chapters deal with predictive models of physical systems based on temporal logic and the differential calculus. Chapter 4 and 5 present some basic concepts in planning and control, including controllability, observability, stability, feedback control, task reduction, conditional plans, and the relationship between goals and preferences. Chapters 6 and 7 consider issues of uncertainty, covering state estimation and the Kalman filter, stochastic dynamic programming, probabilistic modeling, and graph-based decision models. The remaining chapters investigate selected topics in time-critical decision making, adaptive control, and hybrid control architectures. Throughout, the reader is led to consider critical tradeoffs involving the accuracy of prediction, the availability of information from observation, and the costs and benefits of computation in dynamic environments. This book is useful to researchers in artificial intelligence and control theory, and others concerned with the design of complex applications in robotics, automated manufacturing, and time-critical decision support.
A Practical Introduction to Software Design with C++
Steven P. Reiss
Wiley; I.S.ed edition
Learn the tools and techniques needed to design and implement moderate-sized software systems! Do you want to gain the necessary skills to effectively write moderate-sized (10,000 to 50,000 line) programs? Would you like to develop a more advanced understanding of object-oriented design and learn how to implement important design and style rules? Do you want to be able to take a project from the concept stage to completion? This is all possible with Steven Reiss's innovative text, A Pracical Introduction to Software Design with C++. Reiss provides you with all the tools and techniques to enable you to design and implement moderate-sized software systems alone or in a team. The book details the proper use of inheritance, design notations using a simplified form of OMT to describe designs, the use of object libraries such as STL, creating library classes, and the use of design patterns. You'll also find useful discussions on advanced language and programming features such as exception handling, interprocess communication, and debugging tools and techniques.
Probability and Computing: Randomized Algorithms and Probabilistic Analysis
Michael Mitzenmacher, Eli Upfal
Cambridge University Press
Assuming only an elementary background in discrete mathematics, this textbook is an excellent introduction to the probabilistic techniques and paradigms used in the development of probabilistic algorithms and analyses. It includes random sampling, expectations, Markov's and Chevyshev's inequalities, Chernoff bounds, balls and bins models, the probabilistic method, Markov chains, MCMC, martingales, entropy, and other topics. The book is designed to accompany a one- or two-semester course for graduate students in computer science and applied mathematics.
Readings in Object-Oriented Database Systems (The Morgan Kaufmann Series in Data Management Systems)
Stanley B. Zdonik, David Maier
This comprehensive collection is a survey of research in object-oriented databases, offering a substantive overview of the field, section introductions, and over 40 research papers presented in their original scope and detail. The balanced selection of articles presents a confluence of ideas from both the language and database research communities that have contributed to the object-oriented paradigm. The editors develop a general definition and model for object-oriented databases and relate significant research efforts to this framework. Further, the collection explores the fundamental notions behind object-oriented databases, semantic data models, implementation of object-oriented systems, transaction processing, interfaces, and related approaches. Research and theory are balanced by applications to CAD systems, programming environments, and office information systems.
Statistical Language Learning (Language, Speech, and Communication)
The MIT Press; Reprint edition
Eugene Charniak breaks new ground in artificial intelligence research by presenting statistical language processing from an artificial intelligence point of view in a text for researchers and scientists with a traditional computer science background. New, exacting empirical methods are needed to break the deadlock in such areas of artificial intelligence as robotics, knowledge representation, machine learning, machine translation, and natural language processing (NLP). It is time, Charniak observes, to switch paradigms. This text introduces statistical language processing techniques -- word tagging, parsing with probabilistic context free grammars, grammar induction, syntactic disambiguation, semantic word classes, word-sense disambiguation -- along with the underlying mathematics and chapter exercises. Charniak points out that as a method of attacking NLP problems, the statistical approach has several advantages. It is grounded in real text and therefore promises to produce usable results, and it offers an obvious way to approach learning: "one simply gathers statistics."
Talking with Computers: Explorations in the Science and Technology of Computing
Cambridge University Press
Thomas Dean explores a wide range of fundamental topics in computer science, from digital logic and machine language to artificial intelligence and the World Wide Web, explaining how computers and computer programs work and how the various subfields of computer science are interconnected. Dean touches on a number of questions including: How can a computer learn to recognize junk email? What happens when you click on a link in a browser? How can you program a robot to do two things at once? Are there limits to what computers can do? Dean encourages readers to experiment with short programs and fragments of code written in several languages to strip away the mystery and reveal the underlying computational ideas. The accompanying website (www.cs.brown.edu/~tld/talk) provides access to code fragments, tips on finding and installing software, links to online resources, and exercises. Throughout Talking With Computers, Dean conveys his fascination with computers and enthusiasm for working in a field that has changed almost every aspect of our daily lives. Thomas Dean is Professor in the Computer Science Department at Brown University, where he served as Acting Vice President for Computing and Information Services from 2001-2002. He is co-author of Planning and Control (Morgan-Kaufman, 1991) and Artificial Intelligence: Theory and Practice (Addison-Wesley, 1995).