开始研究复杂性,我正在努力这个: void what(int n) { int i; for (i = 1; i <= n; i++) { int x = n; while (x > 0) x -= i; } } 那么,第一个for循环显然是O(n) 。 第一个迭代是O(n) ,第二个是O(n/2) ..就像log(n)次我猜? 这意味着O(n) * O(log(n)) = O(n * log(n)) complexity 。 我有这个对吗? 编辑:(不是重复的)我知道什么大O。 我已经在特定的情况下提出了正确的评估。
BFS的基本algorithm: set start vertex to visited load it into queue while queue not empty for each edge incident to vertex if its not visited load into queue mark vertex 所以我会认为时间的复杂性是: v1 + (incident edges) + v2 + (incident edges) + …. + vn + (incident edges) 其中v是顶点1到n 首先,我所说的是正确的? 其次,这个O(N + E)和直觉为什么会非常好。 谢谢
我在考虑用软件sortingalgorithm,以及可能的方法是克服O(nlogn)障碍。 我不认为从实际意义上可以更快地sorting,所以请不要以为我这样做。 这样说,似乎几乎所有的sortingalgorithm,软件必须知道每个元素的位置。 这是有道理的,否则,它将如何知道根据一些sorting标准来放置每个元素的位置? 但是当我把这个想法与现实世界交织在一起的时候,离心机根本不知道每个分子在密度分类时的位置。 事实上,它并不关心每个分子的位置。 然而,由于每个分子都遵循密度和引力定律,所以它可以在相当短的时间内将数万亿分之一的物质分类,这让我想到了这一点。 是否有可能在每个节点上有一些开销(某些值或方法加到每个节点上)来“强制”列表的顺序? 像离心机一样,只有每个元素都关心它在空间中的相对位置(相对于其他节点)。 或者,这是否违反了计算中的一些规则? 我认为这里提出的一个重点是自然界的量子力学效应,以及它们如何同时应用于所有粒子。 也许古典计算机本质上限制sorting到O(nlogn)的领域,在这个领域,量子计算机可能能够跨越这个阈值成为并行运算的O(logn)algorithm。 离心机基本上是一个平行气泡sorting的观点似乎是正确的,其具有O(n)的时间复杂度。 我想下一个想法是,如果大自然可以sorting在O(n) ,为什么不能电脑?
假设我们在一天内得到一个n个整数代表股票价格。 我们希望find一个(buyDay,sellDay) , buyDay≤sellDay ,这样如果我们在buyDay买入股票并在卖出date卖出 ,我们将最大化我们的利润。 很明显,通过尝试所有可能的(buyDay,sellDay)对,并从所有这些对中最好地解决algorithm的O(n 2 )解决scheme。 然而,有没有更好的algorithm,也许是一个运行在O(n)时间?
是否有任何情况下你会更喜欢O(log n)时间复杂度到O(1)时间复杂度? 或者O(n)到O(log n) ? 你有什么例子吗?
为什么我在哈希表上看到这些函数的不同运行时复杂性? 在维基上,search和删除是O(n)(我认为哈希表的重点是有恒定的查找,所以如果search是O(n),有什么意义)。 在某些课程笔记中,我看到了一些复杂性,取决于某些细节,包括所有的O(1)。 为什么如果我能得到所有的O(1),还有其他的实现呢? 如果我在像C ++或Java这样的语言中使用标准哈希表,我可以期望时间复杂度是多less?
以下是我正在尝试实施的解决scheme /** * Definition for a point. * class Point { * int x; * int y; * Point() { x = 0; y = 0; } * Point(int a, int b) { x = a; y = b; } * } */ public class Solution { public int maxPoints(Point[] points) { int max=0; if(points.length==1) […]
给定一个在[0..n ^ 3-1]范围内的n个整数的input集合,提供一个线性时间sortingalgorithm。 这是我在星期四对testing的评论,我不知道如何解决这个问题。
使用new,malloc等dynamic内存分配的时间复杂度是多less? 我对于如何实现内存分配器知之甚less,但我认为答案在于实现。 因此,请回答一些更常见的情况/实施。 编辑:我依稀记得在最坏的情况下堆分配是无限的,但我真正感兴趣的平均/典型的情况。
我很难判断Euclid的最大公分母algorithm的时间复杂度是多less。 这个伪码的algorithm是: function gcd(a, b) while b ≠ 0 t := b b := a mod b a := t return a 这似乎取决于a和b 。 我的想法是时间复杂度是O(a%b)。 那是对的吗? 有没有更好的方式来写这个?