编程珠玑---读书笔记
文章平均质量分 67
xiaozhuaixifu
这个作者很懒,什么都没留下…
展开
-
编程珠玑读书笔记之------>一个正确的二分搜索代码
首先确保待查找的元素是处于已排序状态,先给出一个错误的版本,下面这个程序将会陷入死循环:#include using namespace std;const int MAXN=100;int x[MAXN],n,t; //n是数组的长度,t是待查找的元素int binarysearch(int t){ int l,u,m; l=0,u=n-1; while(l<=u) {原创 2013-06-23 20:38:08 · 1048 阅读 · 0 评论 -
编程珠玑读书笔记之----->使用线性算法求解连续子序列的最大和
这个算法我在我的博客里使用动态规划做过,具体实现请参阅我的dp板块,下面给出书上最快的算法,时间复杂度为O(n),称之为线性算法。#include using namespace std;int x[10]={31,-41,59,26,-53,58,97,-93,-23,84};int mmax(int a,int b){ return a>b?a:b;}int main(){原创 2013-06-23 21:36:46 · 1238 阅读 · 0 评论 -
位图排序概要 编程珠玑(第一章)-----学习笔记
位图或者位向量可以表示一系列序列集合,比如:可用一个20位长的字符串来表示一个所有元素都小于20的简单的非负整数集合。例如可用如下字符串表示集合{1,2,3,5,8,13}: 0 1 1 1 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 集合中为1的代表整数集合中的该数。这种表示有一些限制:输入数据限制在相对较小的范围内,数据没有重复,而且对于每条记录而言,除了单一整数外原创 2013-06-23 10:39:40 · 1390 阅读 · 0 评论 -
编程珠玑---读书笔记---第11章排序
插入排序:对于小型的排序任务速度很快,它是稳定的,只需要O(1)的额外空间,基于比较和交换的次数为O(n^2)。#include #include #include #include #include #include #include #include #include #include using namespace std;int x[8]={55,41,59,原创 2013-06-24 17:02:25 · 1068 阅读 · 0 评论 -
编程珠玑---读书笔记---堆的实现及堆排序
堆是用来表示元素集合的一种数据结构。与“堆内存”不同。堆的性质,第一:顺序性:任何结点的值都小于或者等于其子结点的值,这意味着最小元素位于根结点。最大顶堆跟这个相反。第二个性质是形状:一种二叉树,最底层的叶子结点尽可能靠左分布,如果有n个结点,那么所有结点到根的距离不会超过logn。下面用vector来实现堆:我们规范的从下标1开始,函数定义如下:root=1;value(i)原创 2013-06-25 15:11:35 · 1277 阅读 · 0 评论 -
编程珠玑---读书笔记---生成随机整数的有序子集
第一种:使用STL实现,这种现成的数据结构能使代码非常简便,每次插入操作都在O(logm)时间内完成,而遍历集合S需要O(m)的时间,所以完成的程序需要O(m logm)的时间(mx相对于n较小事),但是这种数据结构的空间开销却很大。以下程序实现生成m个0-n内的有序整数子集,第一个算法取m=10,n=100;#include #include #include #include原创 2013-06-24 19:53:14 · 1141 阅读 · 0 评论 -
编程珠玑---读书笔记---使用后缀数组查找最长重复子串
后缀数组是一个字符指针数组,数组中指针所指的对象包含了字符串的每一个后缀,因此成为后缀数组。看代码:#include #include #include #include #include #include #include #include #include #include #include #include using namespace std;#defi原创 2013-06-25 16:21:25 · 960 阅读 · 0 评论