Tips for tasks on Codility | Dev by Tadas Šubonis



Do the demo on codility page
Refresh algorithms class knowledge
Master your language
Familiarize with unit testing
Get calm workplace
Pay attention to task
Identify problem

Divide-and-Conquer: Can you divide the problem into two or more smaller independent subproblems and solve the original problem using solutions to the subproblems?
Recursion, dynamic programming: If you have access to solutions for smaller instances of a given problem, can you easily construct a solution to the problem?
Case analysis: Can you split the input/execution into number of cases and solve each case in isolation?
Generalization: Is there a problem that subsumes your problem and is easier to solve?
Data-structures: Is there a data-structure that directly maps to the given problem?
Iterative refinement: Most problems can be solved using brute-force approach. Can you formalize such a solution and improve upon it.
Small examples: Can you find a solution to small concrete instances of the problem and then build a solution that can be generalized to arbitrary instances?
Reduction: Can you use a problem with a known solution as a subroutine?
Graph modeling: Can you describe your problem using a graph and solve it using an existing algorithm?
Write an equation: Can you express relationships in your problem in the form of equations (or inequalities)?
Auxiliary elements: Can you add some new element to your problem to get closer to a solution?
Variation: Can you solve a slightly different problem and map its solution to your problem?
Parallelism: Can you decompose your problem into subproblems that  can be solved independently on different machines?
Caching: Can you store some of your computation and look it up later to save work?
Symmetry: Is there symmetry in the input space or solution space that can be exploited?

Think up initial solution
Write main body first
Test edge cases
Pay lots of attention to edge cases in your algorithm.
Use IDE
Read full article from Tips for tasks on Codility | Dev by Tadas Šubonis

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