1 / 22

上帝掷 色子 吗

上帝掷 色子 吗. 谢其哲. Introduction. 上帝掷 色子 吗 -> 随机和 概率 能力 : 1. 很大 概率上的正确 解 2. 较 优 解 3. 期望时间 复杂 度 很好的正确解 效果好. 最好写的平衡树 Treap. 期末时当你开始预习数据结构的平衡树是什么感受? AVL , 红黑, AA …… What the f* ck are these ugly trees? 被吓倒了? 来看看居家旅行杀人越货必备之平衡树: Treap. 最好写的平衡树 Treap. 堆 + 排序 二叉树 权 值: key, aux 。

yagil
Télécharger la présentation

上帝掷 色子 吗

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 上帝掷色子吗 谢其哲

  2. Introduction • 上帝掷色子吗 ->随机和概率 • 能力: • 1.很大概率上的正确解 • 2.较优解 • 3.期望时间复杂度很好的正确解 • 效果好

  3. 最好写的平衡树Treap • 期末时当你开始预习数据结构的平衡树是什么感受? • AVL,红黑,AA…… • What the f*ck are these ugly trees? • 被吓倒了? • 来看看居家旅行杀人越货必备之平衡树:Treap

  4. 最好写的平衡树Treap • 堆+排序二叉树 • 权值:key, aux。 • Key:左子树≤根≤右子树(排序二叉树) • Aux: 根≤左子树,右子树(堆)

  5. 最好写的平衡树Treap • 插入:根据key找到插入的位置 • 随机生成aux,旋转调整

  6. 最好写的平衡树Treap • Insert(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)

  7. 最好写的平衡树Treap • Delete差不多,只有单旋 • 期望高度:O(logn) • 平均复杂度:O(logn)

  8. 素数判定Miller-Rabin算法 • O() -> O(logn) • 费马小定理: • (p为素数, a<p) • 二次探测定理: • 若 • P为合数时,x取值有很多,如

  9. 素数判定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

  10. 素数判定Miller-Rabin算法 • 素数一定会通过测试 • 合数有1/4的概率通过测试 • 取6次不同的底a,误判率不到千分之二 • 取内无误判。

  11. 判断A*B=C? • Problem: 给定A,B,C(n*n的矩阵),判断是否A*B=C • 随机生成D(1*n的矩阵),判断是否D*A*B=D*C

  12. 平面最近点对 • 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;

  13. 平面最近点对 • What if?.... • 出题人太ws,测试数据中点的x比较接近

  14. 平面最近点对 • 改进: • 投影到一个随机的向量上,两点距离≥投影点距离 • 按投影位置排序,投影点距离≥ans,则break • 出题人卡不到

  15. 平面最小三角形 • 给定N个点,求一个以其中三个点为顶点的三角形,使其周长最小。 • 传统算法:O(nlogn),难写,常数大 • O(n^3) • 随机向量投影,O(n^3)+break比O(nlogn)快

  16. 费马点问题 • 给定n个点,求一个点到这n个点的距离和最小。

  17. 费马点 • 爬山算法: (求局部最优解) • 随机设置一个初始点b,设置初始步长T • While T>T_min • Flag=false • For i = 1 to k • 生成长度为T的随机向量v • If b+v优于b • b=b+v, flag=true • If (flag == false) T=T*0.8

  18. 模拟退火 • 原理:热力学退火过程,给固体设置一个充分高的温度,温度高时,原子容易脱离原位置做自由运动。再让其慢慢冷却。冷却时原子会趋向内能最小的地方,但也有一定概率去内能较大的地方,直到温度足够低。 • 流程: • 初始温度T,初始解S,每次迭代次数L,降温系数p • While T>T_min • Flag=false • For 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

  19. 最小正方形覆盖(poj3301) • 枚举正方形一条边的角度,计算最小需要的边长。 • 初始温度T=pi/2, 角度S=0,每次迭代次数L=20, 降温系数p=0.5 • While T>1e-8 • Flag=false • For 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

  20. 遗传算法 • 原理:达尔文进化论和遗传学机理 • 有n个个体(DNA序列),按照适应度(权值)从高到低排序。 • 繁殖:选出两个个体,以高概率选择适应度高的,低概率选择适应度低的,以一定概率P交配得出两个新个体代替原来的老个体,新个体的DNA是老个体DNA的组合。 • 突变:以一定概率随机改变序列的一到两位。 • 重复 • 适应度高的个体得到保存,适应度低的个体淘汰。

  21. 拓展 • 遗传算法与蒙娜丽莎 • TSP问题->模拟退火

  22. 谢谢!

More Related