什么是启发式算法

启发式算法是一种解决问题的算法。它结合搜索算法和概率、深度等技术,给出解决问题的最便捷的路径。启发式算法不一定给出最优解,但给出的解决方案可以满足要求。
起源
启发式算法的诞生可以追溯到20世纪初的克里普斯克尔和团队研究引擎优化器。它比起典型的算法,具有更好的深度和发散性。后来,越来越多的应用于启发式搜索引擎,如搜索最小值、解决导航等各种问题。
原理
启发式算法基于对目标问题的有效表述,提出了一组能够发现问题解的具名的方法。它是通过建立针对搜索问题的有效表示和有针对性的准则来考虑问题,并制定搜索策略,从可搜索空间中找到解决方案。
一般来说,启发式算法有两个阶段,即初始步骤和搜索步骤。初始步骤中,启发式算法需要对目标问题进行分析,提出发现有效解决方案的准则,即“性质保障”;搜索步骤中,启发式算法根据该准则搜索有效解决方案,以找到最优的解决方案。
分类
根据启发式算法的搜索范围不同,可将其分为广度优先搜索算法(BFS)和深度优先搜索算法(DFS)。BFS是从一组节点开始,同时向较多方向搜索,以便更快地确定最近的节点,但存在时间复杂度较高的问题;DFS则沿着一条路径搜索,以便深入某一特定的节点,但可能给未来的解决方案带来不可预料的挫折。
此外,根据启发式算法的搜索过程和对状态的认识不同,可将其分为以下几类:
1.局部搜索(Local Search):可以在状态空间中随机选择一个状态作为初始解,然后进行局部搜索,即在当前状态基础上做小范围的搜索,以找到最优解。
2.贪心(Greed):采用一系列最佳决策,直接达到状态空间中尽可能接近最优解的状态。
3.分层搜索:在状态空间中层层搜索,先从某一层开始搜索,然后反复向更高层搜索,直至找到最优解。
4.狄仑特尔(Dijkstra):该方法主要用于计算两个点之间的最短路径,它根据搜索方向迭代,以便搜索特定方向的最短路径。
性能
对于启发式算法的性能评估,通常从时间复杂度、空间复杂度等方面来考量。
时间复杂度反映了算法的执行时间,如果搜索过程太耗时,就意味着运行效率低。在特别大、复杂的问题中,必须考虑时间复杂度,这样可以帮助判断算法是否可行。
空间复杂度反映了执行算法时,所需的存储空间。一般来说,如果空间复杂度越低,则执行效率越