- 博客(14)
- 资源 (1)
- 收藏
- 关注
原创 字符串匹配算法
kmp算法的时间复杂度是O(m+n)//get next valuevoid get_next_val(char *s,int *next) { int len=strlen(s); int j=0,k=-1; next[0]=-1; while(j<len-1) { if(k==-1 || s[j]==s[k]) {
2013-05-14 22:53:32
655
原创 大数的加法和乘
用手工计算的方法即可void mult(char *str1,char *str2,char *str3) { int s1=strlen(str1),s2=strlen(str2); memset(str3,'0',(s1+s2+1)*sizeof(str3[0])); reverse_str(str1); reverse_str(str2);
2013-05-14 22:45:32
653
原创 常见数组面试题
1、求子数组的最大和这是一个典型DP问题,状态转移方程为M(i)=max{M(i-1)+a(i),a(i)}int max_sum(int *A,int n) { int thissum=0,maxsum=0; for(int i=0;i<n;i++) { thissum+=A[i]; if(thissum>maxsum) maxsum=thissum; if(thissu
2013-05-14 22:32:00
760
原创 O(lgn)计算斐波那契数
1、斐波那契数按如下递推式定义f(0)=f(1)=1f(n)=f(n-1)+f(n-2), n>=22.常规的求斐波那契数时间复杂度为O(n),直接用递推式求f[0]=f[1]=0;for(i=2;i<n;i++) f[i]=f[i-1]+f[i-2];或者先求出通项公式,特征值为x1,x2,则f(n)=A*x1^n+B*x2^n3.现在主要讨论O(lgn)
2013-05-13 22:18:29
1152
1
原创 洗牌算法
1、随即函数rand()的使用方法rand()会返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。那么每次调用的时候产生的随机数是一样的。srand()用来设置rand()产生随机数时的随机数种子。用time(0)做为其参数#include#in
2013-05-13 16:29:06
577
原创 给定RAND5,写出RAND7
描述:给定能随机生成整数1到5的函数rand5(),写出能随机生成整数1到7的函数rand7()这个题网上有很多各种各样的答案,但是感觉都不太科学。做为一个学统计的ds,用概率论的方法来解决这个问题。先假定给定的函数产生的是均匀分布,即 f(x=i)=1/5 , i=1,2,3,4,5。假设随机变量x=rand5()*(rand5()-1)则x的分布为x 0
2013-05-12 18:27:59
812
原创 随机分配座位以及8皇后问题
1、给定一个数组,输出数组元素的所有排列void generate_permutation(int *arr,int beg,int ed,int len) { if(beg==ed-1) { for(int i=0;i<len;i++) cout<<arr[i]<<" "; cout<<endl; } for(i
2013-05-11 15:01:12
859
转载 The Zen of Python
Beautiful is better than ugly.Explicit is better than implicit.Simple is better than complex.Complex is better than complicated.Flat is better than nested.Sparse is better than dense.Readabilit
2013-05-10 17:03:23
531
原创 常见链表算法
链表节点的数据结构为struct node { int data; struct node* next;}1.创建链表1)前插法void create_list() { int len; head=(node*)malloc(sizeof(node)); head->next=NULL; cout>len; while(le
2013-05-10 17:01:49
756
原创 常见的树结构
1.查询二叉树(binary search tree)性质:所有左子树节点的值 struct node { int key; node* lchild,*rchild;}; node* new_node(void) { node* t=(node*)malloc(sizeof(node)); t->lchild=t->rchild=NUL
2013-05-10 17:01:11
718
原创 并查集
按秩合并的带权并查集,常在寻找公共朋友,构造最小生成树(Kruskal)算法中。#define N 101struct UnionSet { //p,父节点;rank,秩 int p[N],rank[N],sz; void init_set(int n) { sz=n; //设置每个元素父节点为其本身
2013-05-10 17:00:22
540
原创 快排以及查找第K元素
1.快排。快排,合并排序什么的必须熟练掌握啊,这么经典的算法。。。int qsort_aux(int A[],int p,int q) { //选择最后一个元素x做为参照,将小于x和大于x的元素放在x两侧 int i=p-1,j,x=A[q]; for(j=p;j<q;j++) { if(A[p]<=x) swap(A[++i],A[j]
2013-05-10 16:59:35
872
原创 常见算法题
一、维护O(1)时间查找最大元素的栈问题描述:一个栈stack,具有push和pop操作,其时间复杂度皆为O(1)。设计算法max操作,求栈中的最大值,该操作的时间复杂度也要求为O(1)。可以修改栈的存储方式,push,pop的操作,但是要保证O(1)的时间复杂度,空间时间复杂度无要求。 可以创建一个类,类里有两个栈,一个栈S维持正常的push、po
2013-05-10 16:58:33
2204
原创 简单的字符串算法
1、标准库函数int strlen(char* s) { if(s==NULL) return 0; int len=0; while(str[++len]!='\0'); return len;} char strcpy(char* str1,const char* str2) { if(str1==str2
2013-05-10 16:57:04
643
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人