算法
文章平均质量分 60
回龙观码农
这个作者很懒,什么都没留下…
展开
-
c++ 直接插入排序
直接插入排序是一种稳定算法。复杂地为o(n^2).当 记录基本有序,或代排序记录较少时,他是最佳的排序算法。#includeusing namespace std;void s_isort(int a[],int n){ int temp;for(int i=1;i{temp=a[i];for(int j=i-1;j>=0&&temp a[j+1]=原创 2014-05-17 23:51:19 · 477 阅读 · 0 评论 -
快速排序的改进
快速排序的改进快速排序最坏情况下,要比较O(n^2)次,但平均性能为nlogn,基本达到了比较类排序所需时间的的下界。核心代码为:void qSort(int *data, int begin, int end){ int pivot, i, j; if(begin>=end) return; i = begin;转载 2014-05-28 22:24:39 · 3455 阅读 · 2 评论 -
字典树
字典树,又称单词查找树,Trie树,是一种树形结构,典型应用是用于统计,排序和保存大量的字符串,所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来节约存储空间,最大限度的减少无谓的字符串比较,查询效率比哈希表高。它有三个基本性质,根节点不包含字符,除根节点外每一个节点都只包含一个字符,从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串,每个节点的所有转载 2014-08-22 22:02:49 · 502 阅读 · 0 评论 -
哈希树
我们选择质数分辨算法来建立一棵哈希树。选择从2开始的连续质数来建立一个十层的哈希树。第一层结点为根结点,根结点下有2个结点;第二层的每个结点下有3个结点;依此类推,即每层结点的子节点数目为连续的质数。到第十层,每个结点下有29个结点。如下图所示:同一结点中的子结点,从左到右代表不同的余数结果。例如:第二层结点下有三个子节点。那么从左到右分别代表:除3余0,除3余1,除3转载 2014-08-22 21:05:41 · 485 阅读 · 0 评论 -
邻接矩阵的两种遍历算法
#include using namespace std; const int maxsize=10; template class mgraph { public: mgraph(type a[],int n,int e); ~mgraph(){} void dfstravese(int v);原创 2014-05-18 19:21:13 · 1148 阅读 · 0 评论 -
非递归的快速排序算法
void qsort2(int a[],int low ,int high){ stack st; if (low int mid =partition(a,low,high); if (low st.push(low); st.push(mid-1); }原创 2014-08-23 20:49:24 · 581 阅读 · 0 评论 -
lcs
首先将要看到如何运用动态编程查找两个 DNA 序列的最长公共子序列(longest common subsequence,LCS)。发现了新的基因序列的生物学家通常想知道该基因序列与其他哪个序列最相似。查找 LCS 是计算两个序列相似程度的一种方法:LCS 越长,两个序列越相似。子序列中的字符与子字符串中的字符不同,它们不需要是连续的。例如,ACE 是 ABCDE 的子序列,但不是它的子字转载 2014-08-24 12:10:44 · 615 阅读 · 0 评论 -
PageRank(转载)
PageRank对网页排名的算法,曾是Google发家致富的法宝。以前虽然有实验过,但理解还是不透彻,这几天又看了一下,这里总结一下PageRank算法的基本原理。一、什么是pagerank PageRank的Page可是认为是网页,表示网页排名,也可以认为是Larry Page(google 产品经理),因为他是这个算法的发明者之一,还是google CEO(^_^)。Page转载 2014-08-12 00:37:35 · 923 阅读 · 0 评论 -
海量数据处理的问题(1)
1. 题目:海量日志数据,提取出某日访问百度次数最多的那个IP。 方案:IP的数目还是有限的,最多2^32个,所以可以考虑使用hash将ip直接存入内存,然后进行统计。转载 2014-08-23 14:45:27 · 512 阅读 · 0 评论 -
kmp算法
#includeusing namespace std;//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!void func(char *p,int *next){ int j=0;int k=-1; next[0]=-1; while(j if(k==-1||p[j]==p[原创 2014-05-18 00:42:05 · 424 阅读 · 0 评论 -
红黑树
http://blog.csdn.net/eric491179912/article/details/6179908转载 2014-08-24 20:10:06 · 414 阅读 · 0 评论 -
假定有20个 有序 数组,每个数组有500个数字,数字类型32位uint数值,现在需要取出这10000个数字中最大的500个,怎么做?
//3、假定有20个 有序 数组,每个数组有500个数字,数字类型32位uint数值,现在需要取出这10000个数字中最大的500个,怎么做? #include using namespace std; struct node { int data; int next; }; node obj[20]; void sift(int k,int m,int原创 2014-05-18 21:55:56 · 1439 阅读 · 0 评论 -
八皇后问题c++ 代码
#include//�����㷨using namespace std;bool place(int k,int a[])//�ж��Ƿ��ɷ�{for(int i=0;i if(abs(a[i]-a[k])==abs(i-k)||a[i]==a[k]) return false;return true;}int main(){ int n,原创 2014-05-18 00:40:23 · 5315 阅读 · 0 评论 -
c++快速排序算法
快速排序是一种不稳定的算法,复杂度o(nlogn).快速排序使用于记录个数很大且原始记录随机排列的情况。#include using namespace std;int s_psort(int a[],int first,int end){ int i=first,j=end,temp; while(i { while(i原创 2014-05-17 23:57:10 · 481 阅读 · 0 评论 -
BF算法
#includeusing namespace std;int bf(char s[],char t[]){int i=0;int j=0; while(s[i]!='\0'&&t[j]!='\0') if(s[i]==t[j]) {i++;j++;} else {i=i-j+1;j=0;} if(t[j]=='\0') return i-j+1原创 2014-05-18 00:43:00 · 587 阅读 · 0 评论 -
C++ 简单选择排序
简单选择排序是一种不稳定的排序算法,复杂度为n^2#includeusing namespace std;void s_selsort(int a[],int n){ int temp,temp2;for(int i=0;i{ temp=i; for(int j=i+1;j if(a[temp]>a[j]) temp原创 2014-05-17 23:45:51 · 496 阅读 · 0 评论 -
染色问题的算法
#include #define NUM 5 using namespace std; bool ok(int i,int b[],int a[NUM][NUM]) { for(int j=0;j if(a[i][j]==1&&b[i]==b[j]) return false; return true; } void backtrack原创 2014-05-18 19:22:07 · 2840 阅读 · 0 评论 -
地铁站问题
#include#includeusing namespace std;int find(string train[],string m){ for(int i=0;i if(train[i]==m) return i;}void floy(int a[][37]){for(int k=0;k for(int原创 2014-05-18 00:37:50 · 872 阅读 · 0 评论 -
四则运算之后缀求值
#include#includeusing namespace std;int prefer(int t1,int t2){int t=0; switch(t2) { case '+': case '-': if(t1=='('||t1=='#')t=-1;else t=1; break原创 2014-05-18 00:38:54 · 434 阅读 · 0 评论 -
八进制加法链表
#includeusing namespace std;struct node{ int data; node*next;};class Add_8{ public: Add_8(){flag=0;} void func(); void add(node *pf,node *原创 2014-05-18 00:45:44 · 1194 阅读 · 0 评论 -
约瑟夫问题 c++代码
#includeusing namespace std;struct node{ int data; node*next;};class ysf{public: ysf(int *a,int n);void func(int n,int m);private:n原创 2014-05-17 23:37:19 · 1234 阅读 · 0 评论 -
c++ 桶排序算法
桶排序采用队列作为存储结构,因此是一种稳定性算法。桶排序的时间复杂度为o(n+m),空间复杂度为o(m),用来存储m个静态队列表示的桶。#include using namespace std; struct node { int key; int next; }; struct queuenode { int front; int rear; };原创 2014-05-17 23:54:58 · 1073 阅读 · 0 评论 -
百度笔试题目
假定有20个有序数组,每个数组有500个数字,数字类型32位uint数值,现在需要取出这10000个数字中最大的500个,怎么做? 思路:20个有序数组,不妨设数序为降序。首先把20个数组中最大的(也就是a[i][0])进行大堆排序,输出堆顶元素(最大),在输出的那个元素之前所在的数组中,取下一个元素,放到堆顶,然后进行堆排序,在输出堆顶元素,依次循环输出500个即可。(输出最小的500,原创 2014-05-18 00:23:03 · 518 阅读 · 0 评论 -
c++ 希尔排序
希尔排序是一种不稳定的算法。复杂度在n^2与nlogn 之间#includeusing namespace std;void s_ssort(int a[],int n){ int temp;for(int d=n/2;d>0;d=d/2){for(int i=d;i{temp=a[i];for(int j=i-d;j>=0&&tempa[j+原创 2014-05-17 23:50:29 · 439 阅读 · 0 评论