HERE - Dhruv Matani

advertisement
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
Download