- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试使用此处提到的 Java 基准测试: https://www.ibm.com/developerworks/java/library/j-benchmark2/可以在这里下载: http://www.ellipticgroup.com/html/benchmarkingArticle.html
我尝试使用上面文章中的基本示例:
import bb.util.Benchmark;
public class ShortIndexesLoop {
public static void main(String[] args) throws Exception {
Callable<Integer> task =
new Callable<Integer>() { public Integer call() { return fibonacci(35); } };
System.out.println("fibonacci(35): " + new Benchmark(task));
}
protected static int fibonacci(int n) throws IllegalArgumentException {
if (n < 0) throw new IllegalArgumentException("n = " + n + " < 0");
if (n <= 1) return n;
return fibonacci(n - 1) + fibonacci(n - 2);
}
}
但是这个基准测试的每次执行都在运行基准测试之前以异常开始
2015 年 6 月 13 日下午 1:45:37 StringUtil警告:String 的行为不符合预期;查看原因
java.lang.Exception: substring does NOT share the same underlying char[] with its parent String
at bb.util.StringUtil.inspectStringConstructor(StringUtil.java:84)
at bb.util.StringUtil.<clinit>(StringUtil.java:75)
at bb.io.ConsoleUtil.<clinit>(ConsoleUtil.java:81)
at bb.util.Benchmark.sendUserMsg(Benchmark.java:1002)
at bb.util.Benchmark.osSpecificPreparation(Benchmark.java:579)
at bb.util.Benchmark.perform(Benchmark.java:541)
at bb.util.Benchmark.<init>(Benchmark.java:464)
at bb.util.Benchmark.<init>(Benchmark.java:439)
at ShortIndexesLoop.main(fib.java:13)
似乎对基准测试的任何调用最终都会使用 StringUtil 中的以下方法
private static final boolean stringContructorTrimsGarbage = inspectStringConstructor();
private static boolean inspectStringConstructor() {
try {
// first prove that substring shares the same underlying char[] as the parent String:
String s1 = "abc123def";
String s2 = s1.substring(3, 6);
char[] value1 = (char[]) ReflectUtil.get(s1, "value");
char[] value2 = (char[]) ReflectUtil.get(s2, "value");
if (value1 != value2) throw new Exception("substring does NOT share the same underlying char[] with its parent String");
if (value2.length != s1.length()) throw new Exception("value2.length = " + value2.length + " != s1.length() = " + s1.length());
// second prove that the String(String) constructor trims garbage chars:
String s3 = new String(s2);
char[] value3 = (char[]) ReflectUtil.get(s3, "value");
if (value3 == value2) throw new Exception("new String shares the same underlying char[] with its String arg");
if (!(value3.length < value2.length)) throw new Exception("value3.length = " + value3.length + " is not < value2.length = " + value2.length);
return true;
}
catch (Exception e) {
LogUtil.getLogger2().logp(Level.WARNING, "StringUtil", "<clinit>", "String does not behave as expected; see cause", e);
return false;
}
}
我真的不介意异常,因为基准库确实给出了结果。但是,尝试将此代码编译为 jar 并将其作为 jar 运行是一个问题。由于异常,其余代码将不会在终端中执行
有人知道如何解决这个问题吗?
最佳答案
我知道这是一个老问题,但也许我的解决方案对其他人也有用:在这个基准框架的 StringUtil
类的源代码中,记录了为什么要进行此检查.基于此,如果您有一个 JDK,其中 substring
创建底层 char 数组相关部分的副本,您可以简单地注释 stringContructorTrimsGarbage
标志,并在 newString
方法,你只需返回 s。
关于Ellipticgroup/Brent Boyer 的 Java 基准测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30821746/
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,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)——每个版本都进行了一些修改,例
我是一名优秀的程序员,十分优秀!