编程珠玑 - 算法优化 - 过滤敏感词 - 第二步:效率问题
2011-09-22 00:33
267 查看
就像上一步说的那样,当敏感词超过了一定量时候,效率将会急剧下降。
假设发布内容“再顶”,敏感词达到了1000个,按照快速实现的方法,循环1000次,显然不是最优方法。
因为“再”,“顶”并没有出现在
package test;
import static util.PrintUtil.print;
import java.util.ArrayList;
public class Test {
static String[] keys = {"办证", "气枪", "裸聊"};
static String tContent = "再顶";
static ArrayList<String> list = new ArrayList<String>();
static {
for (String k : keys) {
if (!list.contains(k.substring(0, 1))) {
list.add(k.substring(0, 1));
}
}
}
/**
* 快速实现的方法
*/
public final static String test1(String content) {
for (String k : keys) {
if (content.indexOf(k) > -1)
return k;
}
return null;
}
/**
* 优化一
*/
public final static String test2(String content) {
boolean bFirst = false;
int length = content.length();
for (int i = 0; i < length; i ++) {
if (list.contains(content.substring(i, i + 1))) {
bFirst = true;
break;
}
}
return bFirst ? test1(content) : null;
}
public static void main(String[] args) {
long time1 = System.currentTimeMillis();
print(test2(tContent));
print("test2 time:" + (System.currentTimeMillis() - time1));
}
}
假设发布内容“再顶”,敏感词达到了1000个,按照快速实现的方法,循环1000次,显然不是最优方法。
因为“再”,“顶”并没有出现在
"办证、
气枪、
裸聊"
的第一个字集合"办、气、裸"中,所以我们可以考虑当搜集所有敏感词第一个字集合来快速判断发布内容是否含有敏感词。
package test;
import static util.PrintUtil.print;
import java.util.ArrayList;
public class Test {
static String[] keys = {"办证", "气枪", "裸聊"};
static String tContent = "再顶";
static ArrayList<String> list = new ArrayList<String>();
static {
for (String k : keys) {
if (!list.contains(k.substring(0, 1))) {
list.add(k.substring(0, 1));
}
}
}
/**
* 快速实现的方法
*/
public final static String test1(String content) {
for (String k : keys) {
if (content.indexOf(k) > -1)
return k;
}
return null;
}
/**
* 优化一
*/
public final static String test2(String content) {
boolean bFirst = false;
int length = content.length();
for (int i = 0; i < length; i ++) {
if (list.contains(content.substring(i, i + 1))) {
bFirst = true;
break;
}
}
return bFirst ? test1(content) : null;
}
public static void main(String[] args) {
long time1 = System.currentTimeMillis();
print(test2(tContent));
print("test2 time:" + (System.currentTimeMillis() - time1));
}
}
相关文章推荐
- 编程珠玑 - 算法优化 - 过滤敏感词 - 第三步:树形结构
- 编程珠玑 - 算法优化 - 过滤敏感词 - 第一步:快速实现
- hdu 1024Max Sum Plus Plus 最大M段字段和 单调优化DP 从一类单调性问题看算法的优化
- javaWed项目中用过滤器实现转码功能,敏感词汇过滤更能,处理Get和Post接收数据中的中文乱码问题以及敏感词汇的处理
- js实现敏感词过滤算法及实现逻辑
- DFA算法实现Java敏感词过滤
- Java使用DFA算法实现敏感词过滤
- 最大子序列和问题之算法优化
- SQL Server中的SQL语句优化与效率问题
- GDI+效率问题与优化
- 一个没有经过优化的过滤指定目录下的指定扩展名文件的算法
- AC多模匹配算法过滤敏感词实例
- 比特币挖矿算法优化-(1.减少冗余计算;2.sat 布尔可满足性问题)
- GDI+效率问题与优化
- C++解决最大子列和问题,算法时间复杂度优化