算法相关
文章平均质量分 68
sjjbupt
这个作者很懒,什么都没留下…
展开
-
常见排序算法的稳定性和时间复杂度小结
选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。稳定时间复杂度又是nlogn级别的是归并排序。冒泡法: 这是最原始,也是众所周知的最慢的算法了。他的名字的由来因为它的工作看来象是冒泡: 复转载 2011-08-24 14:48:11 · 967 阅读 · 0 评论 -
最大子序列C++程序代码
#include #include using namespace std;template T MaxSequence(const vector &data){ T maxResult=0,maxCur=0; for(vect原创 2011-08-20 17:15:07 · 635 阅读 · 0 评论 -
常用正则表达式
正则表达式用于字符串处理、表单验证等场合,实用高效。现将一些常用的表达式收集于此,以备不时之需。匹配中文字符的正则表达式: [\u4e00-\u9fa5]评注:匹配中文还真是个头疼的事,有了这个表达式就好办了匹配双字节字符(包括汉字在内):[^\x00-\xff]转载 2011-09-16 18:00:20 · 584 阅读 · 0 评论 -
取最小的第n个数的C++实现代码
#include using namespace std;template T LittleN(T data[],int n,int left,int right){ T tmp = data[left]; int i = left;原创 2011-08-24 12:02:54 · 987 阅读 · 0 评论 -
归并排序的C++实现代码
#include using namespace std;//将一个数组的两个有序的部分可并为一个,并保证有序template void Merge(T data[],int begin,int mid,int end){ T *tm原创 2011-08-23 11:57:04 · 868 阅读 · 0 评论 -
希尔(Shell)排序的C++实现代码
#include using namespace std;void ShellSort(int data[],int n){ int i;//这里的初始增量是n/2,以后增量每次缩小一倍,其实增量的传入可以放入一个增量数组,依次存放每次增量原创 2011-08-23 10:27:02 · 758 阅读 · 0 评论 -
中缀表达式转后缀表达式(逆波兰式)的C++代码
#include #include #include using namespace std;bool Priority(char fir,char sec)//比较运算符优先级{ if((fir=='+'||fir=='-')&&(sec=原创 2011-08-21 17:25:03 · 2164 阅读 · 0 评论 -
求两个大整数(大于32位)的乘积的C++实现代码
//主要思路是两个数组放两个大数,一个数组放各个位相乘的中间结果,一个数组放最后结果#include using namespace std;void Multiply(){ char num1[50],num2[50]; char原创 2011-09-19 10:11:15 · 1786 阅读 · 0 评论 -
常见的几个树的性质
二叉排序树(二叉查找树,Binary Sort Tree):它或者是一棵空树;或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二叉排序树;原创 2011-09-15 11:29:37 · 1389 阅读 · 2 评论 -
直接插入排序的C++实现代码
#include using namespace std;void InsertSort(int data[],int n){ for(int i=1;i { int tmp = data[i]; for原创 2011-08-22 17:50:05 · 839 阅读 · 0 评论 -
简单表达式求值的C++代码(10以内不包含括号的加减乘除)
#include #include #include using namespace std;bool Priority(char fir,char sec)//比较两个运算符的优先级{ if((fir=='+'||fir=='-')&&(s原创 2011-08-21 15:24:34 · 2060 阅读 · 0 评论 -
用数组实现小顶堆(二叉堆)的C++代码
#include #include using namespace std;class minHeap{private: vector array; int theSize;public: minHeap()原创 2011-08-22 15:55:42 · 2070 阅读 · 0 评论 -
堆排序算法的C++实现代码
先建立了一个小顶堆,代码解释参考上一篇博文,这里将数据成员设成了public以便在堆排序中访问。排序算法很简单:每次取堆的堆顶数据也就是最小的数据,然后将这个数据删除,堆经过调整后又将最小数据放到的堆顶,循环便可。#include #include原创 2011-08-22 16:59:45 · 1102 阅读 · 0 评论 -
无向图的最小生成树算法的C程序实现代码(Prim算法)
#include #include #include //该结构体用来表示从某个顶点可以到达的其他顶点struct ENode{ int secPoint;//顶点号 int weight; ENode *next;//指原创 2011-08-30 15:42:45 · 4890 阅读 · 6 评论 -
有向图的关键路径的C程序实现代码
#include #include #include //该结构体用来表示从某个顶点可以到达的其他顶点struct ENode{ int secPoint;//顶点号 int weight; ENode *next;//指原创 2011-08-30 11:32:12 · 4118 阅读 · 1 评论 -
有向图某顶点到其他顶点最短路径的C程序实现代码(Dijkstra算法)
#include #include #include //该结构体用来表示从某个顶点可以到达的其他顶点struct ENode{ int secPoint;//顶点号 int weight; ENode *next;//指原创 2011-08-29 17:02:27 · 4887 阅读 · 2 评论 -
有向图的拓扑排序算法的C程序实现代码
#include #include #include //该结构体用来表示从某个顶点可以到达的其他顶点struct ENode{ int secPoint;//顶点号 ENode *next;//指向下一个顶点的指针};原创 2011-08-28 11:04:41 · 2737 阅读 · 0 评论 -
从B树、B+树、B*树谈到R 树
从B 树、B+ 树、B* 树谈到R 树 作者:July、weedge、Frankie。编程艺术室出品。说明:本文从B树开始谈起,然后论述B+树、B*树,最后谈到R 树。其中B树、B+树及B*树部分由weedge完成,R 树部分由Frankie完成,全文最终由July统转载 2011-10-07 17:09:43 · 790 阅读 · 2 评论 -
英文句子按单词反序输出的C++实现代码
//思想是先逐个反转单词,然后反转上一步得到的整个字符串#include #include using namespace std;//反转string中begin和end之间的部分void TraverseWord(string &str原创 2011-09-15 10:54:24 · 4544 阅读 · 0 评论 -
求二叉树中节点的最大距离的C程序实现代码
#include #include #include typedef struct Node{ char value; struct Node *leftChild; struct Node *rightChild; i原创 2011-09-14 12:04:17 · 1016 阅读 · 0 评论 -
删除两个升序正数组中重复元素的C程序实现代码
#include #include int DeleteSame(int *array1,int n1,int *array2,int n2){ int i,j; int sameLength=0; i=j=0; while原创 2011-09-04 17:21:51 · 874 阅读 · 0 评论 -
二叉树构造与遍历的C程序实现代码
#include #include typedef struct Node{ char value; struct Node *leftChild; struct Node *rightChild;}TreeNode;原创 2011-08-26 22:24:11 · 1163 阅读 · 0 评论 -
判断无向图是否有环的C程序实现代码
//主要思路是将度小于2的顶点删除,并将与之相连的顶点度减一,如果存在无法删除的定点,则有环#include #include #include //该结构体用来表示从某个顶点可以到达的其他顶点struct ENode{ int se原创 2011-08-30 17:16:36 · 2107 阅读 · 0 评论 -
关于动态规划的一点总结
动态规划基本思想是,将原问题分解为相似的子问题,在求解的过程中通过子问题的解求出原问题的解。因此一般有递推公式将一个问题分解成几个子问题。任何递推公式都可以直接翻译成递归算法,但是基本实现时编译器往往不能正确对待递归算法,结果产生低效程序,当怀疑是这种情况时,必须给编译器一些帮助原创 2011-09-01 09:46:24 · 102 阅读 · 2 评论 -
将一个自然数分解成几个连续自然数之和
假设,拆分成的数列为:m+1, m+2, … m+k则 n = (m + m + k - 1) * k / 2 或2*n = (2*m + k + 1) * k以下程序就是从2开始到n逐个看是不是可以被2*n整除,如果是,则看两个除数能不能分解出m和k,如果可以,则输原创 2011-09-01 16:26:13 · 2137 阅读 · 0 评论 -
图的C程序实现代码(邻接表表示)
#include #include #include //该结构体用来表示从某个顶点可以到达的其他顶点struct ENode{ int secPoint;//顶点号 ENode *next;//指向下一个顶点的指针};原创 2011-08-25 17:15:21 · 147 阅读 · 2 评论 -
快速排序的C++实现代码
#include using namespace std;template void Swap(T &x,T &y){ T tmp; tmp = x; x=y; y=tmp;}/*template i原创 2011-08-23 17:24:57 · 588 阅读 · 0 评论 -
二叉排序树的C++实现代码
//指针传参的函数若是函数中改变指针本身,则照样无法带回到调用处,//若是改变指针指向的值,才能带回#include #include using namespace std;typedef struct Node{ int value;原创 2011-09-01 21:50:47 · 979 阅读 · 0 评论 -
最长公共子串的C++实现代码
算法思想求字符串str1,str2的最长公共子串的长度。定义二元函数函数f(m,n):分别以str1[m],str2[n]结尾的连续公共子串的长度而对于f(m+1,n+1) 有以下两种情况1.str1[m+1] != str2[n+1],则有f(m+1,n+1原创 2011-09-03 20:07:55 · 1521 阅读 · 0 评论 -
最长有序子序列的C++实现代码
本文中只讲到了升序,降序只要将大于号换成小于号即可本题用普通动态规划求解,递推式为:f[i]=max{f[j]+1,a[i]#include #include using namespace std;void MaxOrderedSeqen原创 2011-09-02 21:31:51 · 2053 阅读 · 0 评论 -
矩阵相乘求最少相乘次数的C++实现代码
//本题用动态规划解出,动态规划的核心在于填表//本程序表的列代表从第几个矩阵开始//行代表乘到第几个矩阵//故解在最左下角#include #include using namespace std;int MinMulti(vector原创 2011-08-31 17:07:03 · 2152 阅读 · 2 评论 -
判断有向图是否有环的C程序实现代码
//主要思想是进行拓扑排序,如果所有定点都能排序,则无环,否则,有环#include #include #include //该结构体用来表示从某个顶点可以到达的其他顶点struct ENode{ int secPoint;//顶点号原创 2011-08-31 09:21:11 · 2364 阅读 · 2 评论 -
最长公共子序列的C++实现代码
引进一个二维数组c[][],用c[i][j]记录X[i]与Y[j] 的LCS 的长度,b[i][j]记录c[i][j]是通过哪一个子问题的值求得的,以决定搜索的方向。我们是自底向上进行递推计算,那么在计算c[i,j]之前,c[i-1][j-1],c[i-1][j]与c[i][原创 2011-09-03 19:09:54 · 3992 阅读 · 0 评论 -
最长有序子串的C++实现代码
子串和子序列的区别是子串是连续的,子序列可以不连续本文中只讲到了升序,降序只要将大于号换成小于号即可f(n) 的递推式为:1.f(n)初始状态均为1.2.若f(n)>f(n-1)则f(n)更新为f(n-1)+1#include #i原创 2011-09-03 11:39:24 · 1575 阅读 · 0 评论 -
字典树(Trie树)的C程序实现代码
#include #include #include #define MAX 256//ascii码有256个字符,故每棵树的子节点最多有256个#define MAXLEN 256//单词最长为256typedef struct TrieNode原创 2011-09-07 22:20:43 · 9946 阅读 · 0 评论 -
字符串全排列的C++实现代码
//本题主要思想是递归,Rank(T data[],int start,int end)的意义是data数组在start以前的部分原样输出,//start到结束的部分求全排列,data中允许有重复字符#include #include using na原创 2011-09-04 16:46:31 · 2407 阅读 · 1 评论 -
求二叉树中两个节点的最近公共节点的C程序实现代码
#include #include #include typedef struct Node{ char value; struct Node *leftChild; struct Node *rightChild;原创 2011-09-13 22:48:17 · 976 阅读 · 0 评论 -
一些常见的重要算法
下面是一些比较重要的算法,原文罗列了32个,但我觉得有很多是数论里的,和计算机的不相干,所以没有选取。下面的这些,有的我们经常在用,有的基本不用。有的很常见,有的很偏。不过了解一下也是好事。也欢迎你留下你觉得有意义的算法。(注:本篇文章并非翻译,其中的算法描述大部份摘自Wikip转载 2011-09-13 10:00:13 · 694 阅读 · 0 评论 -
找出出现最多的子串
分析问题:假设存在一个长度为 N 的子串 S 出现的次数最多。那么它具有哪些特点呢?S 的任一子串的出现次数不少于 S 的出现次数S 中不会出现重复的子串字符S 中不会出现重复的字符组成 S 的每一个字符、每一个子串的出现次数都和 S 一样解决问题:扫描输入的每个字符,记录每个字符 C 的出现次数,以及对该字符的后续字符 NC 的关联次数。扫描统计数据中每个字符的出现次转载 2011-11-06 20:47:20 · 736 阅读 · 0 评论