算法学习
文章平均质量分 85
haodynasty
这个作者很懒,什么都没留下…
展开
-
1000亿以内素数计数算法
转载自:是一篇很好的文章,效率相当高,可惜注释少了些,看起来有些恼火 1000亿以内素数计数算法 /******************************************************************copyright (C) 2007 Huang Yuanbingversion 1.1, 2007 PrimeNumberm...原创 2012-06-02 16:51:42 · 790 阅读 · 0 评论 -
线索二叉树
1.算法描述就是简单的线索二叉树的建立,遍历,查找等基本操作,具体什么是线索二叉树,百度一下! 2.算法说明具体说明有四点:如下图注:尤其要注意第4点,我在写的时候就没注意这个问题,结果遍历的时候出现了无限循环,找了半天才找到!主要是建立二叉树判断的惯性思维,故而容易出现错误! 3.代码实现头文件 #ifndef BITHRTREE_H#define...原创 2012-07-04 09:20:15 · 114 阅读 · 0 评论 -
构造哈夫曼树
1.算法说明就是建造哈夫曼树树,从而使得构造出的树带权路径长度最小 2.步骤 输入叶子结点个数n;创建长度为2*n-1的数组并初始化;while(i<n) 循环输入n个叶子结点的权值;while(n-1次循环建立树){ 在parent==-1的元素中查找权最小的两个结点; 合并两个叶子结点,并加入新结点到数组;} 3.代码//构造...原创 2012-07-04 10:40:17 · 293 阅读 · 0 评论 -
B-树
1.B-树的概念是一种多路搜索树,适合在磁盘等直接存取设备上组织动态的查找表,可能部分数据不在内存中。它作为索引文件的一种重要存储结构(数据库索引)对于m阶(m>=3)B-tree,满足如下特性:1)树中每个节点至多有m个节点2)根节点子树个数在:2---m(根非叶子节点)3)非根节点子树个数在:m/2(向上取整)---m。4)排列规则:所有叶节点在同一层,按照递增次...原创 2012-07-04 22:48:35 · 158 阅读 · 0 评论 -
二叉排序树
1.基本概念二叉排序树,树的定义就不赘述了,主要就是想说明一下在设计类的过程中需要注意的问题。a.问题引入?设计插入,删除等操作的过程中,我们的二叉排序树根节点的指针有可能改变,如删除根结点的指针操作,那么root的指针指向已经不是原来的位置,而是新的位置,怎么样才能返回最新的位置呢? b.问题解决在设计类中的函数就可以轻易的解决这个问题,这个在函数设计之初就必须详细...2012-08-10 10:25:18 · 120 阅读 · 0 评论 -
平衡二叉树
1.问题描述什么是平衡二叉树?在此就不在赘述,下面主要就几个关键问题进行分析 2.关键问题a.AVL树的非递归与递归插入平衡二叉树的非递归的关键:1.在寻找插入位置和旋转的时候设置其路径上的平衡因子,这个要特别注意 当然非递归比递归复杂的多,但是对于理解其执行过程很有帮助!2.是旋转之后可能并没有产生效果(实际上是旋转成功,但是输出的树没有变),因为在修改的时候,并...2012-08-10 10:39:48 · 110 阅读 · 0 评论 -
B-树实现
1.什么是B-树?这个在我的前一篇博客中已经详细的阐释过:http://hao3100590.iteye.com/blog/1576846具体的了解,好好看看这篇文章就可以了! 2.实现关键问题分析a.B-树删除原则见下图: 当然总结起来,大的方面就3点,具体的细节就没有做多大的说明,在下面具体实现的时候会说明 b.B-树的递归和非递归遍历对于非递归遍历...2012-08-10 11:03:15 · 206 阅读 · 0 评论 -
红黑树的插入总结
1.红黑树这个在july的博客中有详尽的说明,我就不在赘述了http://blog.csdn.net/v_JULY_v/article/details/6105630 2.红黑树的插入插入见下图:2012-08-10 11:25:43 · 106 阅读 · 0 评论 -
set和map的简单实现
1.Set的简单实现set是利用二叉查找树来实现的,而且为了查找方便,添加了另外两个指针,一个指向下一个最小结点,一个指向上一个最大结点。iset.h //利用二叉查找树实现set#ifndef ISET_H#define ISET_Htemplate<class T>struct Node{ T data; Node<T> *r...2012-08-10 11:35:25 · 106 阅读 · 0 评论 -
排序方法总结
这里面包含了所有常见的排序操作1.性能等比较分析2.代码实现sort.h //各种排序方法总结#ifndef SORT_H#define SORT_Htemplate<class T>class Sort{ public: void insertSort(T r[], int n); //直接顺...原创 2012-08-12 11:34:14 · 108 阅读 · 0 评论 -
常见字符串操作大全
1.常见的字符串操作如计算长度,求子串等都是考验基本功的,现在基本操作进行实现,如下 2.基本实现mchar.h //串的基本操作(注意:里面的所有操作要求串必须以'\0'结束)#ifndef MCHAR_H#define MCHAR_H//注意:这里面的i都是位置,从1开始;而数组中对应于0,从0开始class MChar{ public: ...原创 2012-08-12 11:34:44 · 191 阅读 · 0 评论 -
KMP算法解析
一.理论基础1.什么是kmp算法同BF算法一样,就是串的模式匹配算法。前面已经学过,我想都应该明白BF算法,就是用一种最直观的方式进行模式匹配。优点:非常容易理解,是我们常用的思维方式来编程;缺点:效率比较低,在匹配不成功的时候,回朔做了许多无用功; 从而根据其缺点,KMP算法就在回朔的时候做了工作,减少其无用功,那么怎么去减少回朔的工作呢?下面举例说明:...原创 2012-08-12 11:35:06 · 129 阅读 · 0 评论 -
二叉树基本操作大全
1.二叉树的基本操作这里我有一个疑问: 在使用构造函数的时候,传参数的问题?开始我是这么理解的------只使用指针(其实指针本身就是一个地址,相当于引用,也会改变root建立起二叉树),而2指针的引用,相当于就是对记录了指针的地址,采用了二次引用,其实是没有必要的,一次就够了。但是实际上用的时候并不是这样?根本不能建立二叉树,原因是因为开始指针指向的是一个不确定的位置?然后我又实...2012-07-03 18:22:17 · 277 阅读 · 0 评论 -
多种队列的实现
1.算法描述a.数据结构与算法(Mark Allen Weiss)3.28双端队列的实现,在队列的两端都可以进行插入和删除工作,每种操作复杂度O(1).b.没有头结点和尾结点的队列实现c.循环数组的队列实现 2.算法实现a.由于有复杂度的限制,和两端插入删除,故而使用数组是不适合的,必须使用链表,我这里使用的是双向链表,在两端操作的复杂度就一样的,非常方便b.没有头尾结...2012-06-29 10:09:57 · 139 阅读 · 0 评论 -
栈的各种实现
1.算法描述a.实现二个栈,在一个数组里面,除非没有任何空间剩余,否则不能有溢出声明b.实现一个没有头尾结点的栈(单链表)c.实现带有头结点的栈(单链表) 2.双栈对于双栈,我们还可以添加resize()方法,当空间满了重新自动分配空间(new),就是将原来的两个栈,拷贝到新建立的数组上面去a.dsexceptions.h #ifndef DSEXCEPTION...原创 2012-06-28 16:34:11 · 67 阅读 · 0 评论 -
素数的求解逐步改进
我的注释都写在代码里面了,就不在赘述了!如果有任何疑问欢迎留言参考博客:1.位操作总结:http://blog.csdn.net/morewindows/article/details/73545712.找素数算法总结:http://blog.csdn.net/hexiios/article/details/4400068非常感谢上面两篇博客的仁兄,致谢!尤其是读了位操作的...2012-06-02 22:22:41 · 89 阅读 · 0 评论 -
关于序列的几个算法
1.求最小子序列的和就是对于连续的序列,找出连续序列中和最小的例如:int a[LEN] = {4,-1,5,-2,-1,2,6,-2,1,-3};最小的子序列就是:-2,1,-3对于下面的最大子序列就是:4,-1,5,-2,-1,2,6。 /** *最小子序列和 *n */int subMinSum(int a[], int length){ i...原创 2012-06-03 16:38:31 · 354 阅读 · 0 评论 -
二分查找的递归和非递归
二分查找,这个适用于已经排序好了的数组,没有排序那就先排序,不过要根据实际的情况,要是排序代价很小,这样很好了/** *2.15,在有序数组中查找,利用二分查找的方法 * */ #include <iostream>using namespace std;/** *二分查找(也可以通过递归实现) * */int sort(int *...原创 2012-06-03 16:42:11 · 60 阅读 · 0 评论 -
求幂的递归和非递归
本文的非递归部分转载自:http://www.cnblogs.com/wallace/archive/2009/12/27/1633683.html先上算法1.递归算法 //幂运算的递归算法long pow(long x, int n){ if(n == 0) return 1; if(n == 1) return x; if(n % 2 == 0){ ret...原创 2012-06-03 17:14:30 · 148 阅读 · 0 评论 -
主元素算法
1.算法描述(算法分析2.26)大小为N的数组A,其主元素是一个出现超过N/2次的元素(从而这样的元素最多只有一个)。例如,数组3,3,4,2,4,4,2,4,4只有一个主元素4; 3,3,4,2,4,4,2,4没有主元素求出主元素,没有请指出 2.书中列出了一种算法,暂且叫递归法,这可以自己看书,其复杂度也只有O(n) 下面介绍两种其他的方法。在网上还有其他一些方...原创 2012-06-04 15:32:17 · 1840 阅读 · 0 评论 -
整数的随机置换
算法描述:生成前N个整数的随机置换,如{4,3,1,5,2},{4,5,3,2,1}是合法的,而{5,4,1,1,2}不合法,因为3没出现。1.基本算法该算法效率比较低,O(n*n*logn),主要就是随机的生成一个数,然后再一直数组中去检测是否存在,如果不存在才插入。从而效率低下 //使用的是思想1(O(n*n*logn))int* getRandom(int* a, int...2012-06-05 15:10:08 · 479 阅读 · 0 评论 -
线性查找二维数组
1.算法描述有序(行有序,列有序,且每行从左至右递增,列从上至下递增)二维数组查找,要求复杂度O(n) 2.使用到的相关知识:结构体定义和使用,二维数组传递(http://blog.csdn.net/yzhhmhm/article/details/2045816) 3.使用数组名传递这个的不便之处很明显,一旦确定就是不能设置列值//使用数组名实现(不...原创 2012-06-05 17:23:29 · 132 阅读 · 0 评论 -
关于最长递增子序列的实际应用--动态规划
参考链接:a.http://www.programfan.com/blog/article.asp?id=13086b.http://blog.csdn.net/hhygcy/article/details/3950158 1.对(http://hao3100590.iteye.com/blog/1548135)中问题6:最长递增子序列的改进,减少时间复杂度算法的思想: ...原创 2012-06-07 11:35:46 · 371 阅读 · 0 评论 -
Josephus问题
1.算法描述简单的游戏:有N个人坐成一圈,编号1-N、从编号为1的人开始传递热马铃薯。M次传递之后,持有马铃薯的人退出游戏,圈缩小,然后游戏从退出人下面的人开始,继续进行,最后留下的人获胜。如,M=0, N=5则参加游戏的人依次退出,5号获胜。M=1,N=5则退出顺序是2,4,1,5. 2.算法分析该算法使用一个没有头指针的循环链表完成,移动的过程计数,如果计数为M,则将其移除并从...2012-06-21 15:30:39 · 132 阅读 · 0 评论 -
后缀表达式的值
1.算法描述计算后缀表达式的值 2.事例如:(2+3)*5--->后缀表达式:23+5*,或者523+*在计算机中不能直接处理算术表达式,我们就转换为后缀表达式利用栈来解决这个问题 3.思想利用数据结构栈a.后缀表达式依次入栈,如果遇到操作符,就将栈顶两个元素出栈,计算结果在入栈。b.循环进行,直到栈中只有一个元素,就是结果 4.算法异常处...2012-06-27 16:33:29 · 380 阅读 · 0 评论 -
中缀表达式转换为后缀
1.算法描述 例如a+b*c这是常见的中缀表达式,但是为了方便计算,在计算机中常要转换为后缀表达式abc*+的形式,那如何转换呢? 用到的关键数据结构:栈转换的关键原则: 1.优先级判断:关键是比较运算符的优先级,谁的优先级高,谁就出现在前面上面的表达式中,有括号的时候括号优先级最高,*/次之,+-最后. 在上面的表达式中+的优先级不如*的高,因此,在后缀表达式...2012-06-28 11:10:16 · 108 阅读 · 0 评论 -
二叉堆的实现
1.堆的概念这里只需要注意两点:a.堆的存储方式:就是顺序存储在数组中,在二叉树中表现为满二叉树b.堆的用处:用于排序,查找最大最小都非常方便 2.堆的实现heapexception.h #ifndef HEAPEXCEPTION_H#define HEAPEXCEPTION_Hclass ArrayOverFlowException{ publi...原创 2012-08-12 11:35:38 · 108 阅读 · 0 评论