算法
陈华杰
数学与编程的热爱者
展开
-
经典算法教程:KMP字符串匹配算法
在文本S中找到模板P所处的位置,称为字符串匹配。如图所示最经典的算法莫过于由Knuth、Morris和Pratt三人设计的线性时间算法,简称KMP算法。1.原理解释如图,假设有文本S,模板P,在start位置开始匹配。当start=0时,表示从文本S的第一个字符开始匹配。假设逐个匹配到模板P中第j+1个字符时,S与P中的字符不相等,表示S与P中的前j个字符都相等。当j=0时原创 2018-01-31 20:46:59 · 292 阅读 · 0 评论 -
java数据结构:基于树的堆
本教程的内容基本来自于《Java数据结构与算法》 堆一种是一种特殊的二叉树结构,包含如下特点: 它是完全二叉树,即除了最后一层节点不是满的,其他层节点从左到右都完全是满的; 一般使用数组来存储堆数据结构; 堆中每个节点的关键字都大于等于(小于等于)这个节点的子节点的关键字,节点关键字大于等于子节点的关键字成为最大堆;反之,称为最小堆。 下图显示了完全二叉树与非完全...原创 2018-05-20 11:05:45 · 1198 阅读 · 0 评论 -
最全面的排序算法详解——冒泡、插入、归并、快速....
本教程旨在最全面的介绍排序算法包括原理与性能方面的比较。下文中的排序算法都以升序为例进行讲解。1.冒泡排序比较简单的排序算法之一,其原理是通过比较相邻的元素,将最大值以冒泡的形式交换到最后面。以数组42,3,12,25,9,21为例,如下图所示 原始数组: 基本思想: 相邻的两个数相比较,如果前面的数大于后面的数,就交换两个数,或者不改变数组按照基本思想,第一次比较42与...原创 2018-05-16 21:27:26 · 1279 阅读 · 0 评论 -
不使用中间变量交换两个浮点数
C++不使用中间变量交换两个浮点数C++中不使用中间变量交换两个整型数据,可以采用异或运算的特点:a^a = 0; a^0 = a;从而交换两个数的算法如下:a = a^b;b = a^b;a = a^b;利用上面的方法,如何交换两个浮点数呢?由于double数据占8个字节,int数据占4个字节,所以可以采用指针方式分段处理double数据,算法如下:double ...原创 2018-12-02 09:15:27 · 1205 阅读 · 1 评论