
算法&设计模式
文章平均质量分 70
iteye_19488
这个作者很懒,什么都没留下…
展开
-
GoF——23中设计模式】通向J2EE的隐形“桥”
《Design Patterns: Elements of Reusable Object-Oriented Software》(即后述《设计模式》一书),由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 合著(Addison-Wesley,1995)。这几位作者常被称为"四人组(Gang of Four)",而这本书也就被称为"四...原创 2009-02-18 13:28:49 · 134 阅读 · 0 评论 -
初识有穷状态机
题目的要求是:一个字符串由多个单词组成,这些单词由一个或者连连续多个空格分隔开,请写一个程序统计输入的字符串 有多少个单词。 说明一下,此题解决方法不唯一,也有比我用的方法更简单。在这里,只是想针对有穷状态机算法来解决,顺便了解一 下该算法。 实现原理: 字母表:英文字母和空格。 状态:起始状态、单词状态、空格状态和接受...原创 2012-06-05 15:17:40 · 726 阅读 · 0 评论 -
数值交换算法
三种方法:(1)使用临时变量 (2)不使用中间变量,仅使用加法运算 (3)不使用中间变量,使用异或XOR操作#include <iostream.h>template <typename T>void swap_var(T &a, T &b){ T tmp; tmp = a; a = b; b = tmp;}...原创 2012-06-06 14:15:33 · 83 阅读 · 0 评论 -
KMP串匹配算法
串的模式匹配是串处理系统中的最重要操作之一,普通匹配算法的时间复杂度为O(m*n)。然而,KMP算法的算法时间复杂度为O(m+n),其主要改进是:当出现比较不等时,不需回溯指针,而是利用已经得到的部分匹配的结果将模式向后滑动尽可能远的距离。 KMP算法的本质是基于有限自动机理论,它简化了有限自动机的构造,只考虑当前节点匹配是否成功,即两个分支的走向,成功则j++,失败则转到next[i] 的...原创 2012-06-06 14:24:28 · 104 阅读 · 0 评论 -
java加密签名代码备忘
这类代码很容易忘记,所以记到这里,以后方便翻阅:package com.olivephone.olivestat.task;import java.security.Key;import java.security.KeyFactory;import java.security.KeyPair;import java.security.KeyPairGenerator;...原创 2013-09-04 16:23:50 · 220 阅读 · 0 评论 -
protobuff使用小记
大家都说google protobuf很好用,这两天有时间研究了一下,果然很满意;才开始研究的时候,始终在想一个问题:protobuf里面没有消息头,包长度,如果我有多个消息类型的话,发送方还好说,但是到了接收方,该如何识别接收到的是哪个消息类型呢?苦苦思考良久,发现其实是我的思路原本就不对,其实在发送的时候,把消息头和消息体不要放在一个message里,分开序列化就ok了,费话就不多说了,测试代...2012-10-31 10:51:44 · 355 阅读 · 0 评论 -
JAVA实现RSA算法:可将密钥存放到文件中并取出
本程序能实现生成RSA密钥,保存到文件中并取出,再进行加解密,如需将密钥保存到数据库中,请参考http://blog.164288.com/post/21.html。package init;import java.io.*;import java.security.*;import java.security.spec.*;import javax...原创 2012-11-22 12:56:21 · 1710 阅读 · 0 评论 -
位运算符^ 按位异或的妙用
(1) 使某些特定的位翻转 例如对数10100001的第2位和第3位翻转,则可以将该数与00000110进行按位异或运算。 10100001^00000110 = 10100111 特殊情况:a^=1(a由真变假,由假变真)(2) 实现两个值的交换,而不必使用临时变量。 例如交换两个整数a=10100001,b=00000110的值,可通过下列...原创 2013-01-10 10:57:31 · 376 阅读 · 0 评论 -
位运算”在程序开发中的妙用!
位运算:位运算符包括: 与(&)、非(~)、或(|)、异或(^) &:当两边操作数的位同时为1时,结果为1,否则为0。如1100&1010=1000 | :当两边操作数的位有一边为1时,结果为1,否则为0。如1100|1010=1110 ~:0变1,1变0 ^:两边的位不同时,结果为1,否则为0.如1100^1010=011...原创 2013-01-10 11:00:42 · 369 阅读 · 0 评论 -
[转]经典数据结构 [ Hash算法 ]
什么是哈希表?哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。哈希表的做法其实很简单,就是把Key通过一个固定的算法函数既所谓的哈希函数转换成一个整型数字,然后就将该数字对数组长度进行取余,取余结果就当作数组的下标,...原创 2013-07-24 09:13:16 · 147 阅读 · 0 评论 -
几种排序算法
// datastructure.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include "stdio.h"#include "string.h"#include <windows.h> #include "MyTest.h"...原创 2012-09-24 10:49:39 · 92 阅读 · 0 评论 -
海量数据处理算法—Bit-Map
1. Bit Map算法简介来自于《编程珠玑》。所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。 2、 Bit Map的基本思想我们先来看一个具体的例子,假设我们要对0-7内的5个元素(4,7,2,5,3)排序(这里假设这些元素没有重复)。那么我们就可以采用Bit...原创 2013-06-04 09:52:16 · 196 阅读 · 0 评论 -
设计模式之Factory
工厂模式定义:提供创建对象的接口.为何使用?工厂模式是我们最常用的模式了,著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。为什么工厂模式是如此常用?因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑实用工厂模式,虽然这样做,...原创 2009-04-02 14:45:06 · 104 阅读 · 0 评论 -
设计模式学习笔记--备忘录模式(Memento)
备忘录模式(Memento) 属于对象的行为模式。 备忘录模式是我觉得最容易理解的一种模式,它的名字取得非常的贴切。1. 定义 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。2. 使用的原因 想要恢复对象某时的原有状态3. 适用的情况举例 有很多备忘录模...原创 2009-04-09 15:21:14 · 108 阅读 · 0 评论 -
设计模式----Chain of Responsibility(职责链)模式
GOF:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。 Chain of Responsibility(职责链)模式其实也挺简单的。通俗的来说就是当一个请求发到我这里,我能处理就给处理,不能处理就推给其他人去处理。也就是说接受请求的对象形成一个链,请求在这个链上传递,直到链上的某一个对...原创 2009-04-09 15:36:41 · 102 阅读 · 0 评论 -
解释器模式(interpreter)
来一个大写小转换的例子:Expression.javapackage com.prl.patterns.Interpreter;import java.util.LinkedHashMap;import java.util.Map;public abstract class Expression { protected Map<String,Integer&g...2009-09-14 23:32:04 · 113 阅读 · 0 评论 -
UML类图关系大全
1、关联双向关联:C1-C2:指双方都知道对方的存在,都可以调用对方的公共属性和方法。在GOF的设计模式书上是这样描述的:虽然在分析阶段这种关系是适用的,但我们觉得它对于描述设计模式内的类关系来说显得太抽象了,因为在设计阶段关联关系必须被映射为对象引用或指针。对象引用本身就是有向的,更适合表达我们所讨论的那种关系。所以这种关系在设计的时候比较少用到,关联一般都是有向的。使用ROSE 生成的代码是...原创 2013-05-23 13:54:02 · 99 阅读 · 0 评论 -
系统程序员成长计划-文本处理(一)状态机(1)
文章出处:http://www.limodev.cn/blog 作者联系方式:李先静 <xianjimli at hotmail dot com>系统程序员成长计划-文本处理(一)状态机(1)o 有穷状态机的形式定义有穷状态机是一个五元组 (Q,Σ,δ,q0,F),其中:Q是一个有穷集合,称为状态集。Σ是一个有穷集合,称为字母表。δ: Q xΣQ称为状态转移函数。...原创 2013-05-23 15:27:49 · 250 阅读 · 0 评论 -
系统程序员成长计划-文本处理(一)状态机(2)
状态机(2)o 用有穷状态机解一道面试题。刚毕业的时候,我到一家外企面试,面试题里有这样一道题:统计一篇英文文章里的单词个数。有多种方法可以解这道题,这里我们选择用有穷状态机来解,做法如下:先把这篇英文文章读入到一个缓冲区里,让一个指针从缓冲区的头部一直移到缓冲区的尾部,指针会处于两种状态:“单词内”或“单词外”,加上后面提到的初始状态和接受状态,就是有穷状态机的状态集。缓...原创 2013-05-23 15:28:49 · 139 阅读 · 0 评论 -
数据结构 二叉排序树 查入 搜索 删除
动态查找:动态查找不仅要查找结点,而且还要不断地插入和删除结点,当表采用顺序结构时,这需要花费大量的时间用于结点的移动,效率很低。这里采用树表的形式,树表本身可以动态建立,树表主要有二叉排序树,平衡二叉树,B-树和B+树等。二叉排序树的特点是:lchild <= root <= rchild,对此树中序遍历就可以找到一组有序的数组。二叉树的复杂度一般为O(log n ),但在特殊...原创 2013-05-31 14:10:24 · 118 阅读 · 0 评论 -
折半查找函数
private static int binarySearch(int[] a, int start, int len, int key) { int high = start + len, low = start - 1, guess; while (high - low > 1) { guess = (high + low) / 2;...原创 2013-01-10 11:14:23 · 207 阅读 · 0 评论