算法
Snerng
NULL
展开
-
集束搜索
看计算机科学中最重要的32个算法,其中有个是集束搜索(又名定向搜索,Beam Search)——最佳优先搜索算法的优化。使用启发式函数评估它检查的每个节点的能力。不过,集束搜索只能在每个深度中发现前m个最符合条件的节点,m是固定数字——集束的宽度。泛泛的介绍,不是很能理解清楚,于是有百度又google,写篇东西备忘。先贴维基百科的地址:Beam Search翻译过来就是:Beam Se原创 2015-04-01 19:18:25 · 2316 阅读 · 0 评论 -
Best-First-Search算法
缩写起来是跟广度优先搜索一样的BFS,实际上不同。此BFS按照类似Dijkstra的流程运行,不同的是它能够评估任意结点到目标点的代价。与选择离初始结点最近的结点不同的是,它选择离目标最近的结点。BFS不能保证找到一条最短路径。然而,它比Dijkstra算法快的多,因为它用了一个启发式函数(heuristic function)快速地导向目标结点。看看维基百科的解释:Best-Firs原创 2015-04-02 16:03:20 · 9539 阅读 · 0 评论 -
A*搜索
又是最重要的32个算法之一。是一种静态路网中求解最短路最有效的直接搜索方法。后面还有更多改进的算法。原创 2015-04-01 20:53:47 · 458 阅读 · 0 评论 -
Dijkstra算法
经典不解释。Dijkstra算法从物体所在的初始点开始,访问图中的结点。它迭代检查待检查结点集中的结点,并把和该结点最靠近的尚未检查的结点加入待检查结点集。该结点集从初始结点向外扩展,直到到达目标结点。Dijkstra算法保证能找到一条从初始点到目标点的最短路径,只要所有的边都有一个非负的代价值。算法步骤:G={V,E}1. 初始时令 S={V0},T=V-S={其原创 2015-04-02 15:47:09 · 473 阅读 · 0 评论 -
Kruskal算法
求加权连通图的最小生成树的算法。和Prim算法对应,经典算法。算法步骤:假设 WN=(V,{E}) 是一个含有 n 个顶点的连通网,则按照克鲁斯卡尔算法构造最小生成树的过程为:先构造一个只含 n 个顶点,而边集为空的子图,若将该子图中各个顶点看成是各棵树上的根结点,则它是一个含有 n 棵树的一个森林。之后,从网的边集 E 中选取一条权值最小的边,若该条边的两个顶点分属不同的树,则将其加入子原创 2015-04-02 22:22:43 · 320 阅读 · 0 评论 -
堆排序
32个经典算法之一。堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。PS:树是图的子集,堆是树的一种形态。(1)用大根堆排序的基本思想:① 先将初始文件R[1..n]建成一个大根堆,此堆为初始的无序区② 再将关键字最大的记录R原创 2015-04-03 17:41:49 · 503 阅读 · 0 评论 -
合并排序
合并排序据说也是32个经典算法之一。三个经典排序:快速排序、堆排序、合并排序,时间复杂度都是O(nlgn),但还是有很大区别的。可以参考这个:快排、堆排、并排合并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。合并排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干原创 2015-04-04 09:46:22 · 463 阅读 · 0 评论