280 likes | 310 Views
Learn about exhaustion method, its advantages, limitations, and when to use it. Explore problems like coin combinations and grid coloring. Discover Branch and Bound algorithm for optimizing bin packing. Practical examples and performance optimization techniques are discussed.
E N D
Exhaustion, Branch and Bound Gary Wong If you have any question, please ask via Email: garywong612@gmail.com MSN: gary_wong612@hotmail.com
Welcome! • Your 1st training on advanced topics this year • I assume you have sufficient basic knowledge
Pre-requisites • Recursion • Basic concepts of permutation and combination • Graph Searching (Optional)
Exhaustion • Check for (almost) all possible cases • Advantages • Simple • Correct in nearly all circumstances • Provided that you implement correctly • Disadvantages • Can be too slow if too many cases (e.g. exponential) • Implementation is sometimes difficult
When do we use exhaustion? • Not many possible cases • No other better methods are in your mind • Might not be your fault! • Many computational problems in the world have no known polynomial-time solutions • P, NP, NP-hard, NP-completeness… • Usually when the constraints are very small, you should think about whether exhaustion is possible
Let me count the ways • Now you have unlimited supply of coins of values 1, 5, 10, 25 and 50 cents • Find the number of ways to make up n cents • 0 <= n <= 99
Let me count the ways • Have a rough (and conservative) estimation on number of possible cases • If only 1 cent can be used, at most how many coins? • If only 5 cents can be used, at most how many coins? • … • A very rough upper bound: • 100 x 20 x 10 x 4 x 2 = 1600000 • Surely acceptable within 1s
Grid • Given an N x N white grids (N <= 5) • You may toggle the grid colors like this (white -> black; black -> white): • Given the initial colors of the grids, find the minimum number of toggling required to make all grids to become black
Grid • Observations: • Toggle twice = Not toggle at all • Sequence of toggling does not affect the final appearance of the board • How many possible sequences of toggling are there? • Time Complexity: O(2NxN) • A more efficient algorithm actually exists! • Hint: its time complexity is O(2N x N2)
Magic triangle • Given a magic triangle of N layers (1 <= N <= 5), comprising of N(N+1)/2 nodes • Integers 1 to N(N+1)/2 are assigned into each node exactly once, such that: • The number in a node = absolute difference of the numbers in its two children nodes • M numbers (0 <= M <= N(N+1)/2) have filled into some nodes, fill in the remaining nodes • Time limit: 1s 1 4 3 6 2 5
Magic triangle • Let’s fill in the N(N+1)/2 numbers into the circles! • O((N(N+1)/2 – M)!) • Worst case? • N = 5 • M = 0, i.e. no numbers are filled • 15! = 1307674368000
Magic triangle – 2nd attempt • Observation: • Numbers in lower layers can be used to derive the numbers above! • Why not just exhausting the lowest layer? • Time complexity: O(TPN), where T = N(N+1)/2 • 15P5 = 15! / 10! = 360360
What have you learnt? • Smart exhaustion vs Stupid exhaustion • Now I would teach you what “smart” means…
A Classical Problem – Bin Packing • A number of objects are to be put into some identical bins • Find the minimum number of bins required to pack all objects Capacity: 50 10 20 30 50 20
Solution 1 • S = Sum of volumes of all objects • C = Capacity of a container • Answer = ceil (S / V) • Wrong! • Why?
Solution 2 • Sort the objects in ascending order of their volumes • Put the smaller objects first • Wrong! • Why?
The correct solution • Exhaustion BIN PACKING() if All objects have been put in some bins then update the best solution if a better one is found pick a bin B for each object O do if volume of O does not exceed remaining space in B then Put O into B BIN PACKING() Remove O from B
Search tree • DFS • For N objects, O(N!) Empty bins B1(50) B1(20) B1(10) … … … B1(10,20) B1(50); B2(10)
The cruel reality • N <= 40 • Performance: • input1.txt: Accepted • input2.txt: Accepted • input3.txt: TLE • How to speed up?
Back to the search tree… • Is it necessary to go further here? Why? Empty bins B1(50) B1(20) B1(10) … … … B1(10,20) B1(50); B2(10) Suppose you know here that at most 2 bins are needed
Optimization • Tree Pruning (Branch and Bound!) • Suppose f is the solution at this moment • If f >= cur_best, do not go further • Performance: • input1.txt: Accepted • input2.txt: Accepted • input3.txt: TLE • Still too slow… • Can we do better?
A* Search • Let h be an estimated lower bound for the number of bins required to pack all unpacked objects • If f + h >= best, do not go further • h is also known as a heuristic function • But what makes a good function h in this case?
The cruel reality, again • Performance: • input1.txt: Accepted • input2.txt: Accepted • input3.txt: Accepted • input4.txt: TLE • Further improved now • Can we do even better?
Avoid equivalent configurations • Sort the objects by their volumes before searching • When putting the objects, you should ensure that: • The volumes of objects in each bin are in non-decreasing order, or • The volumes of smallest objects in all bins form a non-increasing order
A happy ending • Performance: • input1.txt: Accepted • input2.txt: Accepted • input3.txt: Accepted • input4.txt: Accepted • input5.txt: Accepted • input6.txt: Accepted • input7.txt: Accepted • input8.txt: Accepted • Result: Accepted
Summary • Tree Pruning • A* • Avoid equivalent configurations
Exercises • 1049 Chocolate • 1050 Bin Packing • 2005 Magic Triangle • 2065 Toggle • 3031 Trishade