From 0899147194c491f91c775d150d93eec4ed0cac44 Mon Sep 17 00:00:00 2001 From: Antti H S Laaksonen Date: Sat, 7 Jan 2017 13:51:53 +0200 Subject: [PATCH] Sets as bits --- luku10.tex | 111 ++++++++++++++++++++++++++--------------------------- 1 file changed, 54 insertions(+), 57 deletions(-) diff --git a/luku10.tex b/luku10.tex index 5383b28..bbca39c 100644 --- a/luku10.tex +++ b/luku10.tex @@ -266,119 +266,116 @@ but there are also \texttt{long long} versions of the functions available with the prefix \texttt{ll}. +\section{Bit representation of sets} -\section{Joukon bittiesitys} +Each subset of a set $\{0,1,2,\ldots,n-1\}$ +corresponds to a $n$ bit number +where the one bits indicate which elements +are included in the subset. +For example, the bit representation for $\{1,3,4,8\}$ +is 100011010 that equals $2^8+2^4+2^3+2^1=282$. -Joukon $\{0,1,2,\ldots,n-1\}$ -jokaista osajoukkoa -vastaa $n$-bittinen luku, -jossa ykkösbitit ilmaisevat, -mitkä alkiot ovat mukana osajoukossa. -Esimerkiksi joukkoa $\{1,3,4,8\}$ -vastaa bittiesitys 100011010 eli luku -$2^8+2^4+2^3+2^1=282$. +The bit representation of a set uses little memory +because only one bit is needed for the information +whether an element belongs to the set. +In addition, we can efficiently manipulate sets +that are stored as bits. -Joukon bittiesitys vie vähän muistia, -koska tieto kunkin alkion kuulumisesta -osajoukkoon vie vain yhden bitin tilaa. -Lisäksi bittimuodossa tallennettua joukkoa -on tehokasta käsitellä bittioperaatioilla. +\subsubsection{Set operations} -\subsubsection{Joukon käsittely} - -Seuraavan koodin muuttuja $x$ -sisältää joukon $\{0,1,2,\ldots,31\}$ -osajoukon. -Koodi lisää luvut 1, 3, 4 ja 8 -joukkoon ja tulostaa -joukon sisällön. +In the following code, the variable $x$ +contains a subset of $\{0,1,2,\ldots,31\}$. +The code adds elements 1, 3, 4 and 8 +to the set and then prints the elements in the set. \begin{lstlisting} -// x on tyhjä joukko +// x is an empty set int x = 0; -// lisätään luvut 1, 3, 4 ja 8 joukkoon +// add numbers 1, 3, 4 and 8 to the set x |= (1<<1); x |= (1<<3); x |= (1<<4); x |= (1<<8); -// tulostetaan joukon sisältö +// print the elements in the set for (int i = 0; i < 32; i++) { if (x&(1<