(10) What approach can be used to solve a sample problem distributed from the Google Code Jam? - Quora



(10) What approach can be used to solve a sample problem distributed from the Google Code Jam? - Quora

Google will, probably, abstract away the low level details (network communication, concurrency primitives, etc.) in the Distributed Code Jam problems, since it's only 3 hours long.

The solution will most likely be composed of 2 parts. First a divide function (doing the calculation) and then a combine function(collecting node results and outputting the answer).

Now for the given problem example, let's say that we have a sandwich that is 100 units long. Each unit has a taste value. If we were only allowed to eat from the sides, we would find maximum subsequence sums, one starting from the left and the other from the right. It's pretty straightforward.

Now consider the length to be 10^10 distributed across 100 nodes.
There are two key observations:
  • A node's dataset might be partially or completely in the solution or the solution doesn't involve this node's dataset.
  • There will be edge nodes. One containing the left endpoint and the other containing the right endpoint (They might be the same).

First, we send a query to each node for the sum of data they have and apply the same algorithm to find two sums(from left, from right). After we find these values we query the edge nodes to learn the exact borders of the subsequences (Since we will only find the approximate borders by only querying the sums).

Read full article from (10) What approach can be used to solve a sample problem distributed from the Google Code Jam? - Quora


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts