技术文档中,经常看到启发式算法、启发式缓存之类的字样。不理解什么是 启发式
,于是翻阅了一些简单易懂的内容,按照自己的方式理解了,记录一下。
启发式(英文是 Heuristic),我认为是典型的翻译不够信达雅导致的难理解。Heuristic 更准确的翻译是——探索式、探索法。维基百科词条 heuristic,将其定义为基于经验的技巧(technique),用于解决问题、学习和探索。
并对该词进行了更详尽的解释并罗列了多个相关领域:
A heuristic method is used torapidlycome to a solution that is hoped to be close to the best possible answer, or 'optimal solution'. A heuristic is a "rule of thumb", an educatedguess, anintuitive judgmentor simplycommon sense.
A heuristic is a general way of solving a problem. Heuristics as a noun is another name for heuristic methods.
Heuristic 可以等同于:实际经验估计(rule of thumb)、有依据的猜测(educated guess, a guess beased on a certain amount of information, and therefore likely to be right)和常识(由经验得来的判断力)。
维基百科的解释中,另一段也可以让我们更好的理解什么是启发式算法:
计算机科学的两大基础目标,就是发现可 证明 其 执行效率 良好且可得 最佳解 或次佳解的 算法 。而启发式算法则试图一次提供一个或全部目标。例如它常能发现很不错的解,但也没办法证明它不会得到较坏的解;它通常可在合理时间解出答案,但也没办法知道它是否每次都可以这样的速度求解。
有时候人们会发现在某些特殊情况下,启发式算法会得到很坏的答案或效率极差,然而造成那些特殊情况的数据结构,也许永远不会在现实世界出现。因此现实世界中启发式算法很常用来解决问题。启发式算法处理许多实际问题时通常可以在合理时间内得到不错的答案。
有一类的通用启发式策略称为 元启发算法 (metaheuristic),通常使用随机数搜索技巧。他们可以应用在非常广泛的问题上,但不能保证效率。
原文:
HTTP 旨在尽可能多地缓存,因此即使没有给出 Cache-Control,如果满足某些条件,响应也会被存储和重用。这称为启发式缓存。
更新后:
HTTP 旨在尽可能多地缓存,因此即使没有给出 Cache-Control,如果满足某些条件,响应也会被存储和重用。这称为探索式缓存。
是不是更好理解呢?
计算机领域内的启发式xx,指的是探索式xx,通常指代在没有完美的解法时: