北大ACM暑期培训课程目录(二)

本文出自:http://blog.csdn.net/svitter

原来的一篇可能是因为字数太长,一编辑就出问题,无奈,只好暂时写一篇新的。

今天学习的内容是搜索。

一.wide search

1.poj3307 cow

深度搜索还要用栈。

广度搜速度更快。

按照层次的顺序访问节点。

走n步可以到达的点,n-1不可以到达。绝对是最优解。

可以联系图来想——周围区域扩展。

re记住已经走过的点(如果转换成树呢?)

利用队列来存点。

广搜的空间大,深搜可以用一个栈来维护。(相对于广搜空间少的多)

open表中。指向父节点的指针。(达到目标最少要走多少步。用层次编号来求。)

队头的节点是目标节点,搜索完成。可以倒序输出路径。

注意:

1.判重复的标记。

2.层级编号

3.利用STL<queue>

poj3984迷宫

求最短到达迷宫口的路径。

从队头取出状态来扩展。扩展过(visit=0)则步扩展

基本是相同的题目。

可以利用递归来输出路径(即栈)。

改变队列头的位置,但是并不是删除队列中的元素。

以上基本为数据结构的内容。

BL 4980

迷宫变种。

类似于魔塔。

队列为空时结束,在数据结构中存一个时间变量。

把x扩展为可消除的点,第一次遇见扩展出改变。相当于扩展空间。

bl6044鸣人佐助。

花费量。花费最为有效的查克拉。

什么状态。都是强调状态。迷宫问题状态是xy,对于不同的标记不同。

简单的标记无法解决问题

类似动规

r, c, k所在行列,查克拉的数量。

可以对应的状态变幻。

求钥匙的鸣人

需要集齐k种钥匙。必须集齐K种钥匙才能救佐助。(1年级期末考试题目,程序设计实习)

POJ1729

jack,jill想距离最远。

两个人最近的直线距离最远。

移动结束以后距离最远,不考虑移动过城中的距离。

状态:一对格子是一个状态。

给一个限制条件,观察是否可以走到。

假设一个限制条件。枚举k看是否满足。

枚举所有的距离k。

求k的最大值。

深搜可能会慢一点,光搜应该会快。

利用二分法查找来寻找一个更合适的值。(经典!线性的搜索)。

最近的最远距离。

注意:

格子队的判重问题。

个人的重复走问题。

利用标记判重。

POJ1077八数码

人工智能的经典问题

也是强调状态。

局面是一个状态。

状态压缩方法。

状态树。(一个比较好的方式去记录)

* 通性:状态的判重。

状态曾经出现过(不就是动规的子状态么)

一共9!

直到找到目标状态。

能是o(1)最佳。

状态的压缩表示。**数字的敏感性。

每一个状态对应一个9位数。

int 可以表示一个状态。

标志位的序列。一个元素8bit一个需要。。。

减少标志位的存储空间。状态数目只有9!

每个状态空座0-8的一个排列。

每一个排列作为一个序号。

计算出排列序号x,数组小表就是a[x/8]的第x%8位。

*给定一个序号求排列。

状态数字大小,时间的均衡。

作是否有解的判定。

*奇排列无法转换成为偶排列。(离散数学)

移动0的位置,不会改变数列的奇偶性。可以证明。

POJ数据只有1组。hdu有多组数据。

bitset<STL>

2.compare dfs and bfs

3.双向广搜

DBFS是一种扩展。

利用两个队列。

*   一个扩展队列已经扩展过,则可以停下了。

两头搜索。

为何要快呢?

扩展出的总节点数目要少。

单向搜索要m层才能找到答案,总的节点书目(1-n^m)/(1-n)

双向广搜,同样是一共扩展m曾。两边各扩展出m/2层

则总结点数目2*(1-n^m-2)/(1-n)

*   选择节点较少的那边进行扩展。

4.A*算法

启发式搜索算法的一种

每个状态n都会有一个估价函数。

优先考虑f值小额节点。

g(n)从其是状态到状态n的代价(不一定是最优的).

h(n)估计代价。

* 对估价函数进行特定限制,来确保知道最优解。

注意:

1.h(n)相容。

2.g(n)>=g*(n),g(n)>0

3.h(n)>=h*(n);

set:

multiset<>平衡二叉树

hdu3000MS过的。比双向广搜慢。

人工智能中的博弈*(可能状态数目太多)

5.迭代加深搜索算法,也会重复搜索

6.IDA*加深的A*算法

poj2286

二.深搜剪枝

1.

时间: 2024-11-10 15:19:52

北大ACM暑期培训课程目录(二)的相关文章

北大ACM暑期培训课程目录(四)

