- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在 java 中有一个作业,我必须使用 Sedgewick 的 Boyer Moore 子串搜索解决方案:http://algs4.cs.princeton.edu/53substring/BoyerMoore.java.html
现在它将在找到单词的第一次出现时停止并返回找到它的位置。所以为了计算单词我将搜索方法更改为:
public String search(String txt) {
int M = pat.length();
int N = txt.length();
int count = 0;
int skip = 0;
int charCount = 0;
for (int i = 0; i <= N - M; i += skip) {
skip = 0;
for (int j = M-1; j >= 0; j--) {
if (pat.charAt(j) != txt.charAt(i+j)) {
skip = Math.max(1, j - right[txt.charAt(i+j)]);
break;
}
charCount++;
}
if (skip == 0)
{
count++;
skip++;
}
}
return "Aantal char: " + charCount + "\n" + count;
}
我更改了 if skip 语句以运行计数器“count”并在最后返回它。发生的情况是,如果我手动给它输入一个模式和一些文本,它似乎就可以了,所以:
模式:测试文本:“此测试是测试测试测试测试”结果:5
但是我需要读取一个包含大约 70k 单词的文本的 txt 文件并进行子字符串搜索:
BufferedReader input = new BufferedReader(new FileReader(System.getProperty("user.home") + "/Desktop/opdr3tekst.txt"));
StringBuilder stringBuilder = new StringBuilder();
while(input.readLine() != null)
{
stringBuilder.append(input.readLine());
}
input.close();
BoyerMoore boyer = new BoyerMoore("pattern to search");
System.out.println(boyer.search(stringBuilder.toString()));
所以当我搜索一个词时,我得到的数字总是比我在 mac 文本编辑器中 CMD+F 文件本身时少很多。知道出了什么问题吗?
最佳答案
您在读取文件时跳过了文件中的行。这是因为这个 while(input.readLine() != null)
。执行此语句时读取的行永远不会添加到 StringBuilder
要解决这个问题,您可以这样做:
for(String line;(line = input.readLine())!=null;){
stringBuilder.append(line);
}
关于java - Boyer-moore 计算单词 java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34681654/
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我了解不良字符启发法的工作原理。当找到不匹配的字母x时,只需移动模式,以使模式中最右边的x与字符串中的x对齐。而且很容易在代码中实现。 我想我也了解后缀启发式的工作原理。当找到合适的后缀s时,请在模式
我一直在尝试了解Boyer-Moore字符串搜索算法中的移位规则,但还不了解它们。我在wikipedia上阅读过,但这太复杂了! 如果有人以简单的方式列出规则,那将有很大的帮助。 最佳答案 在Boye
我在理解 Boyer Moore 字符串搜索算法时遇到问题。 我正在关注以下文档。 Link 我无法弄清楚 delta1 和 delta2 在这里的真正含义是什么,以及他们如何应用它来查找字符串搜索算
我尝试了几个实现,但它们都有错误。 在 SO 搜索给了我 http://www-igm.univ-mlv.fr/~lecroq/string/node14.html - 看起来不错,但这个实现给了我错
我正在尝试使用 2D 数组从 boyer moore 实现错误字符规则以进行子字符串搜索,我遇到了我看到我的 arr[0][1] 与 arr[1][0] 重叠的情况这引起了问题。我试图遍历 VS 中的
我正在尝试在大量文本中实现精确的文本搜索。为此,我找到了一些针对 c# 的 Boyer Moore 实现示例,但现在我无法理解它是如何工作的。 例如,如果我有字符串 this is sample te
我会说是,因为使用了一个右表来确定您必须跳过多少字符。对此有什么想法吗? 最佳答案 Dynamic programming is when you use past knowledge to make
根据我的理解,找到多数元素的 Boyer-Moore 多数表决算法是 O(1),即它是常数,与输入的大小不成比例。那为什么要wiki link提到对数空间 {\displaystyle O(\log
关于此算法中的两个转换规则(坏字符和好后缀),我有些不明白。他们是否一起工作,以及究竟是什么决定了在每种情况下或轮类中部署哪一个。 This综合解释以 SSIMPLE EXAMPLE 的示例结束,这让
在Boyer-Moore string search algorithm wiki 链接,据说 Boyer-Moore 的最坏情况复杂度是 O(m+n) 如果模式没有出现在文本中 O(mn) 如果模式
我不是专业程序员,所以请多多包涵。我正在四处寻找为什么 haystack 和 needle 的初始“对齐”不应该在 needle 的最后一个字符与 haystack 中的相同字符的第一次一致时进行,但
我正在研究 Boyer-Moore 算法(来自 here),我有一个快速的问题 - 第二遍的需要是什么(它基本上只是通过找到该元素的频率来“确认”)。第一个传递本身不是保证找到的元素是多数元素吗?我考
我即将实现 Boyer-Moore 模式匹配算法的变体(具体来说是星期日算法),我问自己:我的字母表大小是多少? 这取决于编码(= 可能的字符数)还是我可以假设我的字母表包含 256 个符号(= 可以
我在项目中大量使用字符串,因此我正在寻找一个快速的库来处理它们。我认为 Boyer-Moore 算法是最好的。 有免费的解决方案吗? 最佳答案 您可以考虑实现 Boyer–Moore 算法的以下资源:
我目前正在试验一个非常简单的 Boyer-Moore 变体。 总的来说,我的实现是有效的,但如果我尝试在循环中使用它,包含干草堆的字符指针就会变得困惑。我的意思是其中的字符被更改或混合。 结果是一致的
我想获得 Boyer-Moore-Horspool 实现来搜索文本文件中的某些字符串。这是我的代码: #include #include #include int bmhSearch(char
我正在用 python 实现 boyer moore 算法,我需要计算一个子串在一个字符串中出现了多少次。 我的字符串存储在一个向量中: string = ['A', 'B', 'B', 'C', '
我一直在研究 Boyer-Moore sting 搜索算法,并从 Shriphani Palakodety 的基本代码集开始,我创建了 2 个附加版本(v2 和 v3)——每个版本都进行了一些修改,例
我是一名优秀的程序员,十分优秀!