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