自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

alop or 导演 的专栏

数学还是编程?

  • 博客(30)
  • 资源 (2)
  • 收藏
  • 关注

原创 贪吃蛇c++实现

最近没事翻了一下以前写的程序,真是不堪入目,以前真是什么都不懂,不过有一个程序倒是挺有意思的,大二的时候写的一个贪吃蛇游戏,虽然程序非常难看,还有很多漏洞,但也是这个程序让我真正开始喜欢上了编程,不多说啦,先看看代码!#include#include#include#include#includeusing namespace std;int n ; //墙的大小,写在这里为了

2014-11-08 16:02:28 2870 6

原创 数据结构之栈的实现

栈是一种典型的线性表,它非常的简单,实现也很简单,但他的应用却非常的广泛,如函数的递归,一些撤销功能的实现等等!  栈是只能访问头节点的线性表!无论是插入,删除还是查找都只需要访问头节点。  他的实现一般有两种,一种是用向量表的实现,这种方法的有点在于节省空间,但缺点也比较明显,就是不够自由,容易出现栈溢出,当然我们可以通过另外申请空间来解决这个问题,但这样显得比较麻烦!还有一种方法是利用

2014-04-02 21:22:09 1071

原创 数据结构之不相交集类

不相交集类是解决等价关系问题的一种非常有效的手段!等价关系是一种关系R,他满足自反性,对称性与传递性。有人说散列是最艺术的数据结构,优先队列是最优雅的数据结构而不相交集类就是最简洁的数据结构!这些说法我非常赞同,因为不相交集类的实现代码真的太简洁了。    处理等价关系最重要的问题就是要判断任意两个元素a,b是等价的,根据离散数学的知识,一个等价关系就决定了一个划分,所以我们要判断a,b是

2014-03-30 20:20:16 2901 2

原创 数据结构之散列

删除,插入,查找是对数据的最基本且最常用的操作,这几种操作的效率往往极大的影响着我们的程序的效率,当然,有很多数据结构都对这些操作提供了基本的支持,不过效率却大不相同,如向量表的查找效率是O(1),但插入与删除为O(n)的,链表相反,查找效率是O(n),但插入与删除为O(1)的,而二叉查找树对三种操作都为O(lgn)。 但却有一种数据结构很神奇,他对三种操作的效率都是O(1)的,这种结构就是散

2014-03-29 18:18:53 1393 2

原创 堆放木块C++实现

堆放木块是题很有意思的题目,原题的描述为:  我们用2维数组n[i][j] 表示平面上凸起的高度。或者说在二维平面上堆放立方体,满足 (每个数组元素都是非负整数)   n[i][j]   如图所示,是一种合法的方法。 对应的二维数组是:5 4 2 1 13 2 0 0 02 2 0 0 0 (注意正方向是从下往上,从右往左) 给定a,b,c,

2014-03-29 12:09:48 3514 15

原创 数据结构之左式堆的实现

左式堆是一种很有意思的二叉树,他与二叉堆即优先队列一样,具有堆序性质,唯一的区别在于他并非完全的平衡,而是偏左的,对任意一个节点x,左儿子的零路径长至少与右儿子的零路径长一样大,所谓的零路径长是从x到一个不具有两个儿子的节点的最短路径长: 如下:只有左边的才是左式堆,因为左树的左儿子与右儿子的零路径长一样大,右边的不是左式堆,因为1*的左儿子的零路径长为0,而右儿子的零路径

2014-03-28 20:50:30 1651 3

原创 数据结构之AVL树

AVL树是一种自平衡的二叉树,在AVL树里任何节点的两个子树的高度之差不能超过1,所以他是一种高度平衡的二叉查找树,他能保证查找,插入,删除在最坏的情况下都是O(log(n))的,不过插入和删除都需要通过一次或多次的单旋转或双旋转来调节平衡!   以下是调节平衡的例子:接下来是我的C++代码实现:#include#includeusing namespace std;

2014-03-27 15:38:59 936 2

原创 数据结构之二叉查找树的C++实现

二叉树是结构最简单的树了,而二叉查找树又是特殊的二叉树,它能实现高效的查找,删除,插入等基本操作,STL里的map与set就是用了自平衡的二叉查找树的思想实现的不过我这里先不实现自平衡功能,但这又是很重要的,等下我会说明,现在还是先看看二叉查找树的实现: 首先是Btree头文件:  #ifndef BTREE_H#define BTREE_H#includeusing n

2014-03-26 09:53:35 958

原创 数据结构之一般树的实现

编程离不开算法,算法离不开数据结构,数据结构里最重要的非线性结构便是树了,树原本是特殊的图,但我们不在图论里讨论树,就是因为其非常特殊,所以我们 一般都是单独讨论,下面我先说一下一般树的实现:    对于一般的树,即n叉树,我们一般是用先大儿子再兄弟的表示方法把n叉树用二叉树来表示,这种树也是很有实际应用的,例如表达式树的建立,还有文件目录树的建立等等,而这种树的遍历同样也是有

