Tell me more ×
Computer Science Stack Exchange is a question and answer site for students, researchers and practitioners of computer science. It's 100% free, no registration required.

Is the first step in solving a "tough" algorithmic problem always asking whether it's hard in the sense that other tough problems can be reduced to it? Not to make the scope of this question tight, what's good advice for approaching challenging algorithmic problems?

share|improve this question
9  
I think that as first step you should ask (to yourself/colleagues/experts) "Is it a KNOWN problem?". If the answer is positive then search in the literature for the state-of-the-art solutions; otherwise as second step you should ask "Is it SIMILAR to a known problem?". If the answer is positive, then try to use the approaches used for the similar problems. – Vor Dec 31 '12 at 12:55
1  
What I do is "formalization and simplification". First formalize your problem, and try to find all the constraints you want to solve. Try to solve the problem with some of the constraints, and keep include the constraints one by one until you get a good understanding of the problem. – AJed Dec 31 '12 at 17:47

1 Answer

There are some domains in computer science that are very rich in having strong "tools" and "techniques" for problem solving like Combinatorial Algorithms, Operational Research Algorithms, Numerical Algorithms,...

I think the most important step is to find best catdiadate and match (best "reduction") of your problem in these domains. People proved lots of properties and they have good tools for solving the basic and fundamental and abstract problems in these domains. In many cases your specific problem should be inherited from some of these abstract and fundamental problems. You could do the extension by yourself to prove and show more properties of your specific problem.

If I want to make simple comparison, there are many similarities when you want to develop an application and solve a problem. In developing your application you consider the domain of the application and you try to find "best libraries", which simplify your development process. You extend many basic class in library to make your own specific application.

In general problem solving is an "Art". You can learn this art by practicing and broad your knowledge.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.