读书笔记
mahaoyuan2015
这个作者很懒,什么都没留下…
展开
-
【算法导论】2.3-7
【算法导论】2.3-7 给定n个元素的集合S和一个x,判断是否存在两个元素属于S,且他们的和为x,要求时间复杂度ΘΘΘ(nlgn)。 首先归并排序,时间复杂度ΘΘΘ(nlgn) 然后设置两个标兵从最小处和最大处相向前行,每次计算两元素和,若等于x,停止;若小于x,小标兵前进;若大于x,大标兵后退。直到两标兵相遇,或找到和为x的两元素。时间复杂度ΘΘΘ(n) 则总时间复杂度为ΘΘΘ(nlgn)。...原创 2018-10-31 16:38:14 · 424 阅读 · 0 评论 -
【算法导论】9.1~9.2
顺序统计量 对于一个集合(数组)最大值或最小值可以在n−1n-1n−1次比较内求得,即每次比较更新当前最小(大)值。 若要同时求最大和最小值,可一对一对的比较,用较大的和maxmaxmax比较,较小的和minminmin比较 选择问题: 在一个集合内求第iii小的元素。 采用分治算法: 代码: #define _CRT_SECURE_NO_WARNINGS #include<stdio.h...原创 2018-11-20 17:52:45 · 608 阅读 · 0 评论 -
【算法导论】8.1~8.4
本文转载于: https://www.cnblogs.com/ttltry-air/archive/2012/08/04/2623302.html 计数排序,基数排序,桶排序等非比较排序算法,平均时间复杂度都是O(n)。这些排序因为其待排序元素本身就含有了定位特征,因而不需要比较就可以确定其前后位置,从而可以突破比较排序算法时间复杂度O(nlgn)的理论下限。 计数排序(Counting sort...转载 2018-11-15 23:05:41 · 659 阅读 · 0 评论 -
【算法导论】6.1~6.5
堆排序 时间复杂度:Θ(nlgn)Θ(nlgn)Θ(nlgn) 代码: #define _CRT_SECURE_NO_WARNINGS #include&lt;stdio.h&gt; /*向下调整以维持最大堆的性质*/ void siftdown(int a[], int x, int n) { int l, r, max, t; while (x &lt;= n / 2) { l ...原创 2018-11-08 16:41:04 · 186 阅读 · 0 评论 -
【算法导论】7
快速排序 代码: #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> int partition(int a[], int p, int r) { int t, i, j; /*随机化 int x = p + (rand() % (r - p)); t = a[r]; a[r] ...原创 2018-11-11 17:50:15 · 72 阅读 · 0 评论 -
【算法导论】4.2
矩阵乘法的 Strassen 算法 朴素算法时间复杂度:Θ(n3)Θ(n^3)Θ(n3); 一般分治算法: (1)A=[A11A12A21A23]&amp;nbsp;&amp;nbsp;B=[B11B12B21B23]&amp;nbsp;&amp;nbsp;C=[C11C12C21C23] A=\left[ \begin{matrix} A_{11} &amp;amp;amp; A_{12} \\ A_{21}原创 2018-11-06 00:48:52 · 245 阅读 · 0 评论 -
【算法导论】4.1-5
最大子数组和的线性时间算法 线性算法通过迭代求解: 先做以下规定: A[i...j]A[i...j]A[i...j]表示a[i...j]a[i...j]a[i...j]的最大子数组和。 P[j]P[j]P[j]表示a[1...j]a[1...j]a[1...j]中包括a[j]a[j]a[j]的最大子数组和 则: A[1...j]=max(A[1...j],a[j],P[j]+a[j]) A[1...原创 2018-11-04 21:52:49 · 1102 阅读 · 0 评论 -
【算法导论】5.3
随机算法 介绍两种将输入随机化的方法: 随机排列数组 设A[1...n]A[1...n]A[1...n]为原始输入。 生成一个新数组P[1...n]P[1...n]P[1...n],其中Pi=random(1,n3)。P_i=random(1,n^3)。Pi=random(1,n3)。 以PPP为基准对AAA进行排序。 原址排列数组 for i=1 to nsw...原创 2018-11-06 22:17:10 · 187 阅读 · 0 评论 -
【算法导论】2.1~2.3
【算法导论】2.1~2.3 (排序,分治) 插入排序,用文中的列子 整理扑克牌 可以非常清晰地描述该算法。效率为 n² 伪代码如下: 1 for j=2 to A.length 2 key=A[j] 3 i:=j-1 4 while i&gt;0 and A[i]&gt;key 5 A[i+1]=A[i] 6 ...原创 2018-10-30 23:21:44 · 147 阅读 · 0 评论 -
【算法导论】4.0~4.1
分治策略 4.0 分治策略用递归的方式求解问题,每层递归包括下面三个基本步骤: 分解: 将问题分解成若干个子问题,子问题形式与原问题相同,但规模较小。 解决: 递归地求解子问题,若子问题规模足够小,则停止递归,直接求解。 合并; 将子问题的解合并成原问题的解。 递归式的三种求解方法: 代入法: 猜测+数学归纳法证明。 递归树法: 将递归式转换为一棵树,节点表示递归调用产生的代价。然后用边界...原创 2018-10-31 22:06:26 · 135 阅读 · 0 评论 -
【算法导论】3.1~3.2
ΘΘΘ记号:渐近紧确界 OOO记号:渐近上界 ΩΩΩ记号:渐近下界 ooo记号:非渐近紧确的上界 ωωω记号:非渐近紧确的下界原创 2018-10-31 19:42:50 · 411 阅读 · 0 评论 -
【数据结构与算法分析】3.27
多重表 P.S. 每个结点包括四个域: 于该结点关联的学生编号 与该节点关联的班级编号 该节点的下一个学生结点 该节点的下一个班级结点 模拟代码如下: /* 输入: 第一行为学生数量n,之后有n组数据 第i组数据包括两行 第一行表示学生i选了x门课程 第二行有x个数,表示该学生所选课程编号。 输出: 输出每个班级注册的学生编号 若某班级无学生注册则不输出 */ #define _CRT_S...原创 2018-11-20 21:13:19 · 212 阅读 · 0 评论