全球旧事资料 分类
是基本思想就是建立一个队列队列是一种基本的数据结构,我会在下一部分中说明,然后每一次都拿出队列出的一个点扩展出所有的可能,再把我们需要的解放入队列等着下次再扩展,一直扩展到找到答案或者不能扩展为止,BFS的经典题有跳马问题,八数码等。BFS有一个非常常用的技巧或者说是优化,就是双向BFS,思想是一样的,就是同时从起点和终点开始扩展,等到出现交点的时候就意味着找到了答案,这样比起普通的BFS可以节省大量的空间和时间。BFS还有另外一个常见的扩展,就是优先队列BFS,所谓的优先队列优先队列是队列的一种实现,我同样会在下一部分中给出解释,就是始终都保持队列的队首元素是最小的,这样每次扩展的就是当前最小的元素了,这里所
谓的最小,其实指的是当前看来最优的解,利用这么一种贪心的方法,
f来加快我们搜到答案的速度,当然了,具体的效率还要看题目的数据。说了这么多的优先队BFS,其实就是A的一种特殊情况,A的中文名是启发式搜索,是人工智能中常用的一种搜索技术,A最基础的应用就是求最短路,通过某个估价函数对当前的点做出一个价值评估,然后将这些扩展出来的点按照其价值放入一个优先队列中,那么我们每次拿出的队首元素不就是我们当前最优希望的一个点吗?如果用STLC的标准模板库,同样会在下一部分中给出解释来实现优先队列的话,A比起BFS的代码量几乎没增加,无非多了一个估价函数,但是问题就在于如何更好地设计出一个估价函数,A的经典题有贪吃蛇,八数码。5C应用之STLSTL是C的标准模板库,为我们提供了相当多的现成的库函数和数据结构,STL即可以极大地缩短我们的代码长度,有可以极大地降低我们出错的概率。那么你可能就奇怪了,为什么我还会恨STL呢?理由很简单,我们必须要付出相当大代价,那就是效率。下面我简要地介绍一下STL在ACM中的简单应用。首先就是STL中的库函数了,其中我们有我们最为常用的sort排序函数,有fi
d,lower_bou
d和upper_bou
d等一些查找函数用来简化我们的代码,另外最常用的就是顺序容器和关联容器了,其实顺序容器可以相当相当程度上代替一些常用的基础数据结构如vector可以代替长度可变的数组可以简单地实现邻接表,list可以代替链表,stack可以代替栈,deque可以代
f替双端队列,priority_queue可以代替我们前面提到的优先队列,而关联容器中的map可以实现任意两种类型的数据之间的索引,而set可以查找某个集合中是否存在某个元素。6数据结构之基础篇数r
好听全球资料 返回顶部