算法
zhaixh_89
这个作者很懒,什么都没留下…
展开
-
字符串拷贝操作函数原型实现
字符串拷贝函数char * strcpy(char *dst,const char *src) { if((dst==NULL)||(src==NULL)) return NULL; char *ret = dst; //[1] while ((*dst++=*src++)!='\0'); //[2] return ...原创 2018-05-17 14:17:51 · 636 阅读 · 0 评论 -
快速排序
基本思想:通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录比另一部分记录的关键字小,然后对这两部分分别进行快速排序,如此重复直到整个序列有序。实现代码:void QSort(int a[], int left, int right){ int i,j,k; k = a[left]; i = left; j = right; while(i < j) {...原创 2020-04-06 14:16:43 · 794 阅读 · 0 评论 -
希尔排序
希尔排序算法思想:希尔排序是把序列按照增量分组,对每一组使用直接插入排序算法排序,随着增量逐渐减少,每组包含的元素越来越多,当增量为1时,整个序列分成一组,算法结束。算法实际上是一种分组插入方法。算法实现代码:void ShellSort(int a[], int n,int d){ int i, j, t; while (d > 0) { for (i = d; ...原创 2020-04-01 16:13:50 · 302 阅读 · 0 评论 -
直接插入排序
插入排序思想:每一趟将一个待排序的记录,按其关键字的大小插入到已经排好序的一组记录的适当位置上,直到所有待排序记录全部插入为止实现代码如下:void InsertSort(int a[], int n){ int i, j, t; for (int i = 1; i < n; ++i) { t = a[i]; j = i - 1; while (a[j] &...原创 2020-04-01 15:39:08 · 227 阅读 · 0 评论 -
简单选择排序
选择排序的基本思想:每一趟在数个记录里选取关键字最小的记录作为有序序列的第i个记录。实现代码如下:void SelectSort(int a[], int n){ int k, temp; for (int i =0 ; i < n - 1; ++i) { k = i; for (int j = i + 1; j < n; ++j) { if (a[...原创 2020-04-01 12:03:03 · 239 阅读 · 0 评论 -
冒泡排序
冒泡排序算法的原理如下:1、比较相邻的元素,如果第一个比第二个大,就交换它们两个。2、对每一组相邻元素做同样的操作,一趟完成后,最后的元素就是最大的数。3、对所有元素重复上述步骤,除了最后一个数4、持续每次对越来越少的元素重复上面的步骤,知道没有任何一对数字需要比较。算法代码如下:void BubbleSort(int a[], int n){ int temp;...原创 2020-04-01 10:24:26 · 203 阅读 · 0 评论 -
二叉排序树
顺序存储的线性表查找我们可以使用折半、插值、斐波那契等查找算法来实现,因为有序,所以在插入和删除上就需要耗费大量的时间,今天要讨论的算法既可以获得不错的插入删除效率,也可以比较高效的实现查找——二叉排序树。二叉排序树又叫二叉查找树,它或者是一棵空树,或者是具有下列性质的二叉树。1、如果它的左子树不为空,则左子树上所有节点的值均小于它的根节点的值。2、如果它的右子树不为空,则右子树上所有...原创 2020-03-31 12:27:35 · 196 阅读 · 0 评论 -
有序表查找
折半查找折半查找又称为二分查找,它的前提是线性表中的记录必须是关键码有序,线性表必须采用顺序存储。折半查找的基本思想是:在有序表中,取中间记录作为比较对象,若给定值与中间记录相等,则查找成功;若给定值小于中间记录关键字,则在中间记录的左半区继续查找;若给定值大于中间记录关键字,则在中间记录的右半区继续查找。不断重复上述过程,直到查找成功,或所有记录都已查完,查找失败为止。折半查找的算法代码...原创 2020-03-31 11:19:24 · 193 阅读 · 0 评论 -
顺序表查找
顺序查找又叫线性查找,是最基本的查找技术,它的查找过程是:从表中第一个(或最后一个)记录开始逐个进行记录的关键字和给定值比较,若某个记录的关键字和给定值相等,则查找成功;如果直到最后一个(或第一个)记录,其关键字和给定值比较都不相等时,则表中没有所查的记录,查找不成功。顺序查找的算法如下:/*顺序查找,a为待查数组,n为数组长度, key为要查找的关键字*/int search(int...原创 2020-03-31 10:51:05 · 422 阅读 · 0 评论 -
单链表的拓展操作
前面我们已经学习了单链表的存储结构以及一些基本操作,但是在实际运用中,我们还会涉及到其他一些需求。下面我们针对不同需求做一下整理。输出列表中倒数第i个元素的值下面算法通过两次遍历的方式巧妙的实现了查找链表中倒数第i个元素的功能,实现代码如下:/*输出链表中倒数第i个元素的值*/Status GetEelemTail(LinkList L, int i, Elemtype *e){...原创 2020-03-29 13:52:46 · 345 阅读 · 0 评论 -
单链表的存储结构及操作
在讨论单链表(带头节点,不带头节点类似,这里不再赘述)之前我,我们学习过线性表的顺序存储结构,我们知道它是有缺点的,最大的缺点就是插入和删除元素时需要移动大量元素、并且需要预先分配存储空间,但是优点是存取方便。线性表的链式存储结构特点是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的。其存储结构如下:/*线性表的链式存储结构*/typedef int...原创 2020-03-29 13:18:43 · 2722 阅读 · 0 评论 -
归并排序算法
算法原理归并排序思想就是假设初识序有n个记录,可以看成是n个有序的子序列,每个序列的长度为1,然然两两合并,得到n/2个长度为2或1的有序子序列,继续两两合并,如此反复知道得到一个长度为n的有序序列为止,称为2路归并排序代码实现void Merge(int a[], int temp[], int starIndex, int midIndex, int endIndex){ i...原创 2019-05-18 17:43:51 · 112 阅读 · 0 评论 -
堆排序算法
目录数据结构定义算法原理代码实现算法复杂度分析数据结构定义堆是具有如下性质的完全二叉树:每个节点的值都大于或等于其左右孩子节点的值称为大根堆; 或者每个节点的值都小鱼或等于其左右孩子节点的值称为小根堆算法原理假定是构造大根堆(小根堆与此类似),基本思想是将待排序的序列构造成一个大根堆,此时整个序列的最大值就是根节点的值,然后将它移走(就是将首尾元素交换...原创 2019-05-18 14:43:27 · 126 阅读 · 0 评论 -
快速求平方根算法
对于一个整数求解其平方根可以使用“二分法”和“牛顿法”。二分法算法:给定精确度ξ,用二分法求函数f(x)零点近似值的步骤如下:1 确定区间[a,b],验证f(a)·f(b)2 求区间(a,b)的中点c.3 计算f(c).(1) 若f(c)=0,则c就是函数的零点;(2) 若f(a)·f(c)(3) 若f(c)·f(b)(4) 判断是否达到精确度ξ:即若|a-原创 2017-10-04 11:10:15 · 12450 阅读 · 0 评论 -
文本分类入门(番外篇)特征选择与特征权重计算的区别
转自:http://www.blogjava.net/zhenandaci/archive/2009/04/19/266388.html在文本分类的过程中,特征(也可以简单的理解为“词”)从人类能够理解的形式转换为计算机能够理解的形式时,实际上经过了两步骤的量化——特征选择阶段的重要程度量化和将具体文本转化为向量时的特征权重量化。初次接触文本分类的人很容易混淆这两个步骤使用的方法和各自转载 2014-01-14 02:32:27 · 669 阅读 · 0 评论 -
SVM入门(八)松弛变量
转自:http://www.blogjava.net/zhenandaci/archive/2009/03/15/259786.html现在我们已经把一个本来线性不可分的文本分类问题,通过映射到高维空间而变成了线性可分的。就像下图这样: 圆形和方形的点各有成千上万个(毕竟,这就是我们训练集中文档的数量嘛,当然很大了)。现在想象我们有另一个训练集,只比原先这个训练集转载 2014-01-14 02:28:25 · 570 阅读 · 0 评论 -
KMP字符串模式匹配详解(二)
三. 怎么求串的模式值next[n]定义:(1)next[0]= -1 意义:任何串的第一个字符的模式值规定为-1。(2)next[j]= -1 意义:模式串T中下标为j的字符,如果与首字符相同,且j的前面的1—k个字符与开头的1—k个字符不等(或者相等但T[k]==T[j])(1≤k)。如:T=”abCabCad” 则 next[6]=-1,因转载 2013-04-12 09:02:19 · 550 阅读 · 0 评论 -
KMP字符串模式匹配详解(三)
四. 求串T的模式值next[n]的函数说了这么多,是不是觉得求串T的模式值next[n]很复杂呢?要叫我写个函数出来,目前来说,我宁愿去登天。好在有现成的函数,当初发明KMP算法,写出这个函数的先辈,令我佩服得六体投地。我等后生小子,理解起来,都要反复琢磨。下面是这个函数:void get_nextval(const char *T, int next[]){转载 2013-04-12 09:44:43 · 556 阅读 · 0 评论 -
SVM算法入门
转自:http://blog.csdn.net/yangliuy/article/details/7316496SVM入门(一)至(三)Refresh按:之前的文章重新汇编一下,修改了一些错误和不当的说法,一起复习,然后继续SVM之旅.(一)SVM的简介支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本、非线转载 2013-08-26 09:42:24 · 948 阅读 · 0 评论 -
验证身份证号码的计算方法
身份证中第十八位数字的计算方法为: 1、将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7. 9 .10 .5. 8. 4. 2. 1. 6. 3. 7. 9. 10. 5. 8. 4. 2.2、将这17位数字和系数相乘的结果相加。 3、用加出来和除以11,看余数是多少?4、余数只可能有0 、1、 2、 3、 4、 5、 6、 7、 8、 9、 1转载 2013-10-18 15:15:37 · 1127 阅读 · 0 评论 -
AES对称加密算法原理
加密它:用新的高级加密标准(AES)保持你的数据安全 原著:James McCaffrey 翻译:小刀人原文出处:MSDN Magazine November 2003 (Encrypt It) 本文的代码下载:msdnmag200311AES.exe (143KB) 本文假设你熟悉 C# 和 位(bit)操作。 摘要 AES(The Advanced Encrypti转载 2013-10-23 15:23:00 · 927 阅读 · 0 评论 -
SVM入门(七)为何需要核函数
转自:http://www.blogjava.net/zhenandaci/archive/2009/03/06/258288.html生存?还是毁灭?——哈姆雷特 可分?还是不可分?——支持向量机 之前一直在讨论的线性分类器,器如其名(汗,这是什么说法啊),只能对线性可分的样本做处理。如果提供的样本线性不可分,结果很简单,线性分类器的求解程序会无限循环,永远也解不出来。这必然使得转载 2014-01-14 02:27:37 · 630 阅读 · 0 评论 -
SVM入门(一)至(三)Refresh
转自:http://www.blogjava.net/zhenandaci/archive/2009/02/13/254519.html按:之前的文章重新汇编一下,修改了一些错误和不当的说法,一起复习,然后继续SVM之旅.(一)SVM的八股简介支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本、非线性及高转载 2014-01-14 02:21:28 · 557 阅读 · 0 评论 -
SVM入门(九)松弛变量(续)
转自:http://www.blogjava.net/zhenandaci/archive/2009/03/17/260315.html接下来要说的东西其实不是松弛变量本身,但由于是为了使用松弛变量才引入的,因此放在这里也算合适,那就是惩罚因子C。回头看一眼引入了松弛变量以后的优化问题:注意其中C的位置,也可以回想一下C所起的作用(表征你有多么重视离群点,C越大越重视,越不想丢转载 2014-01-14 02:29:18 · 683 阅读 · 0 评论 -
SVM入门(十)将SVM用于多类分类
转自:http://www.blogjava.net/zhenandaci/archive/2009/03/26/262113.html从 SVM的那几张图可以看出来,SVM是一种典型的两类分类器,即它只回答属于正类还是负类的问题。而现实中要解决的问题,往往是多类的问题(少部分例外,例如垃圾邮件过滤,就只需要确定“是”还是“不是”垃圾邮件),比如文本分类,比如数字识别。如何由两类分类器转载 2014-01-14 02:30:03 · 533 阅读 · 0 评论 -
文本分类入门(十一)特征选择方法之信息增益
转自:http://www.blogjava.net/zhenandaci/archive/2009/03/24/261701.html前文提到过,除了开方检验(CHI)以外,信息增益(IG,Information Gain)也是很有效的特征选择方法。但凡是特征选择,总是在将特征的重要程度量化之后再进行选择,而如何量化特征的重要性,就成了各种方法间最大的不同。开方检验中使用特征与类别间转载 2014-01-14 02:30:50 · 700 阅读 · 0 评论 -
SVM入门(四)线性分类器的求解——问题的描述Part1
转自:http://www.blogjava.net/zhenandaci/archive/2009/02/上节说到我们有了一个线性分类函数,也有了判断解优劣的标准——即有了优化的目标,这个目标就是最大化几何间隔,但是看过一些关于SVM的论文的人一定记得什么优化的目标是要最小化||w||这样的说法,这是怎么回事呢?回头再看看我们对间隔和几何间隔的定义:间隔:δ=y(wx+b)=|g转载 2014-01-14 02:24:06 · 580 阅读 · 0 评论 -
SVM入门(五)线性分类器的求解——问题的描述Part2
转自:http://www.blogjava.net/zhenandaci/archive/2009/02/14/254630.html从最一般的定义上说,一个求最小值的问题就是一个优化问题(也叫寻优问题,更文绉绉的叫法是规划——Programming),它同样由两部分组成,目标函数和约束条件,可以用下面的式子表示:(式1)约束条件用函数c来表示,就是constrain的意转载 2014-01-14 02:25:16 · 566 阅读 · 0 评论 -
SVM入门(六)线性分类器的求解——问题的转化,直观角度
转自:http://www.blogjava.net/zhenandaci/archive/2009/03/01/257237.html让我再一次比较完整的重复一下我们要解决的问题:我们有属于两个类别的样本点(并不限定这些点在二维空间中)若干,如图, 圆形的样本点定为正样本(连带着,我们可以把正样本所属的类叫做正类),方形的点定为负例。我们想求得这样一个线性函数(在n维空间中的转载 2014-01-14 02:26:31 · 539 阅读 · 0 评论 -
KMP字符串模式匹配详解
个人觉得这篇文章是网上的介绍有关KMP算法更让人容易理解的文章了,确实说得很“详细”,耐心地把它看完肯定会有所收获的~~,另外有关模式函数值next[i]确实有很多版本啊,在另外一些面向对象的算法描述书中也有失效函数 f(j)的说法,其实是一个意思,即next[j]=f(j-1)+1,不过还是next[j]这种表示法好理解啊:转载 2013-04-12 08:50:18 · 488 阅读 · 0 评论