算法设计课程学习
mooc北京大学算法设计慕课笔记和代码实现
zykyonghui
这个作者很懒,什么都没留下…
展开
-
分治算法解凸包问题
问题 平面点集的凸包问题:给定大量的离散点集合Q,求一个最小的凸多边形,使Q中的点在多边形内或者多边形边上 分治算法 分为以下两步: 1.纵坐标最大的点和纵坐标最小的点连成直线d,将Q分为Q_left和Q_right 2.Deal(Q_left);Deal(Q_right) Deal(Q_left)的实现过程: 1.以d和距d最远的点p组成三角形,另外两条边记为a和b,点p加入凸包 2.在三角形内的点删除,在边a外侧的点和边a形成新的子问题a_outboard,采用相同的方法处理,在边b外侧的点和边b同样形原创 2021-03-09 22:51:15 · 599 阅读 · 0 评论 -
幂乘算法
问题:求ana^{n}an 分治算法设计思想 1.逐项相乘时需要做n-1次乘法运算,时间复杂度为o(n)o(n)o(n) 2.当n为偶数时:ana^{n}an=an/2a^{n/2}an/2 * an/2a^{n/2}an/2,an/2a^{n/2}an/2可以只求一次,乘法的运算次数为n/2,运算次数减少。当n为奇数时,ana^{n}an=a(n−1)/2a^{(n-1)/2}a(n−1)/2 * a(n−1)/2∗aa^{(n-1)/2} * aa(n−1)/2∗a,乘法的运算次数为(n-1)/2,同样原创 2020-08-29 09:30:31 · 2540 阅读 · 0 评论 -
快速排序
快速排序 设计思想 通过与首元素的比较将原序列分为左右两部分,左边部分小于首元素,右边元素不小于首元素,然后递归排序左右两部分,最终得到有序序列 代码 #include <bits/stdc++.h> using namespace std; int partition(int* a,int p,int r){ int x=a[p]; int i=p+1; int j=r; while(1){ while(i<j){ if(a[j]<=x) break; --原创 2020-08-27 20:33:12 · 89 阅读 · 0 评论 -
各种排序算法
1.插入排序 1.1直接插入排序 1.1.1算法原理 基本操作是将某个数字插入到一个有序数组中。第i趟插入排序是将数组中第i个元素插入到数组中的正确位置。未插入前数组前i-1个元素有序排列,插入后前i个元素有序排列。遍历数组完成每个元素的插入从而得到一个有序数组。插入时首先要寻找插入的位置,寻找过程中把相应元素后移。 1.1.2算法实现 void straight_insert(int* p,int array_size){ int temp=p[0]; for(int i=1;i<a原创 2020-10-10 16:38:04 · 101 阅读 · 0 评论