算法导论笔记(二)
来源:互联网 发布:python字符串处理 编辑:程序博客网 时间:2024/06/04 19:36
1.插入排序
核心思想:从前向后对每个数和它之前的数字相比较,并把他放在合适的位置
2.拓扑排序
有向图排序,核心思想:
(1)深度遍历:遇到死端往回走,出盏顺序即为拓扑排序
(2)减一法:减去一个源端点即没有指向他的点,只有他指向别的端点,删除该端点,和他的线
3.生成排列(自底向上)
核心思想:从下至上1*C(2,1)*C(3,1)*...C(N,1)种
算法:Johnson:初始化1,2,3...n的队列,移动方向均向左。while存在移动元素do找到最大移动元素,交换最大移动元素和他移动所指向的元素,并且调整数值大于最大移动元素的元素的方向并生成新排列
移动元素:大的指向小的,该元素即可移动
4.生成子集(自底向上)
第n排 1 + C(N,1) + C(N,2) + C(N,3) +... + C(N,N) = POW(2,N)[包含空集]
减治思想的体现:A{a1,a2,...an} = 把an添加到{a1,a2,...,an-1}集合构成的所有子集
二进制格雷反射码:核心思想:如果n = 1,则L1 = {0,1} 否则执行:循环调用参数n-1得到L1,L2, = 反向L1,L1每个元素前+0,L2每个元素前+1,L1和L2拼接为L,返回L
5.折半查找
核心思想:已经排好序的list,while start < end :(start + end)/2和参数比,如果相等,则break,如果参数小,end = (start + end)/2,否则 start = (start + end)/2
6.假币问题
核心思想:同折半查找,对半分,轻的包含假币
7.俄式乘法
核心思想:A B相乘,不断将A/2,B*2,如果A为奇数,A/2向下取整,B = B * 2 (A),直到A等于1,最后将B + A1,A2,A3...
8.约瑟夫斯问题
核心思想:1~n成圈排列,第一个杀死第二个,直到剩下最后一个,最后一个存活的位置(2k+1/2k为圈内总人数)
奇数:J(2K+1) = 2*J(K)- 1
偶数:J(2K) = 2*J(K) - 1
9.lamuto划分
核心思想:类似于快速排序,选择第一个作为基准,小的交换到前面,大的交换到后面,遍历完成后,将该基准元素和小的最后一个做交换
10.快速选择
核心思想:递归调用不断进行lamuto划分,直到找到第k小的元素
11.插值查找
核心思想:已知是有序数组,故可以按照比例来进行计算,线性函数
12.
- 算法导论笔记(二)
- 算法导论学习笔记(二) 初稿
- 算法导论代码笔记(二)
- 算法导论(二)
- 《算法导论》笔记--红黑树(二)
- 《算法导论》笔记--红黑树(二)
- 算法导论学习笔记(二):合并排序
- 算法导论笔记(二) : 优先级队列
- 归并排序-《算法导论》学习笔记二
- 算法导论学习(二)
- 《算法导论》 读书笔记 (二)
- 算法导论笔记(第一章)
- 算法导论笔记(1)
- 笔记----算法导论(一)
- 《算法导论》笔记(一)
- 算法导论(1) 笔记
- 算法导论笔记(三)
- 算法导论笔记(四)
- maven工程的创建(五)--外加maven命令
- web.xml中<load-on-start>n</load-on-satrt>作用
- python面向对象(进阶篇)
- 【OpenCV入门教程之九】 非线性滤波专场:中值滤波、双边滤波
- JavaSE基础知识学习—继承
- 算法导论笔记(二)
- 常用的 chrome 扩展插件
- 郝斌老师C语言学习笔记----指针和数组
- 使用Libsvm工具包实现人脸分类
- java笔记1
- javaSE错题集
- jQuery之$.ajax()方法详解
- sqlserver截取一个人字符之前之后的字符
- markdown的数学公式