算法与数据结构
linxcool
这个作者很懒,什么都没留下…
展开
-
算法与数据结构-筛选法求素数
简单表示:isPrime[i]等于0表示i不是素数,否则等于1则表示i是素数。#define MAX 5000005long isPrime[MAX];void initPrime(){ long i,j; isPrime[0]=isPrime[1]=0; for(i=2;i<MAX;i++)isPrime[i]=1; for(i=2;i<MAX;i++){ if原创 2012-02-15 09:33:08 · 1461 阅读 · 0 评论 -
算法与数据结构-离散数学之容斥定理
由某城市一次对居民投资情况调查得知,在被调查的50位居民中,有28人参加银行储蓄,有24人购买债券,有12人既参加储蓄又购买债券,有10人既参加储蓄又购买股票,还有4人同时参加这三种投资.已知12个购买股票的人或者参加储蓄或者购买债券.那么不参加任何一种投资的居民人数有多少呢? 这是一个有限集合的计数问题.利用容斥定理和文氏图可以很方便地解决有限集合的计数问题. 在计数时,为了使若干集转载 2011-12-22 17:24:07 · 2296 阅读 · 0 评论 -
算法与数据结构-数学基本公式大全(更新中……)
连续和相关 求解Sum(1^4+...+12^4)有公式: n(n+1)(2n+1)(3n²+3n-1)/30原创 2012-02-14 11:34:46 · 1390 阅读 · 0 评论 -
算法与数据结构-背包问题
01背包问题题目有N件物品和一个容量为M的背包,每种物品只可以取一件。第i件物品的费用是c[i],价值是v[i]。求解将哪些物品装入背包可使价值总和最大。分析这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。用子问题定义状态:即f[i][j]表示前i件物品恰放入一个容量为j的背包可以获得的最大价值。则其状态转移方程便是:f[i][j]=max{f[i-1][j]原创 2012-03-21 17:55:18 · 5323 阅读 · 0 评论 -
算法与数据结构-博弈论
游戏A 简单博弈有两个游戏者:A和B。有21颗石子。两人轮流取走石子,每次可取1、2或3颗。A先取。取走最后一颗石子的人获胜,即没有石子可取的人算输。如果剩下1、2或3颗石子,那么接下来取的人就能获胜;如果剩下4颗,那么无论接下来的人怎么取,都会出现前面这种情况,所以接下来取的人一定会输;如果剩下5、6或7颗石子,那么接下来取的人只要使得剩下4颗石子,他就能获胜。0,4,8,12,……都是原创 2012-02-14 13:28:58 · 1330 阅读 · 0 评论 -
算法与数据结构-精确覆盖
在一个全集X中若干子集的集合为S,精确覆盖(Exact cover)是指,S的子集S*,满足X中的每一个元素在S*中恰好出现一次。[1]在计算机科学中,精确覆盖问题指找出这样的一种覆盖,或证明其不存在。这是一个NP-完全问题[1],也是卡普的二十一个NP-完全问题之一[2]。定义满足以下条件的集合为一个精确覆盖:S*中任意两个集合没有交集,即X中的元素在S*中出现最多一次S*中转载 2011-12-23 09:18:30 · 1192 阅读 · 0 评论 -
算法与数据结构-单源最短路径之Dijkstra
描述 给定一个带权有向图 G=(V,E) ,其中每条边的权是一个非负实数。另外,还给定 V 中的一个顶点,称为源。现在我们要计算从源到所有其他各顶点的最短路径长度。这里的长度是指路上各边权之和。这个问题通常称为单源最短路径问题。解法 将图G中所有的顶点V分成两个顶点集合S和T。以v为源点已经确定了最短路径的终点并入S集合中,S初始时只含顶点v,T则是尚未确定到原创 2012-03-01 14:50:38 · 1172 阅读 · 0 评论 -
算法与数据结构-智力推广之过桥问题
一、问题 在漆黑的夜里,四位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话,大家是无论如何也不敢过桥去的。不幸的是,四个人一共只带了一只手电筒,而桥窄得只够让两个人同时过。如果各自单独过桥的话,四人所需要的时间分别是1、2、5、8分钟;而如果两人同时过桥,所需要的时间就是走得比较慢的那个人单独行动时所需的时间。问题是,如何设计一个方案,让这四人尽快过桥。 两种局面中,手电原创 2012-02-13 10:47:21 · 2972 阅读 · 0 评论 -
算法与数据结构-数论之模幂运算
模幂运算基本原理:(a×b)mod c=((a mod c)×b)mod c通常都是先将幂模运算转化为乘模运算。a^b%n的代码如下:int expMod(int a,int b,int n){ int r=1; while(b){ if(b&1)r=(r*a)%n; a=(a*a)%n; b>>=原创 2012-02-14 09:46:53 · 1425 阅读 · 0 评论 -
算法与数据结构-数论之蒙哥马利模乘
对于乘模运算 A*B%N,如果A、B都是1024位的大数,先计算A*B,再% N,就会产生2048位的中间结果,如果不采用动态内存分配技术就必须将大数定义中的数组空间增加一倍,这样会造成大量的浪费,因为在绝大多数情况下不会用到那额外的一倍空间,而采用动态内存分配技术会使大数存储失去连续性而使运算过程中的循环操作变得非常繁琐。所以模乘运算的首要原则就是要避免直接计算A*B。设A=Sum[i=转载 2012-02-14 10:08:14 · 5904 阅读 · 0 评论 -
算法与数据结构-KMP算法
定义主串为src,子串(模式)为sub,简单讲KMP算法就是在比较src[i]与sub[j]时,若匹配失败,不回溯i,而是根据j=next(j)来调整j的值继续与i比较。next(j)函数值根据sub前k个字符与到j-1为止的后k个字符相等的最大k值来确定。if(j==0) next[j]=-1;else if(k≠∅) next[j]= MAX{ k | 0≤k<j 且 sub[ 0原创 2012-02-16 14:08:27 · 680 阅读 · 0 评论 -
算法与数据结构-数论之辗转相除法
简介 辗转相除法, 又名欧几里德算法(Euclidean algorithm)乃求两个正整数之最大公因子的算法。它是已知最古老的算法, 其可追溯至3000年前。两个整数的最大公约数是能够同时整除它们的最大的正整数。辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的差的最大公约数。由辗转相除法也可以推出,两数的最大公约数可以用两数的整数倍相加来表示,这个重原创 2012-02-14 09:30:47 · 1038 阅读 · 1 评论 -
算法与数据结构--拓扑排序
对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若 ∈E(G),则u在线性序列中出现在v之前。一个有向无环图的拓扑序列不是唯一的,进行拓扑排序的算法并不复杂:1)在有向图中选一个没有前驱(入度为0)的顶点且输出之。2)从图中删除该顶点及它发出的弧(这样就得到了别的入度为0的顶点)。重原创 2012-03-12 20:50:17 · 819 阅读 · 0 评论