![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
_charles_
永不止步
展开
-
加权平均法 -- 算法
加权平均法,即将各数值乘以相应的单位数,然后加总求和得到总体值,再除以总的单位数。平均数的大小不仅取决于总体中各单位的标志值(变量值)的大小,而且取决于各标志值出现的次数(频数),由于各标志值出现的次数对其在平均数中的影响起着权衡轻重的作用,因此叫做权数。 举例说明,下面是一个同学的某一科的考试成绩: 平时测验 80, 期中 90, 期末 95 学校规定的科目成绩的计算方式是: 平转载 2015-07-27 11:47:16 · 14114 阅读 · 0 评论 -
顺序,二分,插值,斐波那契 查找算法
总结:博客详细描述:(http://www.cnblogs.com/maybe2030/p/4715035.html#_label4)二分查找、插值查找以及斐波那契查找都可以归为一类插值查找; 插值查找和斐波那契查找是在二分查找的基础上的优化;但由于数组中数据分布非常不均匀,所以插值查找效率未必好;查找定义:根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。查找算法原创 2016-11-19 15:25:25 · 1871 阅读 · 0 评论 -
顺序,二分,插值,斐波那契 查找算法-效率测试
总结:通过下述效率测试:平均效率:二分查找>斐波那契查找>顺序查找>插值查找二分查找和斐波那契查找平均效率大约大10倍。插值查找虽然是二分查找的升级,但由于超找数组(链表)的值不均匀,导致平均插值查找效率都比顺序查找效率低。这里测试在数据中随机抽取1024个值,来计算平均时间,有可能测试不全面导致顺序查找效率高于插值查找。Text Len : 1(KB)Loop times :原创 2016-11-21 17:35:54 · 1609 阅读 · 0 评论 -
树、二叉树、二叉查找树 算法
总结:树:树是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合。 二叉树:可以是空集;根可以有空的左子树或右子树;或者左、右子树皆为空。 1. 完整二叉树:2{h} –1节点,h是高度 2. 满二叉树(包括完整二叉树):两层结点的度可以小于2,并且最下一层的叶结点集中在靠左的若干位置上 3. 二叉查找树:左子树节点值<它的根节点值<右子树节点值。二叉查找树(h原创 2016-11-21 19:47:51 · 929 阅读 · 0 评论 -
二叉查找树、平衡树、伸展树、红黑树 算法
总结二叉查找树:任意一个节点所包含的键值,大于等于左孩子的键值,小于等于右孩子的键值。 此外,无论是左旋还是右旋,若旋转之前这棵树是二叉查找树,旋转之后它一定还是二叉查找树。平衡树(AVL树):AVL树中任何节点的两个子树的高度最大差别为1,LL,RR,LR,RL旋转算法。 对于1百万个节点的平衡树,树的高度为12-20之间,对于10亿个节点的平衡树,树的高度为18-30之间。伸展树:当某个节点原创 2016-11-22 09:30:49 · 3324 阅读 · 0 评论 -
B树,B+树,B*树 算法
总结B树:是为了磁盘或其它存储设备而设计的一种多叉平衡查找树B和B+树的区别:B树在提高了磁盘IO性能的同时并没有解决元素遍历的效率低下的问题。正是为了解决这个问题,B+树应运而生。B+树只要遍历叶子节点就可以实现整棵树的遍历。而且在数据库中基于范围的查询是非常频繁的,而B树不支持这样的操作(或者说效率太低)。 B+树的非叶子结点只包含导航信息,不包含实际的值,所有的叶子结点和相连的节点使用链表相原创 2016-11-22 10:16:49 · 1745 阅读 · 0 评论 -
哈希Hash 算法
注意文章详解(http://blog.csdn.net/v_july_v/article/details/6256463)哈希由来:数组的特点是:寻址容易,插入和删除困难 链表的特点是:寻址困难,插入和删除容易做出一种寻址容易,插入删除也容易哈希特点:通过散列算法,变换成固定长度的输出;散列值的空间通常远小于输入的空间, 不同的输入可能会散列成相同的输出, 而不可能从散列值来唯一的确定输原创 2016-12-13 14:08:12 · 2194 阅读 · 0 评论 -
位图排序、多路归并排序-应对磁盘文件排序
注意文章详解(http://blog.csdn.net/v_JULY_v/article/details/6451990)如何给磁盘文件排序问题描述:输入:给定一个文件,里面最多含有n个不重复的正整数(也就是说可能含有少于n个不重复正整数),且其中每个数都小于等于n,n=10^7。 输出:得到按从小到大升序排列的包含所有输入的整数的列表。 条件:最多有大约1MB的内存空间可用,但磁盘空间足够。且原创 2016-12-13 17:08:40 · 1990 阅读 · 0 评论 -
二叉树前序、中序确定树结构
例子前序:A D C E F G H B 中序:C D F E G H A B中序使用中括号划分左、右子树中括号选中的节点依次为前序的顺序; 中括号左右两边分别为左、右子树; 当子树为1个节点时,可以肯定这个子树位置;C D F E G H [A] BC [D] F E G HF [E] G H[G] H演示过程原创 2016-12-09 14:59:45 · 820 阅读 · 0 评论 -
开放定址法(线性探测),拉链法 -Hash算法
总结:哈希别名为:Hash 或者 散列表; 开放定址法是为了解决hash值碰撞后的处理;散列表(哈希)是算法在时间和空间上作出权衡的经典例子。 如果没有内存限制,我们可以直接将键作为(可能是一个超大的)数组的索引,那么所有查找操作只需要访问内存一次即可完成。但这种情况不会经常出现,因此当键很多时需要的内存太大。 另一方面,如果没有时间限制,我们可以使用无序数组并进行顺序查找,这样就只需要很少的原创 2016-12-30 09:11:01 · 7607 阅读 · 2 评论 -
冒泡、选择、插入、归并、快速、堆排序效率测试
总结:冒泡、插入、归并都是稳定排序。 冒泡、选择、插入时间复杂度平均O(n^2)。 堆排、归并、快速时间复杂度平均O(nlogn)。测试结果:Text Len : 1(KB)Loop times : 512 Bubble Select Insert Merge Quick HeapTIME 0.00168 0.00121 0.00066 0.0原创 2016-11-03 09:46:09 · 931 阅读 · 0 评论 -
冒泡排序
冒泡排序算法的流程如下: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。原理: 代码:int array[] = {1,3,2,8,6,4,9,11};int le原创 2016-11-01 17:21:01 · 530 阅读 · 0 评论 -
Simple、KMP、BM、Sunday匹配算法-效率测试
总结:BM属于贪心算法,适应于实际应用。KMP是稳定算法,不在乎特例。sunday更容易理解,效率比BM高。一般的BM算法很容易构造m*n的特例,不过实际应用中比较少见。当然BM算法也可以改造成稳定的,构造模式比KMP需要多一些时间。模式串比较长时的时候bm不错,如果模式串较短,差不了多少KMP算法比BM算法实际性能差3-5倍时间复杂度简单匹配 O(m*n) KMP O(m+n)原创 2016-11-11 17:03:40 · 3165 阅读 · 3 评论 -
归并排序
归并排序是利用”归并”技术来进行排序。归并是指将若干个已排序的子文件合并成一个有序的文件。常见的归并排序有两路归并排序(Merge Sort),多相归并排序(Polyphase Merge Sort),Strand排序(Strand Sort)。下面介绍第一种:两路归并排序最差时间复杂度:O(nlogn) 平均时间复杂度:O(nlogn) 最差空间复杂度:O(n) 稳定性:稳定两路归并排序(M原创 2016-11-02 15:16:14 · 682 阅读 · 0 评论 -
冒泡、选择、插入、归并、快速排序代码
冒泡排序void bubble_sort(int * array, int len){ int tmp; for (int i=0; i<len; ++i) { for (int j=0; j<(len-i-1); ++j) { if(array[j+1] < array[j]) {原创 2016-11-03 09:40:38 · 393 阅读 · 0 评论 -
堆排序
先对二叉堆(最大堆和最小堆)理解:(实现添加,删除) 二叉堆文章:http://www.cnblogs.com/skywang12345/p/3610187.html 1、添加 2、删除 堆排序文章:http://www.cnblogs.com/skywang12345/p/3602162.html最大堆进行升序排序的基本思想: ① 初始化堆:将数列a[1…n]构造成最大堆。 ② 交原创 2016-11-03 15:01:37 · 451 阅读 · 0 评论 -
KMP匹配算法
总结:上文中,KMP算法和BM算法,这两个算法在最坏情况下均具有线性的查找时间。但实际上,KMP算法并不比最简单的c库函数strstr()快多少,而BM算法虽然通常比KMP算法快,但BM算法也还不是现有字符串查找算法中最快的算法,比BM算法更快的查找算法即Sunday算法。这篇文章已经详细描述:http://blog.csdn.net/v_july_v/article/details/7041827原创 2016-11-07 11:11:43 · 472 阅读 · 0 评论 -
KMP匹配算法-效率测试
总结:KMP匹配无规律的匹配字符串效果不太好。KMP匹配有关联的字符串效率比较高。KMP匹配无关数据,效率也许比简单匹配低。无关数据匹配//无关数据匹配//模式匹配字符串PA B C D A B D A B A C D -1 0 0 0 -1 0 2 -1 0 2 1 0 //文本串SE H原创 2016-11-07 13:56:48 · 2655 阅读 · 0 评论 -
Sunday匹配算法
总结:Sunday算法比BM算法还要快。一:背景Sunday算法是Daniel M.Sunday于1990年提出的字符串模式匹配。其效率在匹配随机的字符串时比其他匹配算法还要更快。Sunday算法的实现可比KMP,BM的实现容易太多。二:分析假设我们有如下字符串: A = “LESSONS TEARNED IN SOFTWARE TE”; B = “SOFTWARE”; Sunday算法的大致转载 2016-11-09 19:30:40 · 860 阅读 · 0 评论 -
BM匹配算法
总结:KMP算法并不是效率最高的算法,实际采用并不多。各种文本编辑器的”查找”功能(Ctrl+F),大多采用Boyer-Moore算法。 假定字符串为”HERE IS A SIMPLE EXAMPLE”,搜索词为”EXAMPLE”E X A M P L E0 1 2 3 4 5 6坏字符规则: 移动位置 = 坏字符位置 - 搜索词中的上一次出现位置 7 = EXAMPLE最后一个字符E(原创 2016-11-09 14:19:47 · 1469 阅读 · 0 评论 -
AC多模匹配算法
总结:AC算法的核心是三张查找表:goto、failure和output,共包含四种具体的算法,分别是计算三张查找表的算法以及AC算法本身。可以先阅读博客(http://tech.meituan.com/ac.html)了解goto表、failure表。 下述文章(http://blog.csdn.net/myjoying/article/details/7960534)博客转发。早在1975年贝转载 2016-11-08 10:12:38 · 2289 阅读 · 0 评论 -
AC多模匹配算法-测试效率
总结:AC算法对无规则匹配数据和有关联匹配数据影响不是很明显。 无论是有匹配还是无关匹配,大概遍历1G文件都需要10s左右。1G文件中都是0到9的字符。无匹配操作时,单纯遍历1G文件耗时情况[root@devvm acsmx]# ./ac 1G.txt ABCDE AAAAA BBBB KKKK EEEETotal Time: 4.1900 seconds.有关数据匹配:相关数据匹配[root@原创 2016-11-08 19:16:39 · 1914 阅读 · 0 评论 -
Trie树 与 三分树(Ternary Trees)
总结为什么用Trie树?词频统计 可能有人要说了,词频统计简单啊,一个hash或者一个堆就可以打完收工,但问题来了,如果内存有限呢?还能这么玩吗?所以这里我们就可以用trie树来压缩下空间,因为公共前缀都是用一个节点保存的。前缀匹配 如果and,as,at,我想获取所有以”a”开头的字符串,如果不用trie树,你该怎么做呢?很显然朴素的做法时间复杂度为O(N2),那么用Trie树就不一样了,原创 2016-12-30 11:25:20 · 3662 阅读 · 1 评论