Computer Science Books


Computer Science

This section contains free e-books and guides on Computer Science, some of the resources in this section can be viewed online and some of them can be downloaded.


Recently Added Books

Concurrent Programming Class Notes (PDF 110P)

This note focuses on Concurrent Programming, Parallel Programming, Multi-Processing and Multi-Threading. Topics covered includes: Thread, Properties of a Thread, Lifecycle of a process, Concurrent Hardware, Basic Uniprocessor, Multiprocessors, Basic Hardware, Kessel’s Algorithm, Java Threads Scheduling Model, Compiler Optimization and Mutlithreading, Ticket Algorithm, Bakery Algorithm, Semaphores, Concurrency Problems with Deadlock, Speculative Multithreading (SpMT).

s110 Pages

Concepts of Concurrent Programming

This note is largely concerned with explicit concurrency, where concurrent behavior is specified by the program designer. It also includes a brief introduction to performance-oriented concurrency, where concurrency is used to improve program performance by taking advantage of hardware support for parallel processing. Topics covered includes: Nature of Concurrent Programs, Problems in Concurrent Programs, Properties of Concurrent Programs, Executing Concurrent Programs, Program Construction and Common Applications.

s51 Pages

Introduction to Artificial Intelligence Lecture Notes

This book explains the following topics: Principles of knowledge-based search techniques, automatic deduction, knowledge representation using predicate logic, machine learning, probabilistic reasoning, Applications in tasks such as problem solving, data mining, game playing, natural language understanding, computer vision, speech recognition, and robotics.

sNA Pages

Artificial Intelligence Lecture Materials

This note will provide an introduction to the field of Artificial Intelligence. It will cover a number of AI ideas and techniques, as well as give you a brief introduction to symbolic computing.

sNA Pages

Compilers Lecture Notes

This note explains the following topics: What a compiler does, why we need compilers, Parts of a compiler and what they do and Data flow between the parts.

sNA Pages

Compiler Introduction

This note explains the following topics: Lexical Analysis, Parsing, Error Recovery, Intermediate Code Generation, Run Time Memory Management, Code optimization, Code Generation.

s100 Pages

Theory of Computation Lecture Notes

This note covers the following topics: Mathematical Perliminaries, Automata Theory, Combinatorics and Graph Theory, DFAs to Regular Expressions- Brzozowski’s Algebraic Method, Myhill-Nerode and DFA Minimization, Group Theory, Turing Machines and Computability Theory, Complexity Theory.

s114 Pages

Introduction to the Theory of Computation

This note explains the following topics: Automata and Language Theory, Finite automata, regular expressions, push-down automata, context-free grammars, pumping lemmas, Computability Theory, Turing machines, Church-Turing thesis, decidability, halting problem, reducibility, recursion theorem, Complexity Theory, Time and space measures, hierarchy theorems, complexity classes P, NP, PSPACE, complete problems, P versus NP conjecture, quantifiers and games, provably hard problems, probabilistic computation.

sNA Pages

Introduction to Algorithms Lecture Notes

This note concentrates on the design of algorithms and the rigorous analysis of their efficiency. Topics covered includes: the basic definitions of algorithmic complexity, basic tools such as dynamic programming, sorting, searching, and selection; advanced data structures and their applications, graph algorithms and searching techniques such as minimum spanning trees, depth-first search, shortest paths, design of online algorithms and competitive analysis.

sNA Pages

Advanced Algorithms Lectures and Resources

This note will cover classic and modern algorithmic ideas that are central to many areas of Computer Science. The focus is on most powerful paradigms and techniques of how to design algorithms, and measure their efficiency. The topics will include hashing, sketching, dimension reduction, linear programming, spectral graph theory, gradient descent, multiplicative weights, compressed sensing, and others.

sNA Pages

Introduction to Computer Architecture Lecture Notes

Computer architecture is the science and art of selecting and interconnecting hardware components to create a computer that meets functional, performance and cost goals. In this note, students will learn how to completely design a correct single processor computer, including processor datapath, processor control, memory systems, and I/O. Topics covered includes: Performance, Instructions, Arithmetic, Datapath, Control, Exceptions, Pipelining, Caches, Memory and VM, Arithmetic, Multiprocessors.

sNA Pages

Architecture of High Performance Computers

This note will give an introduction to designing and programming high performance processors. Topics covered includes: Branch Prediction, renaming, precise interrupts, Register Renaming, Wakeup, Bypass, Broadcast, Load-Store Queue, Commit, Recovery from speculation: RRF and RRAT, SRAM vs CAM based checkpoint, ROB based OOO processor design Little's Law, Non-Selective and Deferred Selective Replay, SRAM and DRAM Cells, CAM Cells, Pentium Trace Cache, Date Prefetching, Cache Design with Cacti, NUCA Caches, Routing and Flow Control, Hardware Security, Flow Control, Coherence and Consistency, Coherence Protocols, Directory Coherence and Atomic Primitives, Memory Consistency Models.

sNA Pages

Computer Graphics and Image Processing