2014-03-25 22:52:30 964

原创 自适应肤色识别

肤色识别是数字图像的一个重要课题,现在已经有很多方法解决这个问题,其中不乏很多好的方法,但几乎都有各自的缺陷,很难达到完美,毕竟能否识别成功,识别是否精确取决于很多因素。     我做的是基于YUV空间和YQI空间的自适应光照的肤色识别,其原理非常简单,可以参考如下资料:    http://wenku.baidu.com/link?url=m01RY0xYaraGnOmWVSSthhuG

2014-12-14 11:04:22 3367

原创 linux网络编程实现投票功能

投票系统1.说明:写了一个投票系统,过程是先配置好服务器,在写一个网上投票功能,要实现网上投票功能。其实功能实现还是很简单的,麻烦一点的在于过程比较繁杂,要做的东西还是挺多的!2.过程:第一步:配置httpd服务器先配置好httpd服务器。我先下载好了和http服务器的包后,由于fedora的httpd配置相对比较简单,所以我也只是简单的做了一下修改,如下:把:

2014-05-18 16:50:21 1573

原创 de Casteljau算法的matlab实现

一直在写c++程序,不过对于一些作图程序来说,还是MATLAB比较实在。           de Casteljau算法是作贝塞尔曲线的一种高效的算法,其思想就是对[0,1]区间中所有的t,通过n个控制顶点不断递推得到一个顶点:下面是我的代码实现:function deCasteljau(P,Q)%P is 1*n matrix for X%Q is 1*n matrix for

2014-05-05 15:37:55 4943 1

原创 简单概率DP——hdu4405

