随笔分类 - 数据结构与算法
摘要:摘自《算法设计与分析基础》一书1、欧几里德算法 2、埃拉托色尼筛 3、合并排序4、快速排序 5、折半查找 6、大整数乘法7、Strassen矩阵乘法8、最近对(分治)9、凸包(分治)10、插入排序 11、希尔排序 12、DFS 13、BFS 14、拓扑排序15、生成队列 16、生成子集 17、假币问题18、俄国农夫法 19、约瑟夫斯问题 20、计算中值21、插值查找 22、二叉树查找 23、拈游戏24、预排序 25、高斯消去法 26、平衡二叉树(AVL、2-3)27、堆排序 28、霍纳法则 29、二进制幂30、问题化简 31、线性规划 3...
阅读全文
摘要:如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段。我们这里说的KMP不是拿来放电影的(虽然我很喜欢这个软件),而是一种算法。KMP算法是拿来处理字符串匹配的。换句话说,给你两个字符串,你需要回答,B串是否是A串的子串(A串是否包含B串)。比如,字符串A="I'm matrix67",字符串B="matrix",我们就说B是A的子串。你可以委婉地问你的MM:“假如你要向你喜欢的人表白的话,我的名字是你的告白语中的子串吗?”解决这类问题,通常我们的方法是枚举从A串的什么位置起开始与B匹配,然后验证是否匹配。假如A串长度为n,B串长
阅读全文
摘要:7.22③ 试基于图的深度优先搜索策略写一算法,判别以邻接表方式存储的有向图中是否存在由顶点vi到顶点vj的路径(i≠j)。 注意:算法中涉及的图的基本操作必须在此存储结构上实现。实现下列函数:Status DfsReachable(ALGraph g, int i, int j);/* Judge if it exists a path from vertex ‘i’ to *//* vertex ‘j’ in digraph ‘g’. *//* Array ‘visited[]‘ has been initialed to ‘false’.*/图的邻接表以及相关类型和辅助变量定义如下:St
阅读全文
摘要:10.23② 试以L.r[k+1]作为监视哨改写教材10.2.1节中给出的直接插入排序算法。其中,L.r[1..k]为待排序记录且k<maxsize。实现下列函数:void InsertSort(SqList &L);顺序表的类型SqList定义如下:typedef struct {KeyType key;…} RedType;typedef struct {RedType r[MAXSIZE+1]; // r[0]闲置或用作哨兵单元int length;} SqList;//-_-!!题目关于LT这个函数什么也没说 voidInsertSort(SqList&L){ i
阅读全文
摘要:6.33③ 假定用两个一维数组L[1..n]和R[1..n]作为有n个结点的二叉树的存储结构, L[i]和R[i]分别指示结点i的左孩子和右孩子,0表示空。试写一个算法判别结点u是否为结点v的子孙。要求实现以下函数:Status Dencendant(Array1D L,Array1D R,int n,int u,int v);/* If node ‘u’ is the dencendant of node ‘v’, *//* then return ‘TRUE’ else return ‘FALSE’. *//* L[i] is the left child of the i_th node
阅读全文
摘要:5.18⑤ 试设计一个算法,将数组A中的元素A[0..n-1]循环右移k位,并要求只用一个元素大小的附加存储,元素移动或交换次数为O(n)。要求实现以下函数:void Rotate(Array1D &a, int n, int k);一维数组类型Array1D的定义:typedef ElemType Array1D[MAXLEN];void Rotate(Array1D &a, int n, int k) /* a[n] contains the elements, */ /* rotate them right circlely by k sits */ { ...
阅读全文
摘要:4.10③编写对串求逆的递推算法。要求实现以下函数:voidReverse(StringType&s);/*Reversesbyiteration.*/StringType是串的一个抽象数据类型,它包含以下6种基本操作:voidInitStr(StringType&s);//初始化s为空串。voidStrAssign(StringType&t,StringTypes);//将s的值赋给t。s的实际参数是串变量。intStrCompare(StringTypes,StringTypet);//比较s和t。若s>t,返回值>0;若s=t,返回值=0;若s<
阅读全文
摘要:◆3.17③ 试写一个算法,识别依次读入的一个以@为结束符的字符序列是否为形如’序列1&序列2′模式的字符序列。其中序列1和序列2中都不含字符’&',且序列2是序列1的逆序列。例如,’a+b&b+a’是属该模式的字符序列,而’1+3&3-1′则不是。实现下列函数:Status match(char *str);/* 若str是属该模式的字符序列,*//* 则返回TRUE,否则返回FALSE */Stack是一个已实现的栈。可使用的相关类型和函数:typedef char SElemType; // 栈Stack的元素类型Status InitStack(
阅读全文
摘要:◆2.11② 设顺序表L中的数据元素递增有序。试写一算法,将x插入到L的适当位置上,并保持该表的有序性。要求实现下列函数:void InsertOrderList(SqList &L, ElemType x)/* 在有序的顺序表 L 中保序插入数据元素 x */顺序表类型定义如下:typedef struct {ElemType *elem;int length;int listsize;} SqList;void InsertOrderList(SqList &L, ElemType x) // 在有序的顺序表 L 中保序插入数据元素 x { ElemType *p,*q;
阅读全文
摘要:Time Limit: 1000MS Memory Limit: 30000KTotal Submissions: 7821 Accepted: 2919DescriptionA calendar is a system for measuring time, from hours and minutes, to months and days, and finally to years and centuries. The terms of hour, day, month, year and century are all units of time measurements of a .
阅读全文
摘要:注意:此处代码可能并非最优化结果,等待代码优化中。。。。◆1.16② 试写一算法,如果三个整数X,Y和Z的值不是依次非递增的,则通过交换,令其为非递增。要求实现下列函数:void Descend(int &x, int &y, int &z);/* 按从大到小顺序返回x,y和z的值 */void Descend(int &x, int &y, int &z)/* 按从大到小顺序返回x,y和z的值 */{ int temp; if(x<y){temp=x;x=y;y=temp;} if(x<z){temp=x;x=z;z=temp;}
阅读全文
摘要:1936:All in All查看提交统计提问时间限制:1000ms内存限制:65536kB描述You have devised a new encryption technique which encodes a message by inserting between its characters randomly generated strings in a clever way. Because of pending patent issues we will not discuss in detail how the strings are generated and inserte
阅读全文
摘要:2975:Caesar 密码查看提交统计提问时间限制:1000ms内存限制:65536kB描述Julius Caesar 生活在充满危险和阴谋的年代。为了生存,他首次发明了密码,用于军队的消息传递。假设你是Caesar 军团中的一名军官,需要把Caesar 发送的消息破译出来、并提供给你的将军。消息加密的办法是:对消息原文中的每个字母,分别用该字母之后的第5个字母替换(例如:消息原文中的每个字母A都分别替换成字母F),其他字符不 变,并且消息原文的所有字母都是大写的。密码字母:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z原文字母:V W
阅读全文
摘要:2743:字符串判等查看提交统计提问时间限制:1000ms内存限制:65536kB描述判断两个由大小写字母和空格组成的字符串在忽略大小写和压缩掉空格后是否相等输入第1行是测试数据的组数n,每组测试数据占2行,第1行是第一个字符串s1,第2行是第二个字符串s2。每组测试数据之间有一个空行,每行数据不超过100个字符(注意字符串的长度可能为0)输出n行,相等则输出YES,否则输出NO样例输入3a A bb BB ccc CCCAa BBbb CCCccca dfadf fasdfadasddfsfsaf样例输出YESYESNO#include<stdio.h> #include<
阅读全文
摘要:2742:统计字符数查看提交统计提问时间限制:1000ms内存限制:65536kB描述判断一个由a-z这26个字符组成的字符串中哪个字符出现的次数最多输入第1行是测试数据的组数n,每组测试数据占1行,是一个由a-z这26个字符组成的字符串每组测试数据之间有一个空行,每行数据不超过1000个字符且非空输出n行,每行输出对应一个输入。一行输出包括出现次数最多的字符和该字符出现的次数,中间是一个空格。如果有多个字符出现的次数相同且最多,那么输出ascii码最小的那一个字符样例输入2abbcccadfadffasdf样例输出c 3f 4//grids2742_AC #include<stdio.
阅读全文

浙公网安备 33010602011771号