m0_37720339 2017-03-23 09:43 采纳率: 0%
浏览 804
已结题

bloom filter求修改部分代码,有报酬可以,会的加我QQ535350818

package cn.zhf.test;

import java.io.BufferedReader;

import java.io.DataInput;

import java.io.DataOutput;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStreamReader;

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

import java.util.BitSet;

import java.util.HashMap;

import java.util.Map;

import java.util.Random;

public class BloomFilter {

private BitSet bs;

private int bitArraySize = 100000000;

private int numHashFunc = 6;

public BloomFilter(){

bs = new BitSet(bitArraySize);

}

public void add(E obj){

int[] indexes = getHashIndexes(obj);

for(int index : indexes)

bs.set(index);

}

public boolean contains(E obj){

int[] indexes = getHashIndexes(obj);

for(int index : indexes)

if(bs.get(index) == false)

return false;

return true;

}

public void union(BloomFilter other){

bs.or(other.bs);

}

/*粗略实现,采用MD5散列作为java随机数生成器的种子并取k个随机数作为索引*/

public int[] getHashIndexes(E obj){

int[] indexes = new int[numHashFunc];

long seed = 0;

byte[] digest;

try {

MessageDigest md = MessageDigest.getInstance("MD5");

md.update(obj.toString().getBytes());

digest = md.digest();

for(int i=0;i<6;i++)

seed = seed^(((long)(digest[i] & 0xFF)) << (8*i));

} catch (NoSuchAlgorithmException e) {

e.printStackTrace();

}

Random gen = new Random(seed);

for(int i=0;i<numHashFunc;i++)

indexes[i] = gen.nextInt(bitArraySize);

return indexes;

}

public void write(DataOutput out) throws IOException{

int byteArraySize = (int)(bitArraySize / 8);

byte[] byteArray = new byte[byteArraySize];

for(int i=0;i<byteArraySize;i++){

byte nextElement = 0;

for(int j=0;j<8;j++){

if(bs.get(8*i+j))

nextElement |= 1<<j;

}

byteArray[i] = nextElement;

}

out.write(byteArray);

}

public void readFileds(DataInput in) throws IOException{

int byteArraySize = (int)(bitArraySize / 8);

byte[] byteArray = new byte[byteArraySize];

in.readFully(byteArray);

for(int i=0;i byte nextByte = byteArray[i];
for(int j=0;j if(((int)nextByte & (1 bs.set(8*i+j);
}
}
}
public Map readFile(String filePath){

BufferedReader br;

Map map = new HashMap();

try {

br = new BufferedReader(new InputStreamReader(

new FileInputStream(filePath)));

int i = 0;

for (String line = br.readLine(); line != null; line = br.readLine()) {

map.put(i++, line);

}

br.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

return map;

}

public static void main(String[] args) {

BloomFilter bf = new BloomFilter();

Map map = bf.readFile("C:\Users\zhf\Desktop\test.txt");

for(Map.Entry m : map.entrySet())

bf.add(m.getValue());

boolean flag = bf.contains("15");

System.out.println(flag);

}

}

  • 写回答

1条回答 默认 最新

  • m0_37720339 2017-03-23 09:43
    关注

    主要是Map map = bf.readFile("C:\Users\zhf\Desktop\test.txt")只能提供一个文件目录
    boolean flag = bf.contains("15"); 我试了一下,只能文件内容必须是15,才能显示true
    我需要的是利用bloomfilter 对同一目录下的多个TXT文件的内容进行 关键字检索 ,比如xhxh,有这关键字的文档显示true并且显示该文档的路径

    评论

报告相同问题?

悬赏问题

  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 AT89C51控制8位八段数码管显示时钟。
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测