Bit Wizardry 1. the art of a binary wizard 10. a bit of sorcery 11. bit by bit, it looks like magic 100. a great ability in using bits Who do we think we are? We • Dhruv Matani (tall guy) • Ashwin Jain (thin guy) • Shilp Gupta (fat guy) We • Programmers • Software Developers, Directi • Bit Wizards Who do we think you are? You • Programmers • Wish to become Bit Wizards Bit Wizards • Better programmers • Bits are cool! Why? Why? • Bits are simple • zero • one Why? • Bit operations are simple • and • or • not Why? • 2n is common • Tower of Hanoi • Dynamic Programming • Set cover Why Tower of Hanoi? • 3n states • Optimal sequence contains • (2n - 1) moves • General case? Why DP? • Weighted Matching • TSP • Domino Tiling • The list goes on.. Why Set Cover? • Statement • Given ‘n’ items, you are given the cost of covering, each subset of items. Which mutually exclusive subsets to select, such that the union selects all items and the total cost of cover is minimal among all covers. Why n 2? • n-bits to mask them all, n-bits to find them, n-bits compress them all and in an array bind them What the cuss was that? Compress space • Premise • byte - smallest unit of “point-able” memory • byte = 8 bits • Conclusion • Waste not, want not Faster lookup? • Masks are numbers • Numbers make lightening fast indexes • Think, array! Are you convinced? • Say yes. Pay attention! • You too @ashwin + @dhruv! Rules • If in doubt / distress / disbelief / discomfort / disorientation or difficulty, ask question Caution • Parenthesize your bit operations • If using Turbo C++ / Borland C++, use long int instead of int 001 Bit by Bit bit • A unit of information. • 0 or 1 byte • 1 byte = 8 bits • char (g++) short int • 1 short int = 16 bits • short int (g++) • int (turbo c++) int • 1 int = 4 bytes = 32 bits • int (g++) • long int (turbo c++) long long int • 1 long long int = 64 bits • long long int (g++) • __int64 (visual c++) and • conjunction • truth table or • disjunction • truth table not • negation • truth table xor • exclusive or / toggle • truth table bitwise operators •x&y •x|y • ~x • x^y shift operators • >> • << Do it yourself. wake up, open your computer, try them Print the input in binary using bitwise operators. Sieve the primes < 1024 using an array of 32 ints only! Solution • SET(n) A[n >> 5] |= (1 << (n & 31)) • UNSET(n) A[n>>5] &= ~(1 << (n&31)) 010 Things you should know n 2 • 1 followed by n 0’s n 2 • 1 repeated n times -1 -1 • all 1’s << • multiply by power of 2 >> • divide by power of 2 & n (2 - 1) • remainder on division by 2n x&1 • is the number even or odd? x & (x - 1) • is x a power of 2? • x &= (x-1) removes the least significant set bit! • can you think of immediate uses? x & (x + 1) • is the binary expansion of x all 1’s? x & (-x) • smallest power of 2 in the binary expansion of x x & (-x) • -x = ~x + 1 • 2’s complement notation • Understand this very carefully! ~x & (x + 1) • isolate the rightmost 0 swap(x,y) • x ^= y ^= x ^= y Do it yourself do you have your pens and pencils? Given a number x, find the next higher number with the same number of set bits. 011 Binary searching on bits BS!? • Calculate the number of set bits in a number. • How many operations can you do it in? • Most probably O(log n) = O(number of bits) Huh!? • Lets do it in O(log of the number of bits). • O(log log n) !? Definitions • Given x. (Assume it has 32 bits) Step 1 •X = (X & 0x55555555) + ((x & 0xAAAAAAAA) >> 1) Step 2 •X = (X & 0x33333333) + ((x & 0xcccccccc) >> 2) Step 3 •X = (X & 0x0f0f0f0f) + ((x & 0xf0f0f0f0) >> 4) Step 4 •X = (X & 0x00ff00ff) + ((x & 0xff00ff00) >> 8) Step 5 •X = (X & 0x0000ffff) + ((x & 0xffff0000) >> 16) End •return x Beyond the horizon • Think of the several possibilities • Compute the parity of the number of 1’s • Reverse the bits of a number Do it yourself the s**t has hit the fan! Given x, find the highest power of 2, less than x Solution •x |= x >> 1 x x x x |= |= |= |= x x x x >> >> >> >> 2 4 8 16 •return x - (x >> 1) 100 Invention of masking The Idea • You know set • You know subset • Lets number subsets The Idea • label items of a set from {0, 1, 2, 3 ... (n-1)} • n items = 2n subsets • lets number subsets from 0 to 2n - 1 The Idea • Subset number ‘x’ contains item numbered ‘i’ iff bit ‘i’ is set in ‘x’, and vice versa Get it? • x is the mask of the subset • directly maps to a subset • an iteration from 0 to subsets! n 2 - 1 iterates over all Realize • | = set union • & = set intersection • -1 ^ A = set negation Think! • Set subtraction • Adding • Deleting • Testing set participation Dynamic Programming • Weighted Matching • A group of ‘n’ men and ‘n’ women participate in a marriage fare • A matrix depicts the cost of marriage between ‘i’th guy and ‘j’th gal • Find the best pairs, such that the total costs of all marriages is the least! Concentrate a presentation can only say as much! Understand • A matrix of numbers • Selection of items • exactly 1 in each row • exactly 1 in each column A brute force approach • n! • Consider all permutations A faster brute force • O(n 2n) • Each mask selects a subset of columns • And as many rows as columns (from top) Lets chalk it Home work • Think / read about the brute force solution to Traveling Sales Person (TSP) • In O(n 2n) space, this faster brute force handles instances up to n = 20, quickly! Home work • Then solve • PermRLE • GCJ 2008, Round 2, Problem D • Which permutation of blocks of 16 characters, allow for the smallest Run Length Encoding of a huge string! 101 Set cover The Problem • Given a mask, how do you calculate the masks that depict the subsets of this mask. The Solution •for(nmask = mask; nmask > 0; nmask = mask & (nmask - 1)) { • •} // use nmask Notes • Visits the masks in reverse order • Does not generate the empty mask Complexity • O(3n) [how?] • Recursively running this on all subsets with memorization Use It! • You are given n points in a co-ordinate plane. • Find out whether you can cover these npoints with k squares (points must lie inside the squares or on the boundary) of size ‘t’ or less. Home work • Binary search on ‘t’ can help calculate the smallest value of ‘t’ possible. • Square Fields - Google Code Jam, Practice Contest, Problem B 110 Binary Indexed Tree Problem • Design a data structure that supports the following two operations • An array of n elements. • Add value x at index i (1-based) • Retrieve sum of all values from index 1 to i BIT!? • A variation on segment tree • O(N) space • O(log N) update • O(log N) retrieval 111 Tower of Hanoi Not this! • A bit sequence of n-bits - from 0 to 2n-1 encodes the disk to be moved in the i’th step • Yes, this is uniquely determinable • Let google show you how But!? • Ok ok! • Calculate the Grey Codes from 0 to 2n - 1 • n = number of disks • The bit that changes in the i’th grey code compared to the (i-1)th grey code is the disk to move! • 0 = smallest disk • i >= 1 Grey Codes!? • ith Grey Code = i ^ (i >> 1) • Consecutive grey codes differ at only 1 bit • Sequence of combinations that differ by 1 item (selected or dropped) Thats all folks yes, this is the end! Thank You for being an immensely patient audience Blame / Praise us @ dhruv.m@directi.com ashwin.j@directi.com shilp.g@directi.com