题目描述:Hzz loves aeroplane chess very much. The chess map contains N+1 grids labeled from 0 to N. Hzz starts at grid 0. For each step he throws a dice(a dice have six faces with equal probability to

2014-05-03 19:56:26 1193

原创 最大权二分匹配

图论里有一个很经典的算法,那就是二分匹配,不过只是简单的匹配有时并不能解决我们的问题,比如匹配带权的情况,引申的一个很重要的问题就是分配问题,比如给n个人分派m个任务,每个人都有不同的成本,如何分配能使得成本最小就是这样的问题,这样的问题我们统称为二分图的最大权匹配问题.解决这类问题的最好的方法应该就是KM 算法,具体细节可以自己百度!下面是我的代码,我主要还是用了类来写,觉得这样比较好理

2014-04-26 19:39:41 1221 1

原创 后缀数组的应用 hdu 3518

这两天一直再看后缀数组,虽然很难,但渐渐有一点感觉了,越来越觉height数组真的非常强大,做hdu3518题基本毫不费力;题意大致是求一个字符串中不相交的重复子串的总数,思想大致是穷尽每一个长度i(最长是字符的一半),再看每一个height数组中的值是否大于i,注意连续时表示是同一字符串,比如,aaaa,当i为1时,就有height[2]=1;height[3]=2;表示a,aa,这里是重复

2014-04-26 17:03:06 985

原创 hdu 1403 后缀数组的应用

最近开始学后缀数组,不得不说这种结构真的很强大,但也很难学,看了好久都稀里糊涂的,现在又认真的看了一遍,总算有点想法了,然后从HDU找了一道题来小试一下,没想到轻松过。题目是求两个字符串的最长公共子串,思想是连接两个字符串,中间用一个特殊字符隔开,然后再遍历height数组,找最大值,且满足s[i]与s[i-1]属于不同的字符串下面便是我的代码:/***************

2014-04-26 13:24:55 1348

转载 后缀数组

后缀数组——处理字符串的有力工具作者:罗穗骞2009年1月  【摘要】  后缀数组是处理字符串的有力工具。后缀数组是后缀树的一个非常精巧的替代品,它比后缀树容易编程实现,能够实现后缀树的很多功能而时间复杂度也并不逊色,而且它比后缀树所占用的内存空间小很多。可以说,在信息学竞赛中后缀数组比后缀树要更为实用。本文分两部分。第一部分介绍两种构造后缀数组的方法,重点介绍如何

2014-04-26 10:57:13 668

原创 KMP算法

刚开始学KMP算法,感觉还挺简单的,唯一有点难理解的是next数组的理解,不过自己操作一遍也就明白了,写了以下代码并轻松过了HDU2203这道水题,下面是我的代码!#include#includeusing namespace std;#define N 100int next[N];string str_s,str_m;void GetNextEx(){int k=-1,j=

2014-04-22 11:20:48 1054

原创 hdu 1325 Is it a tree

题目描述:A tree is a well-known data structure that is either empty (null, void, nothing) or is a set of one or more nodes connected by directed edges between nodes satisfying the following properties

2014-04-16 11:02:37 1147

原创 计算器C++代码实现—— 中缀表达式的计算

中缀表达式的计算                               (包含“+ - * / ^ ()”)  这次的程序目的是要将一个中缀表达式转化为后缀表达式并计算,我用两个栈来实现这个功能,一个记录操作符,一个记录操作数,并采取一边转化一边计算的方法最后得出结果。但在这之前,必须先解决以下几个问题。  (1)当遇见“+ - * /   ^”操作符时,压人栈之前,什么情况

2014-04-06 11:47:54 6881 3

原创 图论之最小生成树

这次的生成树是匆忙写出来的,所以代码有点难看!我用的是kruskal算法,我认为这个比prim算法好理解一点!就是每次找未知边的最小边,在判断此边的两个点在已知边下是否连通——这里就要用到我刚说的不相交集类,如果连通则放弃,不连通则加人以知边,做完N-1次即可,下面是代码:#include#include#include#includeusing namespace std;

2014-03-30 22:22:44 1318 1

原创 堆放木块与ferrers图

今天终于把堆放木块那题做出来了,也算是很幸运,有一天突然看到ferrers图,让我有了一点思路,下面我来讲一讲什么是ferrers图:ferrers图是一个从上而下的n层格子,mi 为第i层的格子数,当mi>=mi+1(i=1,2,,n-1) ,即上层的格子数不少于下层的格子数的图。以下是几个ferrers图:稍微分析一下可以发现,木

2014-03-22 11:58:12 1382

原创 又是图论-稳定婚姻算法的C++实现

稳定婚姻是一个很有意思的二分图问题,这在生活中是一个典型的问题,通俗地可叙述为:当前有N位男生和N位女生最后要组成稳定的婚姻家庭,过程开始之前男生和女生在各自的心目中都按照喜爱程度对N位异性有了各自的排序.然后开始选择自己的对象,目的是让所有的人都能找到最适合的对象:下面是我的C++代码实现: #include#include#include#includeusing na

2014-03-19 19:11:18 1853

原创 最大二分图匹配的C++代码实现

最大二分图匹配是典型的图论问题,一般有两种做法,一种是运用最大流的思想,不过这种方法效率太低,为O(VE^2),没有利用好二分图的特殊性质。另一种做法是匈牙利算法,这种方法也是利用了增益路径的思想,但这种方法充分利用了二分图的性质,所以效率也是比较高的,为O(VE),而且还能进一步降低,不过我没有做那种优化,下面就是我的代码:#include#include#inclu

2014-03-18 18:26:25 2261

原创 利用优先队列实现的dijkstra算法

dijkstra算法是典型的贪心算法,但如果没有好的数据结构支持的话,O(v^2)的效率还是让人有点不满意,不过如果利用优先队列的话就能轻松的实现O(ElogV+VlogV),对       于稀疏图来说,这是很令人满意的!废话不多说,下面就是我的C++代码:#include#include#include#includeusing namespace std;#define

2014-03-15 20:38:28 4021

原创 最大流与最小割C++实现2——深度优先搜索

刚刚写了一个最大流与最小割的的广度优先搜索实现!后来我发现只要用栈来替代队列来储存标记的顶点,便实现了深度优先搜索.但要注意此时应该先把后向边压入栈!以下是我的代码实现:#include#include#include#include#include#define MAX 999999using namespace std;class Graph{private: s

2014-03-13 16:17:28 1053

原创 最大流—最小割的C++实现

最大流与最小割是图论里最经典的算法之一:为了实现这个算法,储存方面我用的是图的邻接表而不是邻接矩阵,因为我觉得邻接表效率会更快一点,而算法方面我用的是广度优先搜索,这种方法效率也是比较高的,下面就是我的算法的c++实现:#include#include#include#include#include#define MAX 999999using namespace std;

2014-03-13 12:39:20 2959 1

原创 凸包算法的蛮力实现

蛮力实现凸包算法,思路是相当简单的,每两个点形成一条边来看看他是否是边界线——即看其他的点是否都在这条边的左边或都在右边:下面就是我的算法C++实现: #include#includeusing namespace std;struct point{  intx;  inty;   point(int xx=0,int yy=0):x(xx),y(yy){}

2014-03-10 19:49:42 2270

原创 最小二叉堆

由于优先队列实在好用,所以我自己也写了一个最小二叉堆,大家可以看看:#ifndef BHEAP_H#define BHEAP_H#includeusing namespace std;#includetemplateclass Bheap{private:vector v;int size; public:Bheap(int

2014-03-08 23:06:39 1376

原创 好用的数据结构

这是我第一次写博客!感觉好紧张阿!哈哈~~     根据我的比较肤浅的理解呢!要用好数据结构  ,首先必须得要熟悉vector与list,最好要自己能实现这两种数据结构的基本功能。这应该是最起码的要求!           然后最重要的就是树了,无论是二叉查找数,还是AVL树,还是一般的树,都应该要清楚的了解,也要自己试着实现树的基本功能,话说我去年学数据结构的时候在树这里可是

2014-03-08 22:22:04 995

最大流与最小割

最大流是图论经典算法,大家也可以看看我的代码!

2014-03-13

计算器的实现

只实现了四则运算与幂运算,不过根据我的思路很容易扩展,我也曾在VC里做了图形化的设计,感觉还不错!

2014-03-09

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除