Upload
yagil
View
70
Download
6
Embed Size (px)
DESCRIPTION
上帝掷 色子 吗. 谢其哲. Introduction. 上帝掷 色子 吗 -> 随机和 概率 能力 : 1. 很大 概率上的正确 解 2. 较 优 解 3. 期望时间 复杂 度 很好的正确解 效果好. 最好写的平衡树 Treap. 期末时当你开始预习数据结构的平衡树是什么感受? AVL , 红黑, AA …… What the f* ck are these ugly trees? 被吓倒了? 来看看居家旅行杀人越货必备之平衡树: Treap. 最好写的平衡树 Treap. 堆 + 排序 二叉树 权 值: key, aux 。 - PowerPoint PPT Presentation
Citation preview
上帝掷色子吗谢其哲
Introduction上帝掷色子吗 -> 随机和概率
能力:1. 很大概率上的正确解2. 较优解3. 期望时间复杂度很好的正确解
效果好
最好写的平衡树 Treap期末时当你开始预习数据结构的平衡树是什么感受?
AVL , 红黑, AA……
What the f*ck are these ugly trees?
被吓倒了?来看看居家旅行杀人越货必备之平衡树: Treap
最好写的平衡树 Treap堆 + 排序二叉树权值: key, aux 。Key :左子树≤根≤右子树(排序二叉树)Aux: 根≤左子树,右子树(堆)
最好写的平衡树 Treap插入:根据 key 找到插入的位置随机生成 aux ,旋转调整
最好写的平衡树 TreapInsert(I, k)
If (i==0) 新建点, aux[i] = rand()
If (k < key[i]) Insert(l[i], k) If (aux[l[i]] < aux[i]) right(i)
Else Insert(r[i], k) If (aux[r[i]] > aux[i]) left(i)
最好写的平衡树 TreapDelete 差不多,只有单旋期望高度: O(logn)平均复杂度: O(logn)
素数判定 Miller-Rabin 算法O() -> O(logn)
费马小定理: (p 为素数 , a<p)
二次探测定理:若P 为合数时, x 取值有很多,如
素数判定 Miller-Rabin 算法令, d 为奇数若或,则称 p 通过以 a 为底的素性测试(为素数)。
原理:若 p 为素数,则 考虑数列 . 最后一位是 1 ,每一位是前一位的平方
%p ,设数列最后一个 1 的前一个是 x ,若 x≠-1 则p 为合数。
例子: a=2 , p=13 , p-1=12=数列: 8, 64%13=12, 144%13=1
素数判定 Miller-Rabin 算法素数一定会通过测试合数有 1/4 的概率通过测试取 6 次不同的底 a ,误判率不到千分之二
取内无误判。
判断 A*B=C?Problem: 给定 A , B , C(n*n 的矩阵 ) ,判断是
否 A*B=C
随机生成 D(1*n 的矩阵 ) ,判断是否 D*A*B=D*C
平面最近点对O(logn)两点距离≥ X 值的差解 1: ( 对随机数据效果很好 )把输入的点按 x 从小到大排序For i = 1 to n for j = i + 1 to n if (x[j] – x[i] < ans) ans = min(ans, distant(i, j)); else break;
平面最近点对What if?....出题人太 ws ,测试数据中点的 x 比较接近
平面最近点对改进:投影到一个随机的向量上,两点距离≥投影点距离按投影位置排序,投影点距离≥ ans ,则 break出题人卡不到
平面最小三角形给定 N 个点,求一个以其中三个点为顶点的三角形,
使其周长最小。
传统算法: O(nlogn) ,难写,常数大O(n^3)随机向量投影, O(n^3)+break 比 O(nlogn) 快
费马点问题给定 n 个点,求一个点到这 n 个点的距离和最小。
费马点爬山算法 : ( 求局部最优解 )随机设置一个初始点 b ,设置初始步长 TWhile T>T_min
Flag=false For i = 1 to k
生成长度为 T 的随机向量 v If b+v 优于 b
b=b+v, flag=trueIf (flag == false) T=T*0.8
模拟退火原理:热力学退火过程,给固体设置一个充分高的温度,温度高时,
原子容易脱离原位置做自由运动。再让其慢慢冷却。冷却时原子会趋向内能最小的地方,但也有一定概率去内能较大的地方,直到温度足够低。
流程:初始温度 T ,初始解 S ,每次迭代次数 L ,降温系数 pWhile T>T_min
Flag=falseFor k = 1 to L
随机长度为 T 的增量 D , S’=S+D 计算 df=f(S’)-f(S) df>0 时 ( 变优了 ) 接受解 S’, flag=true df<0 时 ( 变差了 ) 以接受解 S’
If (flag==false)T=T*p
最小正方形覆盖 (poj3301)枚举正方形一条边的角度,计算最小需要的边长。初始温度 T=pi/2, 角度 S=0 ,每次迭代次数 L=20,
降温系数 p=0.5While T>1e-8
Flag=falseFor k = 1 to L
t = T * (-1 到 1 中的一个随机数 ) df=f(S)-f(S+t) ( f(S) 为一条边角度为 S 时最小正方形边长) df>0 时 接受解 S’,flag=true df<0 时 以接受解 S’ ()
If (flag==false)T=T*p
遗传算法原理:达尔文进化论和遗传学机理有 n 个个体( DNA 序列),按照适应度(权值)从
高到低排序。繁殖:选出两个个体,以高概率选择适应度高的,低
概率选择适应度低的,以一定概率 P交配得出两个新个体代替原来的老个体,新个体的 DNA 是老个体DNA 的组合。
突变:以一定概率随机改变序列的一到两位。重复适应度高的个体得到保存,适应度低的个体淘汰。
拓展遗传算法与蒙娜丽莎
TSP 问题 -> 模拟退火
谢谢!