This note covers the following topics: What are Computer Graphics and Image Processing, digital image, Image capture , Image display, Sampling, Human visual system, Simultaneous contrast, Classifying colours, Colour vision, Chromatic metamerism, Storing images in memory, Hermite cubic, Douglas and Pucker’s algorithm, Clipping, Polygon filling, Clipping polygons, Bounding boxes, Curves in 3D.

s288 Pages

Computer Graphics by Jernej Barbic

This note is an introduction to three-dimensional computer graphics. Students will learn both the theory of 3D computer graphics, and how to program it efficiently using OpenGL. Topics covered includes: 2D and 3D transformations, Bézier and B-Spline curves for geometric modeling, interactive 3D graphics programming, computer animation and kinematics, and computer graphics rendering including ray tracing, shading and lighting.

sNA Pages

Introduction to Computer Science

This note covers the following topics: Computing: The Functional Way, Computing Tool, Algorithms: Design and Refinement, Technical Completeness and Algorithms, Introducing Reals, Correctness, Termination and Complexity, Compound Data, Higher Order Functions and Structured Data, Imperative Programming.

s710 Pages

Introduction to Computer Science by Ryan Stansifer

This lecture note explains the following topics: What is CS, Java review: Data, control constructs, static methods, Classes: Incorporation, instantiation, inheritance, Generics, Code reuse, Program analysis, Data structures, Lists, stacks, queue.

s109 Pages

Introduction to Functional Programming

This note covers the following topics: Lambda calculus, Lambda calculus as a programming language, Types, A taste of ML, Proving programs correct, Effective ML.

s168 Pages

Introduction to Functional Programming

This note covers the following topics: Introduction to Haskell and Lazy, Functional Programming, Datatypes, Programs and Proofs, Simple Graphics, Polymorphism, Trees, Regions, Proofs by Induction, The Haskell Class System, Simple Animations, Infinite Lists and Streams, Reactive Animations, Higher Order Types, Functional Music and Interpreting Music.

sNA Pages

Information Theory Lecture Notes

This is a graduate-level introduction to mathematics of information theory. This note will cover both classical and modern topics, including information entropy, lossless data compression, binary hypothesis testing, channel coding, and lossy data compression.

sNA Pages

Lecture notes on Information Theory and Coding

This note explains the following topics: Measuring Information, Joint Entropy, Relative Entropy and Mutual Information, Sources with Memory, Asymptotic Equipartition Property and Source Coding, Channel Capacity and Coding, Continuous Sources and Gaussian Channel, Rate Distortion Theory.

sNA Pages

Applied Numerical Computing

This note explains the following topics: Numerical linear algebra, nonlinear optimization, nonlinear least squares, introduction to floating point numbers and rounding error, examples from signal and image processing, control, machine learning.

sNA Pages

Numerical Computation for Mechanical Engineers

This note introduces elementary programming concepts including variable types, data structures, and flow control. After an introduction to linear algebra and probability, it covers numerical methods relevant to mechanical engineering, including approximation, integration, solution of linear and nonlinear equations, ordinary differential equations, and deterministic and probabilistic approaches.

sNA Pages

Object Oriented Software Development

This note covers the following topics: Object-Oriented Programming, GUI Programming, Exception Handling, Numeral Systems, Input and Output, Collection Framework, Network Programming, Multiple Threads, Software Development, Object-Oriented Design, Enumerated Types, Applets.

sNA Pages

Object Oriented Programming for Scientific Computing

This note explains the following topics: Short recapitulation of basics of object-oriented programming in C++, Memory management , Constant values and objects, Error handling, Inheritance, Dynamic polymorphism, Static polymorphism, The Standard Template Library, Traits, Policies, Template metaprogramming, Expression templates, C++11 threads.

sNA Pages

Notes on Operating Systems

This note deals with what operating systems are, and the context in which they operate. In particular, it emphasizes the issues of software layers and abstraction, and the interaction between the operating system and the hardware. Topics covered includes: Operating System Functionality, Background on Computer Architecture, Processes and Threads, UNIX Processes, Concurrency, Resource Contention and Deadlock, Lock-Free Programming, Memory Management, File Systems, Mechanics of Disk Access, Crosscutting Issues, SMPs and Multicore, Operating System Structure, Performance Evaluation, Communication and Distributed Systems.

s312 Pages

Principles of Operating Systems Lecture Notes

Principles and concepts operating systems, including processes, threads, scheduling, synchronization, memory management, file systems, and I/O systems are covered.

sNA Pages

Introduction to Programming Lectures Notes

This note covers the following topics: Introduction to programming, Use of objects and variables, Definition of methods and classes, Primitive data types, Conditional statements, Loop statements, Arrays and matrices, Files and input/output streams, Program errors and exception handling, Recursion, Dynamic arrays and linked lists.

sNA Pages

Notes on coding theory

This note covers the following topics: The naive way of coding, Coding schemes for binary channels and Shannon theorem, Shannon theorem, Exponential growth rate, Binary codes, The Hamming bound and perfect codes, The Gilbert-Varshamov bound, Error probability estimations, Union bound for BER, State representations and trellises of general codes, Convolutional codes, Tanner graphs and factor graphs.

sNA Pages