Java 爪哇霍纳';s多项式累加法

Java 爪哇霍纳';s多项式累加法,java,hashcode,hashset,polynomial-math,Java,Hashcode,Hashset,Polynomial Math,到目前为止,我已经有了这段代码,总之,它在cmd中获取了两个文本文件和一个指定的块大小,并标准化了txt文件,然后根据指定的块大小将它们放入块中 import java.io.*; import java.util.*; public class Plagiarism { public static void main(String[] args) throws Exception { //you are not using 'myPlag' anywhere, yo

到目前为止,我已经有了这段代码,总之,它在cmd中获取了两个文本文件和一个指定的块大小,并标准化了txt文件,然后根据指定的块大小将它们放入块中

import java.io.*;
import java.util.*;

public class Plagiarism {

    public static void main(String[] args) throws Exception {
        //you are not using 'myPlag' anywhere, you can safely remove it
//      Plagiarism myPlag = new Plagiarism();

        if (args.length == 0) {
            System.out.println("Error: No files input");
            System.exit(0);
        }

        String foo = null;
        for (int i = 0; i < 2; i++) {
            BufferedReader reader = new BufferedReader(new FileReader(args[i]));
            foo = simplify(reader);
            // System.out.print(foo);
            int blockSize = Integer.valueOf(args[2]);

            List<String> list = new ArrayList<String>();
            for (int k = 0; k < foo.length() - blockSize + 1; k++) {
                list.add(foo.substring(k, k + blockSize));
            }
            // System.out.print(list);
        }



    }

    public static String simplify(BufferedReader input)
            throws IOException {

        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = input.readLine()) != null) {
            sb.append(line.replaceAll("[^a-zA-Z]", "").toLowerCase());
        }
        return sb.toString();
    }
}
import java.io.*;
导入java.util.*;
公开课剽窃{
公共静态void main(字符串[]args)引发异常{
//您没有在任何地方使用“myPlag”,您可以安全地将其删除
//剽窃myPlag=新剽窃();
如果(args.length==0){
System.out.println(“错误:没有文件输入”);
系统出口(0);
}
字符串foo=null;
对于(int i=0;i<2;i++){
BufferedReader=newbufferedReader(newfilereader(args[i]);
foo=简化(读取器);
//系统输出打印(foo);
int blockSize=Integer.valueOf(args[2]);
列表=新的ArrayList();
对于(int k=0;k
接下来我要做的是使用Horner的多项式累加方法(设置值x=33)将这些块中的每个块转换为哈希代码。我完全被这件事难住了,希望你们能给我一些帮助


感谢阅读,并提前感谢您提供的任何建议

霍纳的散列生成方法非常简单

int hash=0;
for(int i=0;i<str.length();i++)
  hash = x*hash + str.charAt(i);
int hash=0;

对于(int i=0;iIs不是Horner的关于-通常是-数字的方法?您只有字符串。您计划如何实现该方法?@GáborBakos这是重点-我必须使用此方法将这些字符串块转换为哈希代码:)我认为Horner方法的结果将是另一个字符串,虽然字符串通常不被认为是哈希代码。我想这是我困惑的根源。你能详细说明一下吗?有可能把它和我的例子联系起来吗?我的字符串块存储在名为“list”的ArrayList中。所以for循环必须迭代所有元素,我想?你应该知道。根据您的应用程序,您可以在每个字符串之间重置
哈希值
。但是,这个函数不适合对很长的字符串进行散列,因为第一个字符的影响最终会从整数溢出。我理解:我必须使用模p来解决这个问题。另外,因为我使用ArrayList charAt()不适用于此。ArrayList的方法是什么?你能用ArrayList做个例子吗?谢谢你的回答,但这不是我需要帮助的。该代码int x=33;int hash=0;for(int o=0;ofor(字符串str:list){for(inti=0;i