我对这两种算法的时间复杂度感到困惑。
//time complexity O(nlog(n))
public void usingTreeMap(){
Map<Integer, Integer> map = new TreeMap<Integer, Integer>();
for (int i = 0; i < 10; i++) {
map.put(i, i);
}
}
//time complexity O(n)
public void usingHashMap(){
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int i = 0; i < 10; i++) {
map.put(i, i);
}
}
usingTreeMap算法的时间复杂度正确吗?我知道在treemap中插入时间是log(n ),但是如果我们遍历一个包含10个元素的数组,它会变成nlog(n)吗?
使用TreeMap算法的时间复杂度是否正确。
基本TreeMap
操作的时间复杂性在Javadoc中正确指定。
我知道在树映射中,插入时间是log(n)
正确。
但是如果我们迭代一个10个元素的数组,它会变成nlog(n)。
如果这意味着插入这 10 个元素,则时间复杂度为 M*log(N
),其中 M
是数组的大小,N
是 TreeMap 的大小。
如果不是这个意思,问题就不清楚了。
插入时间复杂度通常是基于每个实例定义的。
平均案例:
最坏的情况:
在上面的代码中,由于您要插入多个项目,因此我们需要区分映射中有多少个元素 (n) 与要添加到映射中的元素数 (m)。如果映射最初是空的,则上面的运行时是正确的。如果它们已经有一些元素,那么运行时将是:
Avg Worst
Insert m elements into HashMap: O(m) O(mn)
Inset m elements into TreeMap: O(mlogn) O(mlogn)
在HashMap的情况下,后备存储是一个数组。当你尝试插入十个元素时,你会得到散列,从散列中计算出特定的数组索引,因为它是后面的一个数组,所以你会注入O(1)。
因此,在HashMap中插入n个元素的总时间=n*O(1)=O(n)
在本例中,后备存储是树。对于总共有 k 个元素的树,平均而言,查找位置的时间是 O(Log k)。
总时间 = 日志 1 日志 2 日志 3 ... 日志 (n-1)
现在,日志1
这意味着插入树图的时间总和为一个值
日志的属性之一是日志a、日志b=Log(ab)
。使用该函数,树映射情况下的插入时间总和为鲜为人知的运行时间值O(Log(n!))。但是,因为,O(Log(n!))在树映射中插入n个元素的时间复杂度松散地写为O(n Log(n))。
我的意图是创建4个Emp对象。2个对象(e1和e2)具有相同的哈希代码。因此,当插入e1(插入在e2之后)时,hashmap会意识到具有相同哈希值的对象已经存在(对象e2)。然后它会将槽中所有对象的键与相同的哈希值进行比较。如果它找到一个具有匹配键的对象(通过调用下面Emp类的equals方法),它将用新值替换旧值。 下面请看一下测试代码: 我期望的输出:替换的记录名称:Terry,年龄:60名称
我主要是想理解在堆中插入一个新元素的大O和Omega背后的原因。我知道我可以在网上找到答案,但我真的喜欢有一个彻底的理解,而不是仅仅在网上找到答案,只是一味地记忆。 例如,如果我们有以下堆(以数组格式表示) 如果我们决定插入一个新元素“4”,那么我们的数组现在将如下所示 它将被放置在索引9中,由于这是第0个基于索引的数组,它的父数组将是索引4,也就是元素5。在这种情况下,我们不需要做任何事情,因为
问题内容: 我当前正在从文本文件中读取200万行,如上一个问题中所述 。Java读取200万行文本文件的最快方法 现在,我将这些信息存储到HashMap中,并希望通过TreeMap对其进行排序,因为我想使用ceilingkey。以下方法正确吗? 问题答案: HashMap hashMap = new HashMap (); TreeMap treeMap = new TreeMap (); tre
问题内容: 我有以下情况: 在我的Query.xml中,我以这种方式编写了插入内容: 阅读mybatis结果地图指南后,我尝试在mybatis-config.xml文件中添加以下行: 但我一直收到以下错误: 谁能告诉我该如何设置? 问题答案: 中的属性需要引用结果映射的名称,而不是Java类型: 但是,如果作为单独的表存储在数据库中,则不支持嵌套插入。您将需要在Java中调用两个插入。Result
我对在LinkedList开头插入元素的时间复杂性感到好奇。我知道LinkedList本身会将现有元素向右移动一个索引,但要做到这一点,它会进行与列表中现有元素一样多的迭代吗? 另外,最好的方式是在开头插入offerFirst吗?
问题内容: 我们习惯说运算是O(1)。但是,这取决于哈希实现。默认对象哈希实际上是JVM堆中的内部地址。我们确定声称 O(1)是否足够好? 可用内存是另一个问题。据我从javadocs理解,应该是0.75。如果我们在JVM中没有足够的内存并且超出限制怎么办? 因此,似乎无法保证O(1)。是有意义还是我想念什么? 问题答案: 这取决于很多事情。这通常是 O(1),一个体面的哈希它本身是固定的时间…但