数据分析方法梅长林
四、启发式算法相关问题
4.1 启发式算法与最短路径问题
启发式通常用于资讯充份的搜寻算法,例如最好优先贪婪算法与A。最好优先贪婪算法会为启发式函数选择最低代价的节点;A则会为g(n) + h(n)选择最低代价的节点,此g(n)是从起始节点到目前节点的路径的确实代价。如果h(n)是可接受的(admissible)意即h(n)未曾付出超过达到目标的代价,则A一定会找出最佳解。最能感受到启发式算法好处的经典问题是n-puzzle。此问题在计算错误的拼图图形,与计算任两块拼图的曼哈顿距离的总和以及它距离目的有多远时,使用了本算法。注意,上述两条件都必须在可接受的范围内。曼哈顿距离是一个简单版本的n-puzzle问题,因为我们假设可以独立移动一个方块到我们想要的位置,而暂不考虑会移到其他方块的问题。给我们一群合理的启发式函式h1(n),h2(n),...,hi(n) ,而函式h(n) = max{h1(n),h2(n),...,hi(n)}则是个可预测这些函式的启发式函式。一个在1993年由A.E. Prieditis写出的程式ABSOLVER就运用了这些技术,这程式可以自动为问题产生启发式算法。ABSOLVER为8-puzzle产生的启发式算法优于任何先前存在的!而且它也发现了第一个有用的解魔术方块的启发式程式。想知道更多关于A算法与最短路径问题的内容吗?请点击这里查看详细资料。
4.2 启发式算法对运算效能的影响
任何的搜寻问题中,每个节点都有b个选择以及到达目标的深度d,一个毫无技巧的算法通常都要搜寻bd个节点才能找到答案。启发式算法借由使用某种切割机制降低了分叉率(branching factor)以改进搜寻效率,由b降到较低的b'。分叉率可以用来定义启发式算法的偏序关系,例如:若在一个n节点的搜寻树上,h1(n)的分叉率较h2(n)低,则h1(n) < h2(n)。启发式为每个要解决特定问题的搜寻树的每个节点提供了较低的分叉率,因此它们拥有较佳效率的计算能力。更深入了解启发式算法在最短路径中的应用?点击这里即可获取更多详情。
新的算法设计、搜索优化,启发式算法的潜力无穷,期待在未来的计算问题中发挥更多的魔力!