From f4db54e69dd3501ba443f067fca6226cbebbd6ca Mon Sep 17 00:00:00 2001 From: wizardforcel <562826179@qq.com> Date: Thu, 21 Sep 2017 17:54:12 +0800 Subject: [PATCH] ch11 --- 11.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/11.md b/11.md index 5cc39e7..0b88c45 100644 --- a/11.md +++ b/11.md @@ -17,7 +17,7 @@ 如果每个子映射的条目数是不变的,我们可以在常数时间内搜索一个子映射。并且计算散列函数通常是常数时间(它可能取决于键的大小,但不取决于键的数量)。这使得`Map`的核心方法, `put`和`get`时间不变。 -在下一个练习中,您将看到细节。 +在下一个练习中,你将看到细节。 ## 11.1 练习 9 @@ -50,7 +50,7 @@ public class MyHashMap extends MyBetterMap implements Map { 运行`ant build`来编译源文件。然后运行`ant MyHashMapTest`。它应该失败,因为执行`rehash`会抛出异常。你的工作是填充它。 -填充`rehash`的主体,来收集表中的条目,调整表的大小,然后重新放入条目。我提供了两种可能会派上用场的方法:`MyBetterMap.makeMaps`和`MyLinearMap.getEntries`。每次调用它时,您的解决方案应该使映射数量加倍。 +填充`rehash`的主体,来收集表中的条目,调整表的大小,然后重新放入条目。我提供了两种可能会派上用场的方法:`MyBetterMap.makeMaps`和`MyLinearMap.getEntries`。每次调用它时,你的解决方案应该使映射数量加倍。 ## 11.2 分析`MyHashMap` @@ -129,12 +129,12 @@ public class MyHashMap extends MyBetterMap implements Map { 运行`ant build`来编译源文件。然后运行`ant ProfileMapPut`。它使用一系列问题规模,测量 `HashMap.put`(由 Java 提供)的运行时间,并在重对数比例尺上绘制运行时间与问题规模。如果这个操作是常数时间,`n`个操作的总时间应该是线性的,所以结果应该是斜率为`1`的直线。当我运行这个代码时,估计的斜率接近`1`,这与我们的分析一致。你应该得到类似的东西。 -修改`ProfileMapPut.java`,来测量您的`MyHashMap`实现,而不是 Java 的`HashMap`。再次运行分析器,查看斜率是否接近`1`。您可能需要调整`startN`和`endMillis`,来找到一系列问题规模,其中运行时间多于几毫秒,但不超过几秒。 +修改`ProfileMapPut.java`,来测量你的`MyHashMap`实现,而不是 Java 的`HashMap`。再次运行分析器,查看斜率是否接近`1`。你可能需要调整`startN`和`endMillis`,来找到一系列问题规模,其中运行时间多于几毫秒,但不超过几秒。 当我运行这个代码时,我感到惊讶:斜率大约为`1.7`,这表明这个实现不是一直都是常数的。它包含一个“性能错误”。 -在阅读下一节之前,您应该跟踪错误,修复错误,并确认现在`put`是常数时间,符合预期。 +在阅读下一节之前,你应该跟踪错误,修复错误,并确认现在`put`是常数时间,符合预期。 ## 11.5 修复`MyHashMap` -- GitLab