摘要: (可参考 http://c.chinaitlab.com/special/algorithm/Index.html)五大常用算法之一:分治算法分治算法一、基本概念 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)…… 任何一个可以用计算机求解的问题所需的计算时间都与其规模有关。问题的规模越小,越容易直接求解,解题所需的计算时间也越少。 阅读全文
posted @ 2012-12-01 15:32 曾先森在努力 阅读(349) 评论(0) 推荐(0) 编辑
摘要: 1、首先备份Ubuntu 12.04源列表sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup (备份下当前的源列表,有备无患嘛)2、修改更新源sudo gedit /etc/apt/sources.list (打开Ubuntu 12.04源列表文件)3、将下面的代码粘贴进去(“#”开头的那一行为注释,可以直接复制进文件中)4、通知ubuntu启用新的更新源 sudo apt-get update#电子科技大学 deb http://ubuntu.uestc.edu.cn/ubuntu/ precise main restrict 阅读全文
posted @ 2012-11-13 14:07 曾先森在努力 阅读(751) 评论(0) 推荐(0) 编辑
摘要: Ubuntu系统必须开启ssh服务后,XP或者其他的主机才可以远程登陆到Ubuntu系统。1,安装软件包,执行sudo apt-get install openssh-serverUbuntu缺省安装了openssh-client,如果你的系统没有安装的话,再用apt-get install openssh-client安装上即可。2,然后确认sshserver是否启动,执行ps -e |grep ssh如果只有ssh-agent那ssh-server还没有启动,如果看到sshd那说明ssh-server已经启动了。3,ssh-server配置文件位于/ etc/ssh/sshd_config 阅读全文
posted @ 2012-11-13 14:04 曾先森在努力 阅读(268) 评论(0) 推荐(0) 编辑
摘要: 标识接口是没有任何方法和属性的接口.它仅仅表明它的类属于一个特定的类型,供其他代码来测试允许做一些事情.使用标记接口的唯一目的是使得可以用instanceof进行类型查询,例如: if(obj instanceof Cloneable) {………} 一些容器例如Ejb容器,servlet容器或运行时环境依赖标记接口识别类是否需要进行某种处理,比如serialialbe接口标记类需要进行序列化操作.java.io.Serializable 未实现此接口的类将无法使其任何状态序列化或反序列化.为保证 serialVersionUID 值跨不同 java 编译器实现的一致性,序列化类必须声明一个明. 阅读全文
posted @ 2012-11-11 20:41 曾先森在努力 阅读(986) 评论(0) 推荐(1) 编辑
摘要: 1. 引言 哈希表(Hash Table)的应用近两年才在NOI中出现,作为一种高效的数据结构,它正在竞赛中发挥着越来越重要的作用。 哈希表最大的优点,就是把数据的存储和查找消耗的时间大大降低,几乎可以看成是常数时间;而代价仅仅是消耗比较多的内存。然而在当前可利用内存越来越多的情况下,用空间换时间的做法是值得的。另外,编码比较容易也是它的特点之一。 哈希表又叫做散列表,分为“开散列” 和“闭散列”。考虑到竞赛时多数人通常避免使用动态存储结构,本文中的“哈希表”仅指“闭散列”,关于其他方面读者可参阅其他书籍。 2. 基础操作 2.1 基本原理 我们使用一个下标范围比较大的数组来存储元素。可... 阅读全文
posted @ 2012-11-07 21:44 曾先森在努力 阅读(190) 评论(0) 推荐(0) 编辑
摘要: 网上搜了下,解析XML的方法大致有以下几种:XmlIO、Xerces、JDOM、dom4j、XOM、JiBX、KXML、XMLBeans、jConfig、XStream、Piccolo、NanoXML、XP Parser、Commons-Digester、NunniMJAX、Crimson、JOX、JaxMe、XMLConfigReader、Woodstox、xalan我自己用过的有JiBX、XMLBeans、JDOM、dom4j和java自带的xpath;其中JiBX、XMLBeans原理类似,而JDOM、dom4j的原理类似。java自带的xpath适用于不需要解析全部的XML文件,只需. 阅读全文
posted @ 2012-11-07 21:37 曾先森在努力 阅读(317) 评论(0) 推荐(0) 编辑
摘要: HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息。它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版。 它是由Netscape开发并内置于其浏览器中,用于对数据进行压缩和解压操作,并返回网络上传送回的结果。HTTPS实际上应用了Netscape的安全全套接字层(SSL)作为HTTP应用层的子层。(HTTPS使用端口443,而不是象HTTP那样使用端口80来和TCP/IP进行通信。)SSL使用40 位关键字作为RC4流加密算法,这对于商业信息的加密 阅读全文
posted @ 2012-11-07 21:35 曾先森在努力 阅读(343) 评论(0) 推荐(0) 编辑
摘要: Java语言的一个优点就是取消了指针的概念,但也导致了许多程序员在编程中常常忽略了对象与引用的区别,特别是先学c、c++后学java的程序员。并且由于Java不能通过简单的赋值来解决对象复制的问题,在开发过程中,也常常要要应用clone()方法来复制对象。比如函数参数类型是自定义的类时,此时便是引用传递而不是值传递。以下是一个小例子: 1 public class A { 2 public String name; 3 } 4 public class testClone { 5 public void changeA(A a){ 6 ... 阅读全文
posted @ 2012-11-07 21:32 曾先森在努力 阅读(349) 评论(0) 推荐(0) 编辑
摘要: http://blog.csdn.net/ilibaba/article/category/506698/2 阅读全文
posted @ 2012-11-07 21:12 曾先森在努力 阅读(112) 评论(0) 推荐(0) 编辑
摘要: 这几天把Joshua Bloch的effective Java扫了一遍,记得前几年也曾想看过此书,不过看了几页就发现迫于自己的java基础和英语基础双双不过关,只能放弃,在经过了几年的修炼之后,在英文字典的帮助下,勉强可以理解一些内容了。既然看了就要留下点脚印,因此我把我觉得应该留点深刻印象的部分记录了下来,这其中也包含了我个人的一些理解。1. 使用静态工厂方法替代构造方法。好处有两点:第一,静态工厂方法是有名字的;第二,静态工厂方法可以不必要在每次调用时创建一个新的对象(对象池)。2. 迫使单例类使用私有构造函数。单例类的两种方式,一种使用私有静态实例延迟加载,另一种是用公有静态最终实例.. 阅读全文
posted @ 2012-11-07 21:10 曾先森在努力 阅读(233) 评论(0) 推荐(0) 编辑
摘要: 在从事软件开发的十多年间,我曾有幸读过多种开发语言的Effective系列,如《Effective C++》、《More Effective C++》、《Effective Java》(第一版/第二版)、《Effective C#》和《More Effective C#》,单单从这一点看也算是Effective系列的忠实拥趸了。毋庸置疑,这个系列的书籍对我们研习各种开发语言的进阶都有着极为重要的意义。 在与很多初、中、高级程序员一起合作开发期间,曾多次向他们推荐经典的专业书籍,尽管每种开发语言都有着属于自己的代表作,如C++ Primer、Thinking in Java和Essential 阅读全文
posted @ 2012-11-05 10:59 曾先森在努力 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 在平常的代码中,我们常常需要与时间打交道。在Python中,与时间处理有关的模块就包括:time,datetime以及calendar。这篇文章,主要讲解time模块。 在开始之前,首先要说明这几点: 接着介绍time模块中常用的几个函数: 1)time.localtime([secs]):将一个时 阅读全文
posted @ 2012-11-02 16:02 曾先森在努力 阅读(161) 评论(0) 推荐(0) 编辑
摘要: String str1="ABC"; 和String str2 = new String("ABC"); 有什么区别。String str1="ABC" 可能创建一个对象或者不创建对象,如果"ABC"这个字符串在java String池里不存在,会在java String池创建这个一个String对象("ABC").如果已经存在,str1直接reference to 这个String池里的对象。String str2 = new String("ABC") 至少创建一个对象, 阅读全文
posted @ 2012-10-24 10:57 曾先森在努力 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 一.Floyd算法假设从i到j的最短路径上要经过若干个顶点,这些中间顶点中最大的顶点编号为k,最小的顶点为t,因此要求算dist[i][j]的最小值,那么只需要求算dist[i][s]+dist[s][j](t<=s<=k)的所有值,并取其中最小者即可。因此可以设置一个中间顶点k(0<=k<n)分别插入到每队顶点(i,j)之中,并更新dist[i][j]的值。当n个顶点插入到每队顶点之中,求解便结束了。其实Floyd算法实质上是一个动态规划算法。 1 /*每对顶点之间最短路径Floyd 2011.8.27*/ 2 3 #include <iostream> 阅读全文
posted @ 2012-10-23 20:50 曾先森在努力 阅读(184) 评论(0) 推荐(0) 编辑
摘要: Dijkstra算法的核心思想是贪心策略+动态规划算法流程:在以下说明中,s为源,w[u,v]为点u和v之间的边的长度,结果保存在dis[]初始化:源的距离dis[s]设为0,其他的点距离设为无穷大(实际程序里设成-1了),同时把所有的点的状态设为没有扩展过。循环n-1次:在没有扩展过的点中取一距离最小的点u,并将其状态设为已扩展。对于每个与u相邻的点v,执行Relax(u,v),也就是说,如果dis[u]+map[u,v]<dis[v],那么把dis[v]更新成更短的距离dis[u]+w[u,v]。此时到点v的最短路径上,前一个节点即为u。结束。此时对于任意的u,dis[u]就是s到u 阅读全文
posted @ 2012-10-23 20:44 曾先森在努力 阅读(329) 评论(0) 推荐(0) 编辑
摘要: AOE网:在一个表示工程的带权有向图中,用顶点表示事件,用有向边表示活动,边上的权值表示活动的持续时间,称这样的有向图叫做边表示活动的网,简称AOE网。AOE网中没有入边的顶点称为始点(或源点),没有出边的顶点称为终点(或汇点)。AOE网的性质:(1)只有在某顶点所代表的事件发生后,从该顶点出发的各活动才能开始;(2)只有在进入某顶点的各活动都结束,该顶点所代表的事件才能发生。关键路径:在AOE网中,从始点到终点具有最大路径长度(该路径上的各个活动所持续的时间之和)的路径称为关键路径。关键活动:关键路径上的活动称为关键活动。关键活动:e[i]=l[i]的活动 由于AOE网中的某些活动能够同时. 阅读全文
posted @ 2012-10-23 20:28 曾先森在努力 阅读(265) 评论(0) 推荐(1) 编辑
摘要: 对于一条有向边(u,v),定义u<v;满足所有这样条件的结点序列称为拓扑序列。拓扑排序就是求一个有向图的拓扑序列的算法。一个有向图顶点的拓扑序列不是惟一的。并不是任何有向图的顶点都可以排成拓扑序列,有环图是不能排的。例子:比如排课问题,比如士兵排队问题等。 拓扑排序在实际生活中和算法中都有很大的应用。比如要排一下几门课程的先后次序,我们可以把课程抽象成结点,把什么课是什么课的基础抽象成边,那么该图的一个拓扑序列就是这些课的一个可行的先后次序。各种语言的编译器都用到了拓扑排序。 数学基础:什么是拓扑排序(Topological Sort)?简单地说,由某个集合上的一个偏序得到该集合上的一个 阅读全文
posted @ 2012-10-23 20:19 曾先森在努力 阅读(1271) 评论(0) 推荐(0) 编辑
摘要: 一些定义:1.一个连通且无回路的无向图称为树.2.若图G的生成子图是一棵树,则该树称为G的生成树.3.在图G的所有生成树中,树权最小的那棵生成树,称作最小生成树.关于找出最小生成树的两种算法,一个称为Kruskal(克鲁斯卡尔),另一个叫Prim(普里姆)(1) Kruskal 算法 step1: 选取最小权边e1, 置边数i=1 step2: 若 i=n-1 结束,否则转到step3 step3: 设已选择边为e1,e2,...ei 在 G中选取不同于e1,e2,...,ei的边, 使{e1,e2,...,ei,ei+1}中无回路且ei+1是满足此条件的最小边. step4: i= i+1. 阅读全文
posted @ 2012-10-23 14:44 曾先森在努力 阅读(194) 评论(0) 推荐(0) 编辑
摘要: KMP 算法我们有写好的函数帮我们计算 Next 数组的值和 Nextval 数组的值,但是如果是考试,那就只能自己来手算这两个数组了,这里分享一下我的计算方法吧。计算前缀 Next[i] 的值:我们令 next[0] = -1 。从 next[1] 开始,每求一个字符的 next 值,就看它前面是否有一个最长的"字符串"和从第一个字符开始的"字符串"相等(需要注意的是,这2个"字符串"不能是同一个"字符串")。如果一个都没有,这个字符的 next 值就是0;如果有,就看它有多长,这个字符的 next 值就是它的长 阅读全文
posted @ 2012-10-23 14:24 曾先森在努力 阅读(678) 评论(0) 推荐(0) 编辑
摘要: (作者matrix67) KMP算法是拿来处理字符串匹配的。换句话说,给你两个字符串,你需要回答,B串是否是A串的子串(A串是否包含B串)。比如,字符串A="I'm matrix67",字符串B="matrix",我们就说B是A的子串。你可以委婉地问你的MM:“假如你要向你喜欢的人表白的话,我的名字是你的告白语中的子串吗?”解决这类问题,通常我们的方法是枚举从A串的什么位置起开始与B匹配,然后验证是否匹配。假如A串长度为n,B串长度为m,那么这种方法的复杂度是O (mn)的。虽然很多时候复杂度达不到mn(验证时只看头一两个字母就发现不匹配了),但 阅读全文
posted @ 2012-10-23 14:21 曾先森在努力 阅读(220) 评论(0) 推荐(0) 编辑