自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 收藏
  • 关注

原创 一道华为上机题

/*题目概述:请设计函数,检测输入字符串中是否包含连续的或者离散的test,test只出现一次。函数原型:int getTest(char input[]) 函数说明:input为输入的字符串,如果出现连续的test则返回1,如果出现离散的test则返回2,如果没有出现test或者出现的次数和顺序不正确,则返回0测试样例:char in[][30]={"avvvdtes

2013-08-27 21:29:59 1025

原创 一道华为上机题

一道华为上机题,选秀节目

2013-08-09 19:12:31 1128

转载 Trie树的实现

Trie树的实现一、定义:Trie,又称字典树,是一种用于快速检索的二十六叉树结构。典型的空间换时间 二、结构图:三、原理:Trie把要查找的关键词看作一个字符序列,并根据构成关键词字符的先后顺序检索树结构;特别地:和二叉查找树不同,在Trie树中,每个结点上并非存储一个元素。 四、性质:0、利用串的公共前缀,节约内存1、在trie树上进行检

2013-08-07 22:32:07 939

原创 约瑟夫环

马上就要华为机试了, 华为的机试虽然没什么算法但拿他的题目练练手还是有必要的~我如果不是被刷掉了就是放在了第二批,祝第一批的实验室兄弟姐妹们顺利~/*************************************************************************************************约瑟夫环问题[问题描述]编号是1,2,……,n的

2013-08-07 10:51:39 945

转载 什么函数不能声明为虚函数

转自:http://blog.youkuaiyun.com/reille/article/details/6214165一、首先回顾下什么是虚函数及其作用,以便更好理解什么函数不能声明或定义为虚函数:1.定义:虚函数必须是基类的非静态成员函数,其访问权限可以是protected或public,在基类的类定义中定义虚函数的一般形式:virtual函数返回值类型虚函数名(形参表){函数体}2.

2013-08-02 15:37:41 1021

转载 5.2 Command命令模式

意图:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 类图: Command类:是一个抽象类,类中对需要执行的命令进行声明,一般来说要对外公布一个execute方法用来执行命令。 ConcreteCommand类:Command类的实现类,对抽象类中声明的方法进行实现。 Client类:最终的客

2013-07-30 23:38:19 751

转载 5.1 Chain of Responsibility职责链模式

意图:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 举例:辛辛苦苦了工作了一年,终于可以加薪了,向主管提交了加薪申请,主管一看不得了,自己职权不够,批不了,主管把申请上交总监,总监发现自己也批不了,申请到了总经理手中,总经理一看,小伙子口气不小了,有胆识敢申请,先来谈下心。预知后事如

2013-07-25 21:59:39 918 1

转载 4.7 Proxy代理模式

意图:为其他对象提供一种代理以控制对这个对象的访问。 种类和用途Proxy模式根据种类不同,效果也不尽相同:1、远程(Remote)代理:为一个位于不同的地址空间的对象提供一个局域代表对象。这个不同的地址空间可以是在本机器中,也可是在另一台机器中。远程代理又叫做大使(Ambassador)。好处是系统可以将网络的细节隐藏起来,使得客户端不必考虑网络的存在。客户完全可以认为被代理

2013-07-24 20:05:23 1240

转载 4.6 FlyWeight 享元模式

意图:运用共享技术邮箱地支持大量细粒度的对象。 享元模式可以避免大量非常相似类的开销。在程序设计中,有时需要生成大量细粒度的类实例来表示数据。如果能发现这些实例除了几个参数外基本上都是相同的,有时就能够受大幅度地减少需要实例化的类的数量。如果能把那些参数移到类实例的外面,在方法调用时将它们传递进来,就可以通过共享大幅度地减少单个实例的数目。在现实中什么时候才会应该考虑使用享元模式呢

2013-07-24 10:23:13 731

转载 4.5Fasade 外观模式

意图:外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。在软件开发系统中,客户程序经常会与复杂系统的内部子系统之间产生耦合,而导致客户程序随着子系统的变化而变化。那么如何简化客户程序与子系统之间的交互接口?如何将复杂系统的内部子系统与客户程序之间的依赖解耦?这就是外观模式的作用了,我们通过一个外观类定义一个高层接

2013-07-22 10:11:41 744

原创 4.4 Decorator模式

意图:动态的给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。 使用继承机制是添加功能的一种有效途径,从其他类继承过来的特性可以被多个子类的实例所使用。但这种方法不够灵活。用户不能选择对组件加特性的方式和时机。一种较灵活的方式是将组件嵌入另一个对象中,由这个对象添加特性。我们称这个嵌入的对象叫装饰。 几个例子帮助理解:QQ的换装系

2013-07-20 21:09:58 862

转载 4.3Composite

意图:将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。 组合模式有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。 生活中的例子组合模式将对象组合成树形结构以表示"部分-整体"的层

2013-07-19 20:16:37 699

原创 4.2Bridge桥接模式

意图:将抽象部分与实现部分分离,使它们都可以独立的变化。再通俗点说就是:实现系统可能有多角度的分类,每一种分类可能都有变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合。桥接模式结构图:Abstraction定义抽象的接口。该接口包含实现具体行为、具体特征的Implementor接口Refined Abstraction抽象接口Abs

2013-07-18 20:23:52 1127

转载 4.1Adapter模式

转自:http://blog.youkuaiyun.com/lcl_data/article/details/8780140解决的问题:适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作。比如说我的hp笔记本,美国产品,人家美国的电压是110V的,而我们中国的电压是220V,要在中国能使用,必须找个变压器转一下电压才可以。这个变压器就是个

2013-07-18 09:54:04 891

原创 C++ Primer消息处理示例

例子:对于邮件处理应用程序,Message类和Folder类分别表示电子邮件消息和消息出现的目录,一个给定的消息可以出现在多个目录中。Message和Folder类设计如图:对于每个Message,我们并不是在每个Folder中都存放一个副本,而是使每个Message保存一个指针集set,set中的指针指向该Message所在的Folder。每个Folder中也有一个指针集,其

2013-07-13 21:32:38 1599

转载 3.5 Singleton

单例模式也称为单件模式、单子模式,可能是使用最广泛的设计模式。其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。有很多地方需要这样的功能模块,如系统的日志输出,GUI应用必须是单鼠标,MODEM的联接需要一条且只需要一条电话线,操作系统只能有一个窗口管理器,一台PC连一个键盘。 单例模式有许多种实现方法,在C++中,甚至可以直接用一个全局变量做到这一点

2013-07-11 19:49:44 674

转载 探讨C++中对象的“浅拷贝”与“深拷贝”

C++中对象的复制就如同“克隆”,用一个已有的对象快速地复制出多个完全相同的对象。一般而言,以下三种情况都会使用到对象的复制:1.建立一个新对象,并用另一个同类的已有对象对新对象进行初始化,例如:class Rect{private: int width; int height;};Rect rect1;Rect rect2(rect1); // 使用rect1初始化r

2013-07-10 16:02:53 795 1

原创 3.4Prototype

意图:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。这个其实和C++的拷贝构造函数的作用是一致的,实际上就是动态抽取当前对象运行时的状态。 UML图:客户(Client)角色:让一个原型克隆自身从而创建一个新的对象。抽象原型(Prototype)角色:这是一个抽象角色,抽象类实现。此角色声明一个克隆自身的接口。具体原型(Concrete Prot

2013-07-10 10:41:53 960

原创 3.3FactoryMethod——工厂方法

意图:定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod使一个类的实例化延迟到其子类。 其实在抽象工厂模式中,经过改进后的模式就是工厂方法模式,所以不多说了,上UML图。通过工厂方法模式的类图可以看到,工厂方法模式有四个要素:1.工厂接口。工厂接口是工厂方法模式的核心,与调用者直接交互用来提供产品。在实际编程中,有时候也会使用一个抽象类

2013-07-09 19:19:25 784

转载 3.2Builder

意图:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 建造者模式的本质和建造楼房是一致的:即流程不变,但每个流程实现的具体细节则是经常变化的。建造者模式的好处就是保证了流程不会变化,流程既不会增加,也不会遗漏或者产生流程次序错误,这是非常重要的。 建造者模式通常包括下面几个角色:1. Builder:给出一个抽象接口,以规范产品对象的各个组成成分

2013-07-09 14:45:35 676

原创 3.1 抽象工厂

GOF设计模式-抽象工厂

2013-07-08 20:44:50 782

原创 第五章_散列

散列表ADT,只支持二叉树查找所允许的一部分操作。比如插入,删除,查找等。那些需要元素间排序信息的操作将不会得到支持。比如FindMin,FindMax和线性时间按排序顺序打印整个表的操作时不支持的。 散列函数在理想状态是能将任何两个不同的关键字映射到不同的单元,但是这是不可能,因为关键字是无穷的,但是散列表是有大小的。所以我们要找的散列函数应该能够在单元之间均匀的分配关键字。而且需要能够

2013-05-26 22:27:27 838

原创 第四章 树(2)

AVL树一棵AVL树是每个节点的左子树和右子树的高度最多相差1的二叉查找树(空树的高度定义为-1)。 插入一个节点可能会破坏AVL树的平衡性。如果发生这种情况就需要把平衡性质恢复了之后才认为插入这步完成。 在插入之后,只有那些从插入点到根节点的路径上的节点的平衡可能会被改变,因为只有这些节点的子树可能会发生变化。当我们沿着这条路径上行到根并更新平衡信息时,我们可以找到一个节点,

2013-05-24 21:10:44 1000

原创 第四章 树(1)

预备知识树的递归定义:一棵树是一些节点的集合,这些集合可以是空集;若非空,则一棵树由根节点r和0个或多个非空的子树T1,T2,…,Tk组成,这些子树中的每一棵的根都被来自根r的一条有向边所连接。树的这种递归定义使得在编写有关树的程序时递归地编写比较方便。 从节点n1到nk的路径的长定义为该路径上边的数目。 对任意节点ni,ni的深度是从根到ni的唯一路径长。根的深度是0。

2013-05-24 09:38:24 1011

原创 各种排序算法总结

明天就要去参加阿里巴巴的实习生笔试了,虽然没想着能进去,但是态度还是要端正的,也没什么可以准备的,复习复习排序吧。1 插入排序void InsertSort(int a[], int n){      for (inti=1; in; ++i) {            int key = a[i];            int j = i - 1;

2013-05-20 16:43:03 37153 2

原创 2184 cow exhibition

题意:给出N组数,每一组有Si和Fi两个数,从中选出若干组,使得Si的和TS与Fi的和TF相加最大,并且TS和TF都必须大于等于0。Si和Fi从-1000到1000。分析:这又是一道典型的背包问题。我们这么想,设dp[i][j]是前i组数的TS为j时,TF的最大值。这样就把TS当成了体积,把TF当成了价值。只不过体积也是会不断变化的,不确定到底体积是多少,但一定是大于等于0的。因为Si从-10

2013-05-18 12:40:21 869

原创 POJ 1976 A Mini Locomotive

题意:有三个火车头,每个最多能拉k个车厢,一共有n个车厢,每个车厢里都有乘客,每个火车头拉的车厢都是连续的。问能拉的最多的乘客数。分析:先一看好像没有什么思路,然后用动态规划的思想慢慢想:假设F[i][j]表示用i个火车头在前j个车厢中能拉的最大乘客数。考虑第j个车厢被拉还是不被拉~可得状态方程:F[i][j] = max(F[i][j-1], F[i-1][j-k]+b[j])b

2013-05-17 21:37:38 934

原创 POJ 1787 Charlie's Change

题意:给定一个数P,要求用四种币值为1,5,10,25的硬币拼成P,并且硬币数要最多。分析:这是一个多重背包问题,但是要转换一下思路,现在要求硬币数量最多,那么P是背包容量,硬币面值是cost,硬币数量是weight。多重背包问题加上used数组可以转换为完全背包问题,这样可以减小复杂度。还有就是要记录各种面值的硬币使用了多少次,这就需要记录路径。代码:#include using

2013-05-17 18:25:24 1185

原创 POJ 1742 coins

题意:给出几种面值的钱币和对应的个数,看能否凑出1-m中的各个面值。分析:显然,多重背包问题。要求全部装满。而且对1-m遍历并计数,毫无压力~上代码:#include using namespace std;int MIN_INT = (~(unsigned(-1)>>1));int F[100001];int A[101];int C[101];int max(int

2013-05-17 15:50:45 1226

原创 POJ 1384 PigBank

题意:题目的意思是有一个储蓄罐,里面放了硬币,只知道储蓄罐装了硬币和没装硬币时的重量,并且知道每种面值硬币的重量。现在要求储蓄罐中可能的最小金额。若储蓄罐中硬币的重量和每种面值硬币的重量不能匹配,则输出impossible。分析:这又是一道典型的完全背包问题,因为我们可以认为储蓄罐中每种面值的钱币是任意多的。这道题只是把求最大值改为了求最小值。并且背包要求完全装满。这个时候要注意初始化的时候不

2013-05-17 11:00:56 1579

原创 POJ 1276 cash machine

分析:题目的意思是,给出需要的总金额和每种面值钱的数量,求能够获得的接近总金额的最大的金额。总金额0 又是一道多重背包的问题,毫无压力。写个代码练练手吧~#include using namespace std;int F[100001];int n[11];int D[11];int max(int a, int b){ return a>b?a:b;}void

2013-05-16 19:48:03 1023

原创 POJ 1014 dividing

分析:如果想要公平的分得弹球,那么弹球的价值总和一定是偶数,可以先进行判断弹球的价值总和,若是奇数则不需要做下面的判断。如果是偶数,我们可以把这个问题映射为多重背包问题,并且这个背包是要求完全装满的。背包的总容量V就是所有弹球总价值和sum的一半,弹球的cost和weight都是其编号。个数则是由外界输入的。最后进行判断:如果得到的F[V]确定的等于sum/2,则说明能够公平的分弹球。

2013-05-16 16:11:30 1667

原创 从数组分割到背包问题(2)

从数组分割到背包问题(1)留下一个问题,时间复杂度和空间复杂度还可以进一步优化么?从状态方程F[i][j][k] = max(F[i-1][j][k],F[i-1][j][k-A[i]]+A[i]),其中1可以看出来,F[i][j][k]只与F[i-1][][]有关,那我们是否能够去掉i那一维呢?因为F[i][j][k]只与F[i-1][][]有关,所以我们用二维数组来代替的时候应该对

2013-05-15 20:07:12 942

原创 编程之美2.18_由数组分割到背包问题(1)

编程之美上2.18题:有一个无序,元素个数为2n的正整数数组,要求:如何能把这个数组分割为元素个数为n的两个数组,并使两个子数组的和最接近?eg:1,5,7,8,9,6,3,11,20,17->1,3,11,8,20     5,7,9,6,17 分析:题目的本质是从2n个整数中找出n个数,使得其和最接近所有整数总和的一半。编程之美的解法一已经明确了,该种揭发不是最优的。

2013-05-15 11:08:34 1424

转载 win7与VMware ubuntu虚拟机实现文件共享(最后一定要装open-vm-dkms插件)

一般来说,由于一些特殊的需要,会在Win7系统中利用虚拟机(VMware)安装ubuntu虚拟环境,使得不用重启就可以同时使用两个系统。但是想把在虚拟机ubuntu中编辑的文件可以同时被Win7中的程序使用,同时又不想利用两个系统的QQ或者U盘互拷,就需要能将文件在虚拟机和Win7(在这里以Win7为例,WinXP操作一样)下实现互传。有一种方法,就是通过VMware的共享文件夹来实现虚拟机Ubu

2013-05-14 20:09:03 10286

原创 第四、五章_ARP RARP

引言当一台主机将以太网数据帧发送到同一个局域网上的另一台主机时,是根据48bit的以太网地址来确定目的接口的,设备驱动程序从不检查IP数据报中的IP地址。 ARP为IP地址和硬件地址之间提供动态映射,说是动态的,因为这个过程是自动完成的。 RARP是被那些没有磁盘驱动器的系统使用的,它需要系统管理员进行手动设置。 例子用一个例子解释ARP的运行过程敲

2013-05-11 16:55:30 1335

原创 第三章_IP网际协议

IP首部IP协议是TCP/IP协议族中最核心的协议,所有的TCP、UDP、ICMP、IGMP数据都是以IP数据报格式传输的。 IP提供不可靠、无连接的服务。不可靠:不能保证IP数据报能成功到达目的地。可靠性由上层(如TCP)提供。无连接:IP并不维护任何关于后续数据报的状态信息。每个数据报的处理是相互独立的。IP数据报可以不按发送顺序接收。 IP数据报格式:

2013-05-09 19:19:02 1014

原创 第二章_链路层

链路层的三个目的:为IP模块发送和接收IP数据报;为ARP模块发送ARP请求和接收ARP应答;为RARP发送RARP请求和接收RARP应答; 以太网是当今TCP/IP采用的主要局域网技术,它采用CSMA/CD(带冲入检测的载波侦听多路接入)的媒体接入方法。速率为10Mb/s,地址是48bit。 ARP和RARP协议对32bit的IP地址和48bit的硬件地址进行映射。

2013-05-08 16:31:44 970

原创 第一章_概述

网络协议通常分为不同层次进行开发,TCP/IP一般认为有四层,从上到下分别是:应用层:处理应用程序,一般TCP/IP提供的通用的应用程序有Telnet(远程登录),FTP(文件传输协议),SMTP(简单邮件传输协议),SNMP(简单网络管理协议)运输层:为两台主机上的应用程序提供端到端的通信,在运输层主要有两个协议,TCP(传输控制协议),UDP(用户数据报协议)网络层:处理分组在网络

2013-05-08 00:24:04 830

转载 内存对界

文中部分参考自:点击打开链接http://www.th7.cn/Program/cp/201209/92293.shtml点击打开链接http://blog.youkuaiyun.com/u010064842/article/details/8865632点击打开链接http://blog.youkuaiyun.com/21aspnet/article/details/6729724点击打开链接http:

2013-05-05 15:52:19 756

空空如也

空空如也

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

TA关注的人

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