How can information be represented, processed, stored, transmitted, decoded or predicted efficiently? How can noise be removed or reduced from it? What is the minimum amount to be stored so that it can be recovered within a specified fidelity? Recent decades have witnessed a fruitful interplay of ideas from information theory, statistics, probability and theoretical computer science, resulting in universal schemes: algorithms that perform such tasks essentially optimally, without knowledge of statistical properties of the data. Several of these algorithms have practical and graceful implementations, and are of wide current use. The course will focus on theoretical and algorithmic aspects of universal schemes. Emphasis will be placed on identifying common themes and on developing tools for constructing and for analyzing the performance of such schemes in a unified framework. These tools will be put to use and applied to a new problem in the final project.