Tag: 时间复杂度

Arrays.sort()会增加时间复杂度和时空复杂度吗?

存在与arrays相关的问题,要求时间复杂度为O(n)且空间复杂度为O(1)。 如果我使用Arrays.sort(arr) ,并使用for循环到一个传递循环,例如: public static int hello(int[]A){ Arrays.sort(A); for(int i=0;i<A.length;i++){ ……………….. } return ….; } 因此循环将花费O(n)时间。 我的问题是: Arrays.sort()花费更多时间吗? 如果我使用Arrays.sort() ,这次复杂性仍然是O(n)吗? 并且Arrays.sort()花费更多空间吗?

Java编程:楼梯动态编程示例

一个人正在爬楼梯,有n个台阶,可以一次走1步,2步或3步。 现在编写一个程序来计算孩子跑楼梯的可能方式。 给出的代码如下 public static int countDP(int n, int[] map) { if (n-1) return map[n]; else { map[n] = countDP(n-1, map) + countDP(n-2, map) + countDP(n-3, map); return map[n]; } } 我知道C和C ++,而不是JAVA。 这是来自Cracking the Coding的采访书。 任何人都可以解释一下 为什么以及如何在这里使用function图? 这里的地图是arrays吗? 我没有看到任何行保存输入到地图数组,但它会如何返回一些东西? 有人知道这段代码的C ++或C版本吗? 很难理解这段代码。 也许不是因为JAVA语法,而是动态编程的隐式结构。 这个算法的时间复杂度是多少? 它应该小于O(3 ^ n)? 我将不胜感激。 多谢你们

Java中的哈希 – 结构和访问时间

我正在寻找关于两个不同但相关的论点的validation – 上面的(A)和下面的(B)第一行 – 在Q中的注释。 (A) HashMap的结构方式是: HashMap是一个普通表。 这就是直接内存访问(DMA)。 HashMap (或一般哈希)背后的整个想法是使用这个恒定时间内存访问 a。)通过自己的数据内容()访问记录,而不是通过它们在DMA中的位置(表索引) b。)管理可变数量的记录 – 许多不具有给定大小的记录,并且在整个使用该结构时可以/不保持大小不变​​。 因此,Java Hash中的整体结构是: 表: 表 //我正在使用HashMap中使用的标识符 该表的每个单元格都是一个桶 。 每个存储桶都是Entry类型的链接列表 – 即,此链接列表的每个节点(不是Java / API的链接列表,但数据结构)属于Entry类型,而Entry类型又是对。 当新对添加到散列中时,将为此对计算唯一的hashCode 。 这个hashCode是表中 索引的关键 – 它告诉这个哪个桶将进入哈希。 注意: hashCode通过函数hash() (在HashMap中为一个)进行“规范化”,以更好地拟合表的当前长度。 indexFor()也用于确定哪个桶,即表的单元格将进入。 确定存储桶后,将添加到此存储桶中链接列表的开头 – 因此,它是此存储桶中的第一个条目以及链接的第一个条目-list-已经存在的现在是这个新添加的“下一个”条目。 // ================================================ =============== (B)从我在HashMap中看到的,调整表的大小 – 哈希仅在基于散列大小和容量(即当前和最大)的决策时完成。 整个哈希中的#个条目。 没有对单个存储桶大小进行重新构造或resize – 例如当存储桶中的最大条目数超过此类时,“resize()”。 这可能是不可能的,但是有可能在桶中大量填充大量条目,而散列的其余部分几乎是空的。 如果是这种情况,即每个桶的大小没有上限,则散列不是常数而是线性访问 – 理论上是一件事。 获取哈希条目需要$ […]

如何增强for-loop?

我一个接一个地迭代String对象列表的元素: LinkedList list; // add values to the list here for (int i = 0; i < list.size(); i++) System.out.println(list.get(i)); 在这里,每次我在列表上调用get()时,列表从其一端一直迭代到第i个元素 – 因此上述循环的复杂度为O(n ^ 2)。 是一个。)与上面的增强型for循环相同,或者b。)是for循环保持指针的最后位置,因此下面循环的复杂性是O(n)? for (String s:list) System.out.println(s); 如果上面的情况(b) – 我认为是 – 在列表中使用迭代器是否有任何优势。 这是一个简单的迭代 – 没有来回。 编辑:..我的列表操作是只读的。 TIA。

预期的最大数量

我有算法,它以数组作为参数,并返回其最大值。 find_max(as) := max = as[0] for i = 1 … len(as) { if max < as[i] then max = as[i] } return max 我的问题是:假设数组最初处于(统一)随机排列并且其所有元素都是不同的,那么max变量的预期次数是多少(忽略初始赋值)。 例如,如果as = [1, 3, 2] ,那么max的更新次数将为1(当读取值3时)。

arrays访问复杂性

在Java中,我需要在代码中多次访问array1[index] 。 即使对于超大型arrays,我是否可以假设每个单一arrays访问需要恒定时间? 这在语言或底层架构之间有区别吗?

Java Math.pow(a,b)时间复杂度

我想问下面代码的时间复杂度。 是O(n)? (Math.pow()的时间复杂度是否为O(1)?)一般来说,Math.pow(a,b)是否具有时间复杂度O(b)或O(1)? 提前致谢。 public void foo(int[] ar) { int n = ar.length; int sum = 0; for(int i = 0; i < n; ++i) { sum += Math.pow(10,ar[i]); } }

什么是时间复杂性以及如何找到它?

我已经阅读了这么多资源,仍然坚持理解时间复杂性。 我读过的资源基于各种公式,我知道O(n)用于表示时间复杂度,但我不知道如何。 请有人以一种可以理解的明确方式向我解释这个原则。

Java数据结构参考

任何人都可以给我一个网站的引用,其中包含主要Java数据结构的摘要,以及它们各自的复杂性(对于某些给定的操作,如添加,查找,删除),例如Hashtable是O(1)用于查找,而LinkedList是O(n)。 像内存使用这样的一些细节也会很好。 这对于在算法的数据结构中进行思考非常有用。

java.util.stream.Stream的大O复杂性 .sorted()

有谁知道java.util.stream.Stream.sorted()的时间复杂度是多少?