- 浏览: 77658 次
- 性别:
- 来自: 上海
最新评论
-
rockythd:
视界这个概念终于搞清楚了,谢谢!
Java关于Scala的“视界(view bound)”的模拟 -
regular:
写了一个更通用的方法:ObjectUtils.cast。目的是 ...
Java关于Scala的“视界(view bound)”的模拟 -
lrztiancai:
谢谢分享。正在找这个!
Parsley+SpiceLib 2.4 Developer Manual -
kraft:
第二版什么时候出啊
Programming In Scala 翻译 -
justjavac:
xpf7622 写道haixu.huang@live @前的名 ...
Programming In Scala 翻译
速度还算快,例子里比较的文件一共371个,3,293,472字节,比较时间不超过2秒。
不过我的机器也很好,CPU: Athelon 64 X2 Dual 5200+,Mem: 2GB DDR2 667。
package cn.sh.huang; import java.io.File; import java.io.FileFilter; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.text.DateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.regex.Pattern; /** * * @author Huang, Haixu */ public class Main { /** * @param args the command line arguments */ public static void main(String[] args) throws FileNotFoundException, IOException { Calendar c = Calendar.getInstance(); FileFilter filter = new FileFilter() { String s = "*.java"; { s = s.replace('.', '#').replaceAll("#", "\\\\."); s = s.replace('*', '#').replaceAll("#", ".*"); s = s.replace('?', '#').replaceAll("#", ".?"); s = "^" + s + "$"; } Pattern p = Pattern.compile(s); public boolean accept(File file) { return file.isDirectory() ? true : (p.matcher(file.getName()). matches()); } }; List idxList = checkFolder("C:\\Program Files\\Java\\jdk1.6.0_13\\demo", filter, "DocumentEvent".getBytes("US-ASCII")); for (int i = 0, size = idxList.size(); i < size; i++) { System.out.println(idxList.get(i)); } DateFormat df = DateFormat.getTimeInstance(); System.out.println("From " + df.format(c.getTime()) + " to " + df.format(Calendar.getInstance().getTime())); } private static List checkFolder(String folderName, FileFilter filter, byte[] pattern) throws FileNotFoundException, IOException { File folder = new File(folderName); File[] files = folder.listFiles(filter); if (files == null) { return null; } List list = new ArrayList(); for (int i = 0; i < files.length; i++) { File file = files[i]; String fileName = file.getAbsolutePath(); if (file.isDirectory()) { List subList = checkFolder(fileName, filter, pattern); if (subList != null) { list.addAll(subList); } } else { int[] idxz = checkFile(fileName, pattern); if (idxz.length > 0) { StringBuffer sb = new StringBuffer(fileName + "# "); for (int j = 0; j < idxz.length; j++) { sb.append(idxz[j]).append(" "); } list.add(sb.toString()); } } } return list; } private static int[] checkFile(String fileName, byte[] pattern) throws FileNotFoundException, IOException { File file = new File(fileName); int fileLen = (int) file.length(); FileInputStream fis = new FileInputStream(file); return getPatternIndexz(fis, fileLen, 0, pattern); } private static int[] getPatternIndexz(FileInputStream fis, int fileLen, int index, byte[] pattern) throws IOException { fis.skip(index); final Rule[] rules = getShiftRule(pattern); byte[] buffer = new byte[pattern.length]; List idxList = new ArrayList(); int shift = pattern.length; while (fileLen > shift) { int remain = pattern.length - shift; if (remain > 0) { System.arraycopy(buffer, shift, buffer, 0, remain); } int readed = 0; do { readed = fis.read(buffer, remain + readed, shift - readed); } while (shift > readed); fileLen -= shift; shift = match(buffer, pattern, rules); if (shift == 0) { idxList.add(new Integer(index)); shift = pattern.length; } index += shift; } int[] idxz = new int[idxList.size()]; for (int i = 0; i < idxz.length; i++) { idxz[i] = ((Integer) idxList.get(i)).intValue(); } return idxz; } private static Rule[] getShiftRule(final byte[] pattern) { int endPos = pattern.length - 1; List idxList = new ArrayList(); for (int i = endPos - 1; i >= 0; i--) { idxList.add(new Integer(i)); } List ruleList = new ArrayList(); Set flagSet = new HashSet(); for (int i = endPos; i >= 0 && idxList.size() > 0; i--) { byte p = pattern[i]; List shadowIdxList = new ArrayList(); for (int j = 0, size = idxList.size(); j < size; j++) { int idx = ((Integer) idxList.get(j)).intValue(); int pos = idx - (endPos - i); if (pos < 0) { ruleList.add(new Rule(i, null, endPos - idx)); } else { byte pp = pattern[pos]; if (pp != p) { Byte ppp = new Byte(pp); if (!flagSet.contains(ppp)) { flagSet.add(ppp); ruleList.add(new Rule(i, ppp, endPos - idx)); } } else { shadowIdxList.add(idxList.get(j)); } } } flagSet.clear(); idxList = shadowIdxList; } return (Rule[]) ruleList.toArray(new Rule[ruleList.size()]); } private static int match(final byte[] buffer, final byte[] pattern, Rule[] rules) { int default_shift = pattern.length; for (int i = pattern.length - 1; i >= 0; i--) { byte b = buffer[i], p = pattern[i]; if (b != p) { for (int j = 0; j < rules.length; j++) { Rule rule = rules[j]; Byte pp = rule.getP(); if (pp == null) { default_shift = rule.getShift(); continue; } int idx = rule.getIdx(); if (i < idx) { // Next rule continue; } else if (i == idx) { if (pp.byteValue() == b) { return rule.getShift(); } } else { return default_shift; } } return default_shift; // No matching rule } } return 0; } } final class Rule { private final int idx; private final Byte p; private final int shift; public Rule(final int idx, final Byte p, final int shift) { this.idx = idx; this.p = p; this.shift = shift; } /** * @return the idx */ public int getIdx() { return idx; } /** * @return the p */ public Byte getP() { return p; } /** * @return the shift */ public int getShift() { return shift; } }
发表评论
-
把Spring容器中的bean绑定到通过代码创建的对象
2012-04-26 16:17 2269Spring提供了对配置中创建对象的字段实例注入。但如果是通过 ... -
动态注册消息类型及处理函数
2011-10-01 15:56 994内容略。参见代码演示。 -
代码实例
2011-02-14 17:17 1011代码实例文件 -
如何在类外部调用被子类覆盖的父类方法
2011-01-20 14:46 1892题目比较绕。以下用一个简单的例子说明: public cl ... -
SWT应用的开发实例:没有使用到OSGi
2011-01-14 11:27 1521添加音效,以及中奖名单回看功能。 SWT应用一枚。具体方法见 ... -
运行期代码问题检查技术的研究
2010-11-29 13:30 1138以下用我之前代码中的一个bug作为说明,解释如何实现代码在运行 ... -
代码潜在故障的动态分析
2010-11-16 12:24 1503引子 大家都听说过FindBugs的大名。这是一款静态代码分析 ... -
健壮的、便捷的、异步的SocketChannel实现
2010-04-27 10:34 8375Socket通信比较常见的问题有如下几种: 1、设置收发超时; ... -
打算研究学习一下OSGi和Equinox
2010-02-10 11:26 1141看到一本很直接讨论这个题目的书,不过要等到3月1日才出来。 ... -
关键应用服务的集群技术模拟
2010-01-08 14:41 1077集群技术,也就是俗称的Cluster,是为了保证某种应用不间断 ... -
JarSpur 检查引用包归属的小工具
2009-12-25 17:31 1081图形化的界面,允许你导入任意多的在项目中可能需要的Jar包。 ... -
class.getResourceAsStream()与ClassLoader.getResourceAsStream()的区别
2009-11-11 17:33 2047在jar包里获得流形式的资源有两种方法,一个是Class.ge ... -
MultiKeyedMap方案的实现
2009-11-10 11:55 3752方案背景 所谓“MultiKey ... -
Java2D: 硬件加速 - 第二部分 - 缓冲策略:Buffer Strategies
2009-11-02 12:52 2936原文地址:Java2D: Hardware ... -
Java2D: 硬件加速 - 第一部分 - 非恒定图像类:Volatile Image
2009-10-30 16:19 4292原文地址:Java2D: Hareware Accelerat ... -
自建的MiniChart库,目前实现了点图、折线图、柱状图和饼图
2009-07-15 11:08 1231花了大约一个星期时间做的MiniChart库。 由于现在的免费 ... -
对于经典模式匹配算法的一些改动
2009-06-12 12:44 1485从一个很长的字符串(或者数组)中,查找某个子串(模式串)是否存 ... -
读写进程的互斥锁
2009-03-16 15:27 1588以下的代码完成了对某个资源的读写互斥锁,具体说明如下:1. 若 ... -
Object数组到泛型数组转换的伪解决方案
2009-01-23 10:44 4328闲来无事,想要用目前的Java技术模拟一个对象数据库。最初只是 ...
相关推荐
**AC-BM 多模式匹配算法** AC-BM(Aho-Corasick-BM)算法是一种结合了Aho-Corasick算法和Boyer-Moore算法的字符串匹配方法,主要用于在一个大文本串中高效地查找多个模式串。这种算法提高了在大量模式下搜索文本的...
由于你提供的压缩包文件名只包含"IP搜索--BM模式匹配",没有具体的代码内容,无法进一步分析代码实现细节。通常,一个实现BM模式匹配的IP搜索程序会包含以下步骤: 1. 初始化模式和文本字符串,可能是IP地址数组或...
本篇文章将深入探讨如何使用C++实现Bad Character Rule(坏字符规则)和Good Suffix Rule(好后缀规则)来优化Boyer-Moore(BM)字符串匹配算法。BM算法以其高效的性能在文本搜索、数据挖掘等多个领域广泛应用。 ...
### BM模式匹配算法剖析 #### 一、引言 串的模式匹配,即子串的定位操作,是一种在计算机科学中极为重要的运算。对于给定的正文主串T(长度为n)和模式串P(长度为m),目标是在主串T中找到等于模式串P的子串。...
BM算法的核心思想是利用模式串(Pattern)和文本串(Text)之间的不匹配字符位置信息,以减少不必要的比较次数。它包含两个关键的优化策略:坏字符规则(Bad Character Rule)和好后缀规则(Good Suffix Rule)。 1...
**BM模式匹配算法详解** BM(Boyer-Moore)算法是一种高效的字符串搜索算法,由Robert S. Boyer和J Strother Moore于1977年提出。它以其高效性和广泛的应用性在信息技术领域中占有重要地位。BM算法的核心思想是通过...
**BM算法完整实现C代码** BM(Boyer-Moore)算法是一种在大文本中高效查找子串的字符串搜索算法,由Robert S. Boyer和J. Strothoff于1977年提出。相比于简单的线性查找,BM算法在处理大量数据时能显著提高查找效率...
**字符串匹配算法-BM算法的实现代码** 在计算机科学领域,字符串匹配算法是寻找一个字符串(称为模式)在另一个较大的字符串(称为文本)中的过程。BM(Boyer-Moore)算法是一种高效的字符串搜索算法,由Robert S. ...
### BM模式匹配算法详解 #### 一、引言 模式匹配算法是计算机科学中的一个重要分支,在文本检索、信息处理等领域有着广泛的应用。特别是在中文信息处理领域,高效的模式匹配算法能够极大地提升系统的性能。BM...
在提供的压缩包文件"AC_BM"中,可能包含了AC_BM算法的实现代码、相关论文、示例和测试数据等资源。学习这些资料,可以深入理解算法的原理和应用,进一步提升在字符串处理和搜索领域的专业技能。
《多模式字符串匹配算法——AC_BM算法的深度解析与实现》 字符串匹配算法是计算机科学中的一个重要领域,尤其在文本处理、搜索引擎、数据挖掘等领域有着广泛应用。其中,AC_BM算法,即Aho-Corasick算法结合Boyer-...
通过理解BM算法的基本原理和C语言实现,你可以编写出自己的字符串匹配程序,有效地解决大数据量下的字符串查找问题。当然,还有其他优化版本的BM算法,如Horspool改进版和Sunday改进版,它们进一步提升了匹配速度。...
在提供的压缩包文件"BM(完结版本)"中,应包含BM算法的源代码实现。通过阅读和理解这些代码,你可以更深入地了解BM算法的细节,包括如何构建和使用坏字符表以及如何实现好后缀规则。此外,你可以通过测试不同的输入...
BM算法被认为是亚线性串匹配算法,它在最坏情况下找到模式所有出现的时间复杂度为O(mn),在最好情况下执行匹配找到模式所有出现的时间复杂度为O(n/m)。
使用了BM匹配算法计算了左右图像的视差图,本次BM匹配算法是使用python3.7,通过调用opencv库函数实现
单模式匹配算法(Boyer-Moore Algorithm,简称BM算法)是计算机科学中用于字符串搜索的一个高效算法,由Robert S. Boyer和J Strother Moore于1977年提出。这个算法在处理大规模文本时表现出了显著的效率,尤其在目标...
GCC编译可用,该程序支持a-z的字符串(注意空格也不在内),如果查找字段需要扩大,可以修改代码增加范围
BM算法的坏字符规则是指在模式串(pattern)和目标串(text)的匹配过程中,如果发现某个字符在模式串中不存在,则直接将模式串向右移动至该字符之后的位置,因为之前的所有比较都是无效的。 好后缀规则则是指在...
**Snort入侵检测系统与BM模式匹配算法** Snort是一款广泛应用的开源网络入侵检测系统(IDS),它能够实时监控网络流量,识别并阻止潜在的攻击行为。BM(Boyer-Moore)模式匹配算法是Snort中用于快速查找可疑模式...
BM3D.zip是一个包含BM3D算法实现的MATLAB代码集合,主要用于图像去噪处理。BM3D(Block-Matching and 3D filtering)是一种基于块匹配和三维滤波的图像去噪方法,由E. A. Yaglom等人在2007年提出。该算法以其出色的...