本文出自:http://blog.csdn.net/svitter Computational Geometry 计算几何 ACM中基本是最麻烦的部分. 几何代码都要自己写,STL中也没有.基本上. struct point 数乘,差乘,计算几何题目抄.一个数字由于误差积累造成大. 避免误差. 注意: a=b <=> |a-b| < e a<b <=> a-b < -e a<=b <=> a-b < e e 多10^-8 四舍六入五差 +-

北大ACM暑期培训课程目录(五)

本文出自:http://blog.csdn.net/svitter netFlow Ford-Fulkerson 深度优先搜索,制作一个流网络. 部分路径可能不合理. 对上次dfs的边就行重新筛选.每条边来个反向边. 再来一次dfs 发现还能找到一条路径. dfs->abtray edge->dfs stop when no new stream 容量相等. *残余网络 寻找变数最少的增广路径 通过bfs寻找增广路劲 Edmonds-Karp最短增广路算法 依然不是很好的算法. POJ1273

北大ACM暑期培训课程目录(三)

本文出自:http://blog.csdn.net/svitter 一.图的生成树 .必然含有n-1条边. .无向带权图. .如何求最小生成树. .prime | kruskal Prime: 从点里面找一个最短的边. kruskal: 从边里面找. .密集图使用邻接矩阵来存储. .稀疏图用邻接表来存储. .开一个邻接表,一个vector的一维数组. 时间复杂度(ElogV) 一般情况下邻接表更加优秀 题目:poj1258(邻接矩阵) 使用prime+堆完成.priority_queue(就是二

北大ACM暑期培训(1)——线段树,树状数组

本文出自:http://blog.csdn.net/svitter 今天ACM暑期实训开始了,今天讲述的内容是: 7.14  数据结构(一): 线段树,树状数组,二维线段树. 线段树:invertal tree (称为区间树更加合适) 作用:快速区间查询,用于解决区间统计的有关问题. 重点:同层节点不重叠. 每层最多有两个终止节点. 更新和进行区间分解的时间复杂度均为log(n); 方法:调用会多次使用递归更新插入查询: 空间:开空间的时候,一般情况下开4n大小,2*2log[n] - 1 <=

北大ACM题库习题分类与简介(转载)

在百度文库上找到的,不知是哪位大牛整理的,真的很不错! zz题 目分类 Posted by fishhead at 2007-01-13 12:44:58.0 -------------------------------------------------------------------------------- acm.pku.edu.cn 1. 排序 1423, 1694, 1723, 1727, 1763, 1788, 1828, 1838, 1840, 2201, 2376, 23

EOJ 1848 你是ACM吗? 用二叉堆优化dijkstra + spfa算法的学习

Description  随着中国经济的腾飞,中国的物流产业迎来了发展的春天.特别是在上海这样一个拥有广阔国内腹地的国际化大都市,物流业以空前的速度膨胀. 当然是大蛋糕就会吸引许多馋嘴猫,馋嘴猫多了就会有残酷的竞争.当大量资金流入物流产业时,KOP 集团为了稳坐在国内物流业的第一把交椅,决定对现行的运输方案进行改良,以减少自己的成本同时使其它竞争者知难而退. 作为世界100强的KOP集团当然知道要找到最优运输方案,肯定得靠数学和算法很好的软件工程师,于是他们理所当然地找到华东师范大学软件学院.决

北大ACM试题分类

OJ上的一些水题(可用来练手和增加自信) (poj1003,poj1004,poj1005,poj1207,poj3299,poj2159,poj2739,poj1083,poj2262,poj3006,poj2255,poj3094) 初级: 一.基本算法: (1)枚举. (poj1018,poj1753,poj2965)(2)贪心(poj1328,poj2109,poj2586)(3)递归和分治法. (4)递推. (5)构造法.(poj3295,poj3239)(6.1)模拟法.(poj10

北大ACM - POJ试题分类

1.入门水题 可用于练手与增强自信 POJ-1003 POJ-1004 POJ-1005 POJ-1207 POJ-3299 POJ-2159 POJ-1083 POJ-3094 2.初级 2.1. 基本算法 - 枚举 POJ-1753 POJ-2965 贪心 POJ-1328 POJ-2586 递归和分治法 - 递推 - 构造法 POJ-3295 POJ-3239 模拟法 POJ-1008 POJ-1068 POJ-2632 POJ-1573 POJ-2993 POJ-2996 POJ-308

暑期周总结二(2018.7.16-2018.7.22)

本周任务安排与代码花费时间 周一 系统中病毒,重装windows 0h 周二 重装oracle,mysqll,,等等 10h 周三 重写创新平台年报统计系统 5h 周四 重写创新平台年报统计系统 8h 周五 重写创新平台年报统计系统 5h 周六 重写创新平台年报统计系统 8h 周日 重写创新平台年报统计系统 5h 下周任务:学习hadoop等大数据知识. 本周遇到的问题: 1.安装jdk配置环境变量: "变量名":JAVA_HOME "变量值":C:\Program