I am a CS undergrad trying to improve my problem-solving skills. I have noticed that I have a problem with theoretical computer science which I've been trying to fix largely unsuccessfully till now. I have noticed these in Undergrad courses such as Theory of Computation, Algorithm Design, Discrete Mathematics, Game Theory etc. I am able to understand most of the underlying theory pretty well and even visualize a lot of stuff but when it comes to solving problems during examinations, the correct approaches never seem to come to me. I have tried practising a lot of sample problems for such courses but it never seems to help with questions which involve some sort of creative thinking. I spend way too much time in a limited-time setting and end up not being able to come up with a seemingly 'obvious' solution. I have also noticed this with puzzles. In trying to isolate the problem, I've noticed that exam temperament is not the problem, since I'm able to do fairly well in Systems courses or courses which are not so puzzle-oriented. Here are some examples of questions I'm talking about:
- Write a Context Free Grammar $G$ such that $L(G)$ is <given>
- Find an algorithm for a multi-armed bandit problem which satisfies <some given conditions>
- Write an algorithm to solve a <given task> in <given time complexity>
- Prove that <given language> is not a regular language
- Find the Nash Equilibrium for a <given game design> etc
The common aspect of all such problems is that they can't be solved methodically, but rather there's that one creative manipulation/idea which splits the problem apart. How do I get my creative juices flowing and get better at solving such puzzling problems in a limited time frame?
P.S. I really want to get better at this since I'm genuinely putting in a lot of time and effort but my scores don't seem to reflect that. I couldn't find the most appropriate tags for this question, but I've tried to enter what I felt was appropriate. Open to suggestions for better ways to frame the question!