- 博客(20)
- 收藏
- 关注
原创 Extended Euclid 拓展欧几里得算法
扩展欧几里德算法是用来在已知a, b求解一组x,y [x,y都是整数],使它们满足贝祖等式: ax+by = gcd(a, b) =d(解一定存在,根据数论中的相关定理)。扩展欧几里德常用在求解模线性方程及方程组中。
2018-06-21 15:05:39
1146
原创 二叉查找树
二叉查找树树在数据结构里面是一种非常自然的数据结构,很多自然和人类社会的现象抽象出来都很自然地形成一棵树.例如,如果将一个组织机构的管理层次画在纸上,可能看上去就像一棵倒过来的数。 事实上,人类社会的很多管理层次架构都可以用树的形状来表示。而将这种结构在计算机中予以表示就是数据结构里面的数。那么数据结构是如何对树定义的呢?树结构的定义要得出树的定义,我们需要对树进行抽象,可以发现树由节点和连线构成
2017-10-22 14:27:41
348
原创 查找操作-----常数查找
查找操作—–常数查找对于很多人来说,折半查找的对数级O(logn)时间复杂性是可以接受的。问题是,折半查找虽然有着对数级的时间复杂性,但它只能用在有序序列上。而对数列的排序需要(nlogn)的时间。常见的几种排序算法(java和C++版)(参考《算法》)一个 这样一来折半查找的综合成本实际上是高于O(logn)的。更严峻的是,查找问题通常具有两个特点:一是查找的范围很大;二是查找是一个频繁的操作
2017-10-17 18:36:34
641
原创 查找操作------折半查找(二分查找)
对于无序的序列,可以使用排序来对序列中的元素排列从而使序列呈升序或降序列.而对这样一个有序的序列来讲,进行顺序查找就显得不合时宜了.那么在序列元素有序排列的情况下,应该如何实现排序呢?以在图书馆查找需要的图书为例,当获得需要的图书编号后,就可以在书架上查找这本书了,此时,是将书架上的书一本本地翻看查找,还是放到一本书的编号后,跳过一部分书在查找呢?显然,大部分人都会选择后者.这种查找方法就
2017-10-17 13:11:26
1504
原创 查找操作------顺序查找
之前讨论了表结构链表与表——随心所欲地进出任何队列.制表的目的就是为了以后的查看或者查找方便,如果制表后又不在表上进行查找,那么制表就变得毫无意义了."查找"就是在一组数据项里面查找一个特定的元素.所以查找有时也称为搜索.但实际上搜索和查找也不是完全一样.查找要做的是在一个序列或集合里面查看是否存在某个特定的元素.这和一般的搜索并不完全相同,因为搜索并不一定要事先知道要搜索什么.事实上,查找是
2017-10-17 12:48:32
602
原创 链接队列(Link Queue)——队列的链接实现
之前讨论的连续实现的队列结构(队列(Queue)——先进先出(FIFO)的数据结构(Data Structures))与连续栈结构存在着同样的缺点,即都需要大片连续的存储空间。而这个问题在队列结构里更加严重。解决的办法则与连续栈结构问题的办法一样:使用链接队列。链接队列实现除了不需要连续空间外,其所支持的操作类型和数量与连续队列完全一样。连接队列的类定义与连续队列相比,数据成员为头尾两个指向N
2017-09-25 21:29:27
2662
原创 队列(Queue)——先进先出(FIFO)的数据结构(Data Structures)
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。----------摘自百度百科在日常生活中,排队是司空见惯的。我们去食堂打饭需要排队,买票需要排队,上下飞机也需要排队.其实,生活中到处都是队列形式,从抽象层面上看,凡是两头
2017-09-24 20:33:43
19778
原创 链接栈(Link Stack)———— 栈的链接实现
在栈的实现上,采用的是连续分配的数组。这样的栈结构有一个缺陷,即需要大片连续的存储空间。栈(Stack)——后进先出(LIFO)的数据结构(Data Structures)利用非连续空间的方式是链接。而以链接方式实现的栈就叫做链接栈或者栈的链接实现。在一个链接栈的结构里,记录之间不一定需要在物理储存空间上相连。每条记录除了存放数据项外,还存放一个指针,用来指向链接栈里的下一条记录。而其所指
2017-09-24 19:01:37
3451
原创 栈(Stack)——后进先出(LIFO)的数据结构(Data Structures)
栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。------------摘自百度百科。顾名思义,栈也就是一个
2017-09-24 16:21:17
6595
原创 Mdular Linear Equatin 模线性方程(同余方程)
//如果GCD(a,b)不能整除c,则ax + by = c 没有整数解//ax≡b(mod n) (n>0)//上式等价于二元一次方程ax - ny = bvoid modular_linear_equation(int a, int b, int n){ int d, x, y, x0, gcd; //可以减少扩展欧几里得溢出的可能 gcd = GCD(a, n); if (
2017-07-17 19:12:45
419
原创 Sieve Prime 素数筛法
一开始,我们假设所有的数都是素数,那么当我们找到一个素数时,我们把其平方后的数以及不断加上这个数本身的所有数认为是合数。由此可以得出下面的算法const int M = 1000; //,:sizebool mark[M];//true:prime numbervoid sieve_prime(){ memset(mark, true, sizeof(mark)); mark[0
2017-07-16 16:40:17
1344
1
原创 Prime 素数判断
在日常做题或其他方面又需要判断素数时,一个简单好用的判断模板就很舒服了,下面不加证明直接给出模板bool is_prime(int u){ if (u == 0 || u == 1) return false; if (u == 2) return true; if (u % 2 == 0) return false; for (int i = 3;
2017-07-16 16:34:27
1926
原创 Greatest Common Divisor 欧几里得算法(最大公约数)
欧几里得算法的核心就是辗转相除法,其优点在于只需要选取其余数进行相应的计算就可以直接得到最大公约数。其复杂度为o(log(n))。int GCD(int x, int y){ int t; while (y > 0) { t = x%y; x = y; y = t; } return x;}
2017-07-16 16:21:04
581
原创 hdu 1010 Tempter of the Bone
Tempter of the BoneTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 123589 Accepted Submission(s): 33390Problem DescriptionThe dog
2017-07-05 18:37:49
198
原创 hdu 1002 A + B Problem II
A + B Problem IITime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 363644 Accepted Submission(s): 70739Problem DescriptionI have a v
2017-07-05 18:30:25
301
原创 hdu 1001
Sum ProblemTime Limit: 1000/500 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 479528 Accepted Submission(s): 121261Problem DescriptionHey, welcome to
2017-07-05 18:25:51
246
原创 HDU 1000
#includeint main(){ int a, b; while (scanf("%d %d", &a, &b) != EOF) { printf("%d\n", a + b); } return 0;}
2017-07-05 18:23:02
226
原创 链表与表——随心所欲地进出任何队列
表的定义如果说有什么数据结构是人人都能想到的,则非表结构莫属。那么作为一个数据结构的表结构具有什么特征呢?显然,一个表的本质也是一种数据访问方式:一种可以对标的任意位置进行访问的方式,根据这个思路,可以对表结构给出如下的定义/表结构是一个某类型数据项组成的有穷序列,它支持下述操作:(1) 创建一个空表; (2) 判断一个表是否为空;(3) 计算一
2017-07-04 16:43:27
332
原创 常见的几种排序算法(java和C++版)(参考《算法》)
博主这里要讲的几种排序算法包括(从难到易):1.冒泡排序(最low的算法)2.插入排序3.希尔排序4.并归排序(自顶向下)5.并归排序(原地并归)6.快速排序7.快速排序的三项切分8.堆排序9.混合排序冒泡排序:(1)简介:这是最原始,最简单的排序,几乎不需要额外的空间(2)基本原理:通过循环将最大的元素移到最末端或者最前端,俗称冒泡!(
2017-07-02 12:10:49
372
原创 线段树的极值查找
树是一种重要的非线性数据结构,直观地看,它是数据元素(在树中称为结点)按分支关系组织起来的结构,很象自然界中的树那样。其中,二叉树是最简单的树结构。顾名思义,二叉树是每个节点最多有两个子树的树结构,或者说每个节点最多有三个相邻节点。而线段树就属于二叉树中的一种,而且属于平衡二叉树即一棵空树或它的左右两个子树的高度差的绝对值不超过1。虽然线段树的本质是一棵二叉树,但是不同于其它二
2017-05-11 16:46:57
543
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人