How to Approach PROBLEMS?

SUMMARY:

Problems are everywhere. What I mean here by a problem is “mathematical programming challenges whose solutions are a set of instructions to be executed with given input and which ultimately spits out a desired consistent output upon execution”. Now how does a problem solver go about assessing what criteria or parameters or notions of solution that he has to assay? There are numerous varieties of mathematical problems ranging from linear to non-linear. This blog post draws out a technical strategy in the form of questions or checklist to attack the same without sweating much. Let’s dig in for gold now!

INPUT:

Every problem solver must examine the type/nature of input data. Is the input type integer or a real number? If it’s a mathematical real world problem then there is a possibility for the input space to be infinite. Take for e.g.: testing a printed circuit board for quality control or check. What is the size of input data? Is it in 100’s, 1000’s or even 100,000’s? Is it discrete or continuous data? Does the input data require preprocessing? Does it require to be mapped to a much simpler notation? Can it be downsized? If it is continuous then can I take potential random sections of data to be processed by my algorithm?

SPEED & RESOURCE:

How long can I wait for the solution? Can I wait for 1 day, 1 month, and 1 year or should it be instantaneous, like in milliseconds/ nanoseconds? Should this solution cater to high volume request over a wire (internet)? Or is it hosted and consumed in-house? How much of the resource is it under my purview of disposal? Can I use infinite memory? Which is impossible in most cases of real world problem? Can I leverage the power of cloud computing? Or is it just multicore processors PC? Can I use data structures that can be in-memory or store in cache or store on disk? Can I use parallel over sequential programming techniques to improve the performance? Have I evaluated the worst case, best case, and amortized cases? What is the cost of performance and resource during the worst of worst cases? Am I prepared for it? Have I chosen the appropriate data structure that meets by non-functional needs like performance and scalability?

REINVENTING THE WHEEL:

Is this a well-beaten path with a proven solution out there? Can I reuse the solution by adapting to my requirements? Usually, the problem at hand is a composition of various subproblems. If so, can I use divide and conquer strategy? Note that divide and conquer doesn’t necessarily mean breaking the problem into subproblems, but also the means that the input data can be broken down too. Can I use a heuristic to reduce/prune/eliminate the size of input data or size of the solution search space?

NATURE OF PROBLEM:

Is it a search problem? Or is it an order/sort problem? Or is it rule based solution approach? Or is it an approximation and optimization problem? Or is it a queue problem? Or is it a clustering/delineation of dataset problem? Or is it a data access (create/retrieve/update/delete) problem? Is it a computational or heavy processing oriented problem? Or is it a data formatting problem?

CONCLUSION:

I have raised a million questions and few notes and examples whenever it’s appropriate. There is a humungous amount of solution search space. It has been a revelation to me when the right question in the course of problem-solving will positively open up a whole new dimension and breakthrough perspective. Don’t underestimate the above questions; they inherently have answers too.

ART IS NOT JUST IN NATURE AND MUSIC; IT’S ALSO IN ALGO-RITHMIC BEATS TOO.

Leave a comment