Saturday, October 31, 2015

how to solve it - G. Polya



http://www.math.utah.edu/~pa/math/polya.html
  1. UNDERSTANDING THE PROBLEM
    • First. You have to understand the problem.
    • What is the unknown? What are the data? What is the condition?
    • Is it possible to satisfy the condition? Is the condition sufficient to determine the unknown? Or is it insufficient? Or redundant? Or contradictory?
    • Draw a figure. Introduce suitable notation.
    • Separate the various parts of the condition. Can you write them down?
  2. DEVISING A PLAN
    • Second. Find the connection between the data and the unknown. You may be obliged to consider auxiliary problems if an immediate connection cannot be found. You should obtain eventually a plan of the solution.
    • Have you seen it before? Or have you seen the same problem in a slightly different form?
    • Do you know a related problem? Do you know a theorem that could be useful?
    • Look at the unknown! And try to think of a familiar problem having the same or a similar unknown.
    • Here is a problem related to yours and solved before. Could you use it? Could you use its result? Could you use its method? Should you introduce some auxiliary element in order to make its use possible?
    • Could you restate the problem? Could you restate it still differently? Go back to definitions.
    • If you cannot solve the proposed problem try to solve first some related problem. Could you imagine a more accessible related problem? A more general problem? A more special problem? An analogous problem? Could you solve a part of the problem? Keep only a part of the condition, drop the other part; how far is the unknown then determined, how can it vary? Could you derive something useful from the data? Could you think of other data appropriate to determine the unknown? Could you change the unknown or data, or both if necessary, so that the new unknown and the new data are nearer to each other?
    • Did you use all the data? Did you use the whole condition? Have you taken into account all essential notions involved in the problem?
  3. CARRYING OUT THE PLAN
    • Third. Carry out your plan.
    • Carrying out your plan of the solution, check each step. Can you see clearly that the step is correct? Can you prove that it is correct?
  4. Looking Back
    • Fourth. Examine the solution obtained.
    • Can you check the result? Can you check the argument?
    • Can you derive the solution differently? Can you see it at a glance?
    • Can you use the result, or the method, for some other problem?
http://math.about.com/od/1/a/problemsolv.htm

Problem Solving Plan in 4 Steps:
1. Clues:
  • Read the problem carefully.
  • Underline clue words.
  • Ask yourself if you've seen a problem similar to this one. If so, what is similar about it?
  • What did you need to do?
  • What facts are you given?
  • What do you need to find out?
2. Game Plan:
  • Define your game plan.
  • Have you seen a problem like this before?
  • Identify what you did.
  • Define your strategies to solve this problem.
  • Try out your strategies. (Using formulas, simplifying, use sketches, guess and check, look for a pattern, etc.)
  • If your strategy doesn't work, it may lead you to an 'aha' moment and to a strategy that does work.
3. Solve:
  • Use your strategies to solve the problem
4. Reflect:
  • This part is critical. Look over your solution.
  • Does it seem probable?
  • Did you answer the question?
  • Are you sure?
  • Did you answer using the language in the question?
  • Same units?
Clue Words:
When deciding on methods or procedures to use to solve problems, the first thing you will do is look for clues which is one of the most important skills in solving problems in mathematics. If you begin to solve problems by looking for clue words, you will find that these 'words' often indicate an operation.
http://blog.51cto.com/13527416/2054092
总之,问题产生的根源非常多,要想把所有问题产生的原因都列全的话,那绝对是不可能的。
但是我们却可以将生活、工作中遇到的常见问题分成三类
  1. 未能准备描述问题
  2. 没有梳理清楚问题的结构
  3. 被问题的表象蒙蔽

准备描述问题

需要将非量化、模糊化、有歧义的问题转换可量化、可举例、清晰化的问题

问题的构成要素

5W2H分析法,易于使用、理解,对于决策和执行性的活动有帮助,也有助于弥补考虑问题的漏洞。
具体场景 : 如果项目经理让你出差到上海的问题。可以运用 「5W2H」的框架确定所有要素
 * Why 为什么要你去
 * What 项目情况以及要你过去做什么
 * When 具体什么时候开始,什么时候结束
 * Who 都有谁一起去看
 * How 怎么过去?坐飞机还是火车
 * How Much 有多少预算可以用

探寻问题本质

在日常工作、生活中,很多时候大家提出的问题都是经过初步加工后的解决方案,而非真正的问题。将问题的初步解决方案与问题本身混为一谈是最容易犯的错误,也是浪费大量时间与精力。你需要找到真正的问题,而不是惯性的将初步解决方案当做问题本身来应对。

分析问题

自下而上

自下而上提炼框架是一个先发散再收敛的思考过程,目的是提炼出一个结构完整、逻辑清晰的框架,以帮助下一步系统的解决问题。具体操作分为四步
  • 罗列要点:是一个发散思考的步骤,输出结果一张半成品的思维导图
  • 连线归类:对上面的结果进行收敛归类的步骤,输出结果是一张成形的思维导图。该步骤关键是掌握归纳推理的三个逻辑顺序(时间顺序、结构顺序、重要性顺序),演绎的逻辑顺序
  • 形成框架:将思维导图转换为问题解决框架的步骤,输出结果为逻辑树
  • 检查框架:检查框架是否符合 MECE 的步骤

自上而下

选择框架

快速选择一个合适的框架,是自上而下选用框架的最重要的一步。
What -> Why -> How
大家遇到遇到常见问题解决三步曲 「问题 - 原因 - 解决方案」 也就是 「What - Why - How」的思考框架:先分析问题现状,再分析导致问题产生的原因,最后再针对原因提出对策。
自下而上与自上而下框架各有优劣,在时间思考过程中两者很难严格区分,需要综合运用



Polya explains the problem solving technique
PyCon PL 2013 "Debugging with Uncle Pólya"

Labels

Review (572) System Design (334) System Design - Review (198) Java (189) Coding (75) Interview-System Design (65) Interview (63) Book Notes (59) Coding - Review (59) to-do (45) Linux (43) Knowledge (39) Interview-Java (35) Knowledge - Review (32) Database (31) Design Patterns (31) Big Data (29) Product Architecture (28) MultiThread (27) Soft Skills (27) Concurrency (26) Cracking Code Interview (26) Miscs (25) Distributed (24) OOD Design (24) Google (23) Career (22) Interview - Review (21) Java - Code (21) Operating System (21) Interview Q&A (20) System Design - Practice (20) Tips (19) Algorithm (17) Company - Facebook (17) Security (17) How to Ace Interview (16) Brain Teaser (14) Linux - Shell (14) Redis (14) Testing (14) Tools (14) Code Quality (13) Search (13) Spark (13) Spring (13) Company - LinkedIn (12) How to (12) Interview-Database (12) Interview-Operating System (12) Solr (12) Architecture Principles (11) Resource (10) Amazon (9) Cache (9) Git (9) Interview - MultiThread (9) Scalability (9) Trouble Shooting (9) Web Dev (9) Architecture Model (8) Better Programmer (8) Cassandra (8) Company - Uber (8) Java67 (8) Math (8) OO Design principles (8) SOLID (8) Design (7) Interview Corner (7) JVM (7) Java Basics (7) Kafka (7) Mac (7) Machine Learning (7) NoSQL (7) C++ (6) Chrome (6) File System (6) Highscalability (6) How to Better (6) Network (6) Restful (6) CareerCup (5) Code Review (5) Hash (5) How to Interview (5) JDK Source Code (5) JavaScript (5) Leetcode (5) Must Known (5) Python (5)

Popular Posts