To save content items to your account,
please confirm that you agree to abide by our usage policies.
If this is the first time you use this feature, you will be asked to authorise Cambridge Core to connect with your account.
Find out more about saving content to .
To save content items to your Kindle, first ensure no-reply@cambridge.org
is added to your Approved Personal Document E-mail List under your Personal Document Settings
on the Manage Your Content and Devices page of your Amazon account. Then enter the ‘name’ part
of your Kindle email address below.
Find out more about saving to your Kindle.
Note you can select to save to either the @free.kindle.com or @kindle.com variations.
‘@free.kindle.com’ emails are free but can only be saved to your device when it is connected to wi-fi.
‘@kindle.com’ emails can be delivered even when you are not connected to wi-fi, but note that service fees apply.
This chapter describes another family of compressors that do not derive statistics about the text to be compressed; rather, they derive a dictionary of strings and substitute their occurrences in the input text via proper references to that dictionary. The choice of the dictionary is of course crucial in determining how well the file is compressed, and it is sometimes ineffective to transmit the full dictionary along with each compressed file. Starting in 1977, Abraham Lempel and Jacob Ziv introduced a family of compressors that successfully addressed these problems by designing two algorithms, named LZ77 and LZ78, that process the input text to incrementally construct a proper dictionary that is, thus, not transmitted. The Lempel–Ziv compressors are very popular because of their gzip instantiation, and constitute the base of more sophisticated compressors in use today, such as 7zip, LZMA, Brotli, and LZ4. The chapter discusses LZ77, LZ78, and an interesting variant, known as LZW, and at the end presents some theoretical considerations about the effectiveness of those compressors in terms of the empirical entropy of the compressed text.
This is one of the most studied problems in computer science, which is just touched in basic algorithm and data structure courses offered at the undergraduate level.This chapter makes a step forward by first introducing universal hashing, which solves some negative issues that basic hash functions experience, and then moves on to describe several advanced approaches to hashing, such as perfect hashing, Cuckoo hashing, minimal ordered perfect hashing, and finally Bloom filters. The theoretical analysis and algorithm description is enriched by figures and pseudocodes, plus several running examples that drive the reader to a better understanding of these important and advanced algorithmic concepts and tools.
This chapter attacks an easy-to-state problem, which is to select a subsequence of items uniformly at random from a given input sequence. This problem is the backbone of many randomized algorithms, and admits solutions that are algorithmically challenging to design and analyze. In particular, this chapter deals with the two cases where the size of the input sequence is either known or unknown to the algorithm, and also addresses the cases where the sequence length is smaller or larger than the internal memory of the computer. This will allowus to introduce another model of computation, the streaming model.
Linear Algebra is a branch of mathematics that deals with linear equation, systems of linear equations, and their representation as functions between algebraic structures called vector spaces. Linear Algebra is an essential tool in many disciplines such as engineering, statistics, and computer science and is also central within mathematics, in areas such as analysis and geometry. Much like the definition of a field, a vector space is defined through a list of axioms, motivated by concrete observations in familiar spaces, such as the standard two-dimensional plane and the three-dimensional space. We begin this chapter by taking a closer look at real n-dimensional spaces and vectors and then move on to discussing abstract vector spaces and linear maps. Our experience with sets and functions, developed in previous chapters, as well as certain proof techniques, will prove to be useful in our discussion.
We begin our journey by taking a closer look at some familiar notions, such as quadratic equations and inequalities. And, rather than using mechanical computations and algorithms, we focus on more fundamental questions: Where does the quadratic formula come from and how can we prove it? What are the rules that can be used with inequalities, and how can we justify them? These questions will lead us to looking at a few proofs and mathematical arguments. We highlight some of the main features of a mathematical proof, and discuss the process of constructing mathematical proofs. We also review informally the types of numbers often used in mathematics and introduce relevant terminology.
In this chapter, we introduce and discuss fundamental notions in mathematics: sets, functions, and axioms. Sets and functions show up everywhere in mathematics and science and are common tools used in mathematical arguments. Moreover, proving statements about sets and functions can further develop our proof-writing and communication skills. We also demonstrate, in Section 2.3, how axioms are used in mathematics as initial assumptions, from which other statements can be derived.
In this chapter, we take a step back to discuss, more generally, the language of mathematics and some proof techniques and strategies. In the previous chapters, we have seen numerous mathematical notions, theorems, proofs, and examples. As you have probably noticed, communicating mathematical arguments and ideas in a coherent and precise way is at the core of the subject.