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).
Author(s): Gabriel Lemonde
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.
Author(s): David W. Bustard
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.
Author(s): Chuck Dyer
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.
Author(s): Diane Cook
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.
Author(s): Gordon S. Novak Jr
This note explains the following topics: Lexical Analysis, Parsing, Error Recovery, Intermediate Code Generation, Run Time Memory Management, Code optimization, Code Generation.
Author(s): Darshan Institute of Engineering and Technology
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.
Author(s): Michael Levet
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.
Author(s): Prof. Sofya Raskhodnikova
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.
Author(s): Michael Dinitz
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.
Author(s): Alex Andon
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.
Author(s): David A. Wood and T. A. Ramkumar Ravikumar
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.
Author(s): Dr. Smruti R. Sarangi
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.
Author(s): University of Cambridge
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.
Author(s): Jernej Barbic
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.
Author(s): S. Arun-Kumar
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.
Author(s): Ryan Stansifer
This note covers the following topics: Lambda calculus, Lambda calculus as a programming language, Types, A taste of ML, Proving programs correct, Effective ML.
Author(s): John Harrison
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.
Author(s): Tim Sheard
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.
Author(s): Prof. Yury Polyanski
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.
Author(s): University of Siena
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.
Author(s): Prof. L. Vandenberghe
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.
Author(s): Prof. Anthony T. Patera, Prof. Daniel Frey and Prof. Nicholas Hadjiconstantinou
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.
Author(s): Ken Slonneger
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.
Author(s): Ole Klein
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.
Author(s): Dror G. Feitelson
Principles and concepts operating systems, including processes, threads, scheduling, synchronization, memory management, file systems, and I/O systems are covered.
Author(s): University of California
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.
Author(s): Prof. Diego Calvanese
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.
Author(s): Fabio Fagnani