对于要实现提交历史的作业,它要求我为每种方法使用数据结构,并且它需要比O(n)更好。所以我使用了嵌套的hash-map(地图图),
HashMap<String, TreeMap<Object, Object>>()
因为,以下方法需要少于O(n):
getBestGrade:在O(1)中查找学生的所有提交,然后在O(N)中找到最佳提交(可以通过缓存最佳分数来改进)。
getSubmissionFinal:在O(1)中查找学生的所有提交,然后在O(1)中找到最后一个
getSubmissionBefore:在O(1)中查找学生的所有提交,然后在O(1)中找到结果
add:在O(1)中为学生查找或添加提交,然后在O(log(N))中添加提交(如果实现缓存,则应在此处更新缓存)
在O(1)中删除查找或添加学生的提交,然后删除O中的提交(log(N))(如果实现缓存,则应在此处更新缓存)
然而,我所关心的是,有人告诉我,最糟糕的情况是O(n)因此不应该使用,另一方面,老师说,它确实需要O(n)然而,在最坏的情况下,使用预期的情况O(1)进行分析通常更为明智。当使用带有树形图的嵌套哈希映射时,需要在报告中简要说明这一点。
所以,到目前为止我所知道的是,它的最坏情况是O(n)但是可能性很小,因为哈希映射的大小也在当前的Java实现中增长(我甚至不确定它...)
主要问题是,为什么对预期案例更为明智,而不是最坏情况?
我没有足够的信息来解释为什么上面的嵌套哈希映射比上面提到的方法的O(n)更好。我搜索了它但找不到我要找的结果......如果有人可以摆脱我对我的问题的困惑,我会非常感激...谢谢。
答案 0 :(得分:0)
然而,我所关心的是,有人告诉我,最糟糕的情况是O(n)因此不应该使用
他错了。
另一方面,老师说,在最坏的情况下确实需要O(n),但是,使用预期的情况O(1)进行分析通常更为明智。
他是对的。将哈希映射视为 O(1)是常规的。 O(N)情况很少出现,将其包含在广义计算复杂度中是不现实的。
当使用带有树形图的嵌套哈希图时,需要在报告中简要说明这一点。
如果他已经告诉过你,那就不是了。你已经受到如此指示了。你可以假设它。其他人都这样做。您需要显示的是嵌套的哈希映射是 O(1),因为 O(1)的平方仍然是 O(1),并且hashmap / treemap的情况是 O(log(N)),因为 O(1)乘以 O(log(N))仍然是 O(日志(N))