算法&&数据结构
文章平均质量分 69
bigbigtree911
这个作者很懒,什么都没留下…
展开
-
常用排序算法实现——归并排序
归并排序:将无序数据一分两半,分别排序,然后再合并。使用递归不断分半,直到只有两个元素,然后merge。原理:http://zh.wikipedia.org/wiki/%E5%BD%92%E5%B9%B6%E6%8E%92%E5%BA%8F最差时间复杂度最优时间复杂度平均时间复杂度最差空间复杂度原创 2014-03-14 21:21:39 · 634 阅读 · 0 评论 -
Longest Palindromic Substring
#include #include using namespace std;string consT(string s){ int n = s.size(); if(n==0)return "^$"; string ret = "^"; for(int i=0;i<n;++i) { ret+="#"+s.substr(i,1); } ret+="#$"; return原创 2014-09-26 16:30:59 · 770 阅读 · 0 评论 -
算法快速回顾——排序算法
常用排序算法有以下几种:冒泡排序、插入排序、快速排序、归并排序、堆排序。本文将对五种常用算法分析并实现。原创 2014-06-07 10:16:51 · 647 阅读 · 0 评论 -
字符串匹配算法——KMP算法
处理字符串的过程中,难免会遇到字符匹配的问题。常用的字符匹配方法 1. 朴素模式匹配算法(Brute-Force算法) 求子串位置的定位函数Index( S, T, pos). 模式匹配:子串的定位操作通常称作串的模式匹配。 目标串:主串S。 模式串:子串T。 匹配成功:若存在T的每个字符依次和S中的一个连续字符序列相等,则称匹原创 2014-07-14 14:25:26 · 872 阅读 · 0 评论 -
算法快速回顾——八皇后问题
八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。原创 2014-06-19 21:50:35 · 1340 阅读 · 0 评论 -
题目1373:整数中1出现的次数(从1到n整数中1出现的次数)
题目1373:整数中1出现的次数(从1到n整数中1出现的次数)原创 2014-07-27 22:58:08 · 942 阅读 · 0 评论 -
数据结构快速回顾——二叉树 解幂子集问题
回溯法是设计递归的一种常用方法,它的求解过程实质上就是一个先序遍历一棵"状态树"的过程,只是这棵树不是遍历前预先建立的而是隐含在遍历过程中的。下面举一个例子:求含n个元素的集的幂集:集合A={ {1,2,3}, {1,2}, {1,3}, {1}, {2,3},{2},{3},{}}; //{}表示空集合从集合A的每一个元素的角度看,它只有两种状态:或者是属于幂集的元素集,或不原创 2014-06-15 20:31:42 · 1143 阅读 · 0 评论 -
数据结构快速回顾——二叉树
二叉树(Binary Tree)是个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也称作一个结点。基本概念:(1)结点的度。结点所拥有的子树的个数称为该结点的度。(2)叶结点。度为0的结点称为叶结点,或者称为终端结点。(3)分枝结点。度不原创 2014-06-15 14:33:38 · 732 阅读 · 0 评论 -
数据结构快速回顾——栈
堆栈,也可直接称栈,是一种特殊的串行形式的数据结构,它的特殊之处在于只能允许在链结串行或阵列的一端进行加入资料和输出资料的运算。另外堆栈也可以用一维阵列或连结串行的形式来完成。 1 #define STACK_INIT_SIZE 100 2 #define STACKINCREMENT 10 3 4 typedef struct 5 { int* top;原创 2014-06-15 09:55:43 · 755 阅读 · 0 评论 -
哈夫曼树(最优二叉树)
最优二叉树,也称哈夫曼(Haffman)树,是指对于一组带有确定权值的叶结点,构造的具有最小带权路径长度的二叉树。二叉树的路径长度则是指由根结点到所有叶结点的路径长度之和。如果二叉树中的叶结点都具有一定的权值,则可将这一概念加以推广。设二叉树具有n个带权值的叶结点,那么从根结点到各个叶结点的路径长度与相应结点权值的乘积之和叫做二叉树的带权路径长度,记为:根据哈夫曼树的定义,一棵二叉转载 2014-06-15 17:00:07 · 1650 阅读 · 0 评论 -
数据结构快速回顾——二叉查找树
#includetypedef struct node{ int value; struct node* pleft; struct node* pright; }BNode;void Visit(BNode *pRoot){ printf("%d\t",pRoot->value);}void InOrderTraverse(BNode *pRoot){ if(pR原创 2014-06-23 22:24:59 · 863 阅读 · 0 评论 -
数据结构快速回顾——图的遍历
称图的遍历指的是从图中的任一顶点出发,对图中的所有顶点访问一次且只访问一次。图的遍历操作和树的遍历操作功能相似。图的遍历是图的一种基本操作,图的许多其它操作都是建立在遍历操作的基础之上。原创 2014-06-23 15:56:13 · 981 阅读 · 0 评论 -
常用排序算法实现——快速排序
//快速排序算法(使用分治算法排序)/*原理,通过一趟扫描将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列*/实现原理参见 http://zh.wikipedia.org/wiki/%E5%BF%AB%E9%80%9F%E6%8E%92%E5原创 2014-03-14 21:17:44 · 620 阅读 · 0 评论 -
堆 && 堆排序
堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。分类排序算法数据结构数组最差时间复杂度最优时间复杂度[1]平均时间复杂度最差空间复杂度 total, auxil转载 2014-03-14 21:48:09 · 706 阅读 · 0 评论 -
求子数组之和的最大值——编程之美 2.14 扩展问题 正确实现
#include /*使用动态规划求最大子数字和:s[i]表示data[i~n-1]以元素i开始的最大子数组和,a[i]表示data[i~n-1]中的最大子数组和 ;s[i]=max(s[i+1]+data[i], data[i]);a[i]=max(a[i+1], s[i]); 由于数组s,a递推的时候,都只用到数组的前一个变量,所以可以用滚动数组节省空间。 */int ma原创 2014-09-02 22:55:08 · 1258 阅读 · 0 评论