【问题标题】:Java Horner's polynomial accumulation methodJava Horner的多项式累加法
【发布时间】:2014-03-14 12:39:16
【问题描述】:

到目前为止,我有这段代码,总而言之,它在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();
    }
}

接下来我想做的是使用霍纳的多项式累加法(设置值 x = 33)将这些块中的每一个转换为哈希码。我完全被难住了,希望你们能提供一些帮助!

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

【问题讨论】:

  • 霍纳的方法不是关于-通常-数字吗?你只有字符串。您打算如何实施该方法?
  • @GáborBakos 这就是重点 - 我必须使用这种方法将这些字符串块转换为哈希码 :)
  • 我认为Horner 方法的结果会是另一个字符串,尽管字符串通常不被认为是哈希码。我想这是我困惑的根源。

标签: java hashcode hashset polynomial-math


【解决方案1】:

Horner 的哈希生成方法很简单

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

【讨论】:

  • 你能扩展一下吗?是否可以将其与我的示例联系起来?我的字符串块存储在称为“列表”的 ArrayList 中。所以 for 循环将不得不遍历我猜的所有元素?
  • 你应该知道的。您可以在每个字符串之间重置hash,具体取决于您的应用程序。但是这个函数不适合散列很长的字符串,因为第一个字符的影响最终会从整数溢出。
  • 我明白:我必须使用模 p 来解决这个问题。也因为我使用 ArrayList charAt() 对此不起作用。 ArrayList 的方法是什么?你能用 ArrayList 做一个例子吗?
  • 感谢您的回答,但这不是我需要帮助的。此代码 int x = 33;整数哈希 = 0; for (int o = 0; o
  • 是的。 for (String str: list) { for (int i=0;i&lt;str.length();i++) hash=33*hash+str.charAt(i); }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-23
相关资源
最近更新 更多