启发式算法往往对特定问题非常具体,因为这个想法是要包含您可能对该问题的其他知识。所以"一般启发式"不是一个非常有用的类别。也就是说,听起来你特别在谈论距离度量,这是一个稍微定义明确的子集。
就可接受的距离启发法而言,你已经提到过的两个肯定是最常见的:
- 直线距离是空间中一般无约束运动的唯一允许启发式算法,因为任意两点之间的最短路径是直线。
- 当然,几乎任何具有挑战性的问题都会对运动产生一些限制。这种运动中常见的一种约束必须一次沿着一个轴发生,对于这些问题,曼哈顿距离是合适的。
还有其他一些受欢迎的距离指标,但它们不太适用于启发式。
- 切比雪夫距离 - 沿单个坐标的距离,以较大者为准。虽然这通常应该是可接受的(它会低估,因为它没有考虑沿其他轴的移动),但它的信息量远远低于曼哈顿距离。可能在某些情况下这很有用,但它们并不常见。
- Minkowski Distance - 曼哈顿距离和欧几里德(直线)距离的一般情况。然而,它明显不如那些特殊情况那么直观,所以,再一次,我不能提出一个很好的例子,说明你何时选择它们。
- 汉明距离 - 这并非适用于所有问题,但会计算为您需要对两个向量进行相同编辑的最小编辑次数。由于它是最小数字,因此某些问题可能会被允许,例如word mutation game具有相等长度的单词。 (如果字长不相等,则需要使用 Levenshtein Distance ,这允许插入间隙。这需要相当长的时间来计算(O(n ^ 2)),因此不太可能是一种有效的启发式方法。)
- Canberra Distance ,一种缩放的曼哈顿距离,通常用于分散在原点周围的点,但在许多情况下是不可接受的。
- Jaccard Distance 是在比较要素集时使用的相似性度量。它比缺席更强烈地对特征的存在进行加权。您需要在功能集上使用启发式的问题相对不常见,因此很难知道可接受性的合理默认假设是什么。一般来说,我猜想现有和缺席特征之间的不对称可能会使Jaccard距离因某些问题不可接受,但如果你真的只关心当前的特征,它可能不会成为一个问题。
当然,还有许多其他距离指标,但这些指标大多数都不如直线和曼哈顿距离那么受欢迎,但仍然相当普遍。