Questions tagged «big-o»

Big-O表示法用于表示渐近上限。它描述了算法的相关时间或空间复杂度。Big-O分析提供了问题难度的粗略且简化的估计。


26
有没有比Bogosort(aka Monkey Sort)更糟糕的排序算法?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 改善这个问题 我的同事带我回到了大学时代,今天早上讨论了排序算法。我们回想起了我们最喜欢的StupidSort,例如其中之一,我们确定我们看到了一种排序算法,该算法是O(n!)。那使我开始寻找可以找到的“最差”的排序算法。 我们假设,一个完全随机排序将是非常糟糕的(即随机化的元素- ?是为了不随机化再次),我环顾四周,发现了它显然称BOGO排序,或猴排序,或者有时只是随机排序。 Monkey Sort似乎具有的最差情况性能O(∞),的最佳情况性能O(n)和平均性能O(n·n!)。 目前平均可接受的排序性能最差的排序算法是什么(并且蜂声比差O(n·n!))?
178 algorithm  sorting  big-o 

30
O(nlogn)算法-在二进制字符串中找到三个均匀间隔的算法
昨天我在算法测试中遇到了这个问题,但找不到答案。这绝对让我发疯,因为它价值40分。我认为大多数班级都无法正确解决该问题,因为在过去的24小时内我没有提出解决方案。 给定任意一个长度为n的二进制字符串,请在该字符串中找到三个均等的字符串(如果存在)。编写一个算法,可以在O(n * log(n))时间内解决此问题。 因此,这样的字符串具有三个“等间距”的字符串:11100000,0100100100 编辑:这是一个随机数,因此它应该可以处理任何数字。我提供的示例旨在说明“均匀分布”的属性。因此1001011是有效数字。其中1、4和7是等距排列的。
173 algorithm  big-o 

4
Java Collections Framework实现的Big-O摘要?[关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow 的主题。 3年前关闭。 改善这个问题 我可能很快就会教“ Java速成课程”。尽管可以很安全地假定听众成员将知道Big-O表示法,但是假设他们将知道各种集合实现上的各种操作的顺序可能是不安全的。 我可能会花一些时间自己生成一个摘要矩阵,但是如果它已经存在于公共领域中的某个地方,我肯定会重用它(当然要有适当的信誉)。 有人有指针吗?
164 java  collections  big-o 

30
如何将两个排序数组合并为一个排序数组?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 2年前关闭。 改善这个问题 这是在采访中问我的,这是我提供的解决方案: public static int[] merge(int[] a, int[] b) { int[] answer = new int[a.length + b.length]; int i = 0, j = 0, k = 0; while (i < a.length && j < b.length) { if (a[i] < b[j]) { answer[k] = a[i]; i++; } else …

3
标准容器的复杂性保证是什么?
显然;-)标准容器提供某种形式的保证。 哪种类型的担保以及不同类型的容器之间到底有什么区别? 从工作的SGI页(约STL)我拿出这样的: Container Types: ================ Container: Forward Container Reverse Container Random Access Container Sequence Front Insert Sequence Back Insert Sequence Associative Container Simple Associative Container Pair Associative Container Sorted Associative Container Multiple Associative Container Container Types mapped to Standard Containers ============================================= std::vector: Sequence Back Sequence Forward/Reverse/Random Container std::deque: Sequence …
160 c++  stl  containers  big-o 

15
Java哈希图真的是O(1)吗?
我已经看到了一些关于Java哈希图及其O(1)查找时间的有趣声明。有人可以解释为什么会这样吗?除非这些哈希图与我购买的任何哈希算法有很大不同,否则必须始终存在包含冲突的数据集。 在这种情况下,查找将O(n)不是O(1)。 有人可以解释他们是否为 O(1),如果是,他们如何实现这一目标?

16
“ O(1)访问时间”是什么意思?
我已经看到过这个术语“ O(1)访问时间”曾经表示“快速”,但是我不明白它的含义。我在同一上下文中看到的另一个术语是“ O(n)访问时间”。有人可以用简单的方式解释这些术语的含义吗? 也可以看看 什么是Big O符号?你用吗? 大八岁的孩子?
126 big-o 

19
最大单笔销售利润
假设我们得到了一个由n个整数组成的数组,它们表示一天中的股票价格。我们希望找到一对(buyDay,sellDay) ,与buyDay≤sellDay,例如,如果我们买了股票buyDay卖了上sellDay,我们将最大限度地提高我们的利润。 显然,有一个O(n 2)解决方案,可以尝试所有可能的对(buyDay,sellDay),并从所有对中获取最好的对。但是,是否有更好的算法,也许可以在O(n)时间内运行?

15
从技术上讲,这是“ Hello World”的O(1)算法吗?
将其归类为“ Hello,World!”的O(1)算法吗??? public class Hello1 { public static void Main() { DateTime TwentyYearsLater = new DateTime(2035,01,01); while ( DateTime.Now < TwentyYearsLater ) { System.Console.WriteLine("It's still not time to print the hello ..."); } System.Console.WriteLine("Hello, World!"); } } 我正在考虑使用 DateTime TwentyYearsLater = new DateTime(2035,01,01); while ( DateTime.Now < TwentyYearsLater ) { …
117 c#  .net  algorithm  big-o 

8
哈希表真的可以是O(1)吗?
哈希表可以实现O(1)似乎是常识,但是这对我来说从来没有任何意义。有人可以解释一下吗?这是两种情况: 答: 该值是一个小于哈希表大小的整数。因此,该值是其自己的哈希,因此没有哈希表。但是,如果有的话,它将是O(1),但效率仍然很低。 B. 您必须计算值的哈希值。在这种情况下,对于要查找的数据大小,顺序为O(n)。在您完成O(n)工作后,查找可能是O(1),但在我眼里仍然是O(n)。 而且,除非您拥有完美的哈希表或大型哈希表,否则每个存储桶中可能有几项。因此,无论如何它会演变成小的线性搜索。 我认为哈希表很棒,但除非得到理论上的支持,否则我不会获得O(1)的名称。 Wikipedia的有关哈希表的文章始终引用恒定的查找时间,并且完全忽略了哈希函数的成本。这真的是公平的措施吗? 编辑:总结一下我学到的东西: 从技术上讲,这是正确的,因为不需要散列函数使用键中的所有信息,因此可以是恒定时间,并且因为足够大的表可以使冲突降低到接近恒定时间。 在实践中确实如此,因为随着时间的推移,只要选择哈希函数和表大小以最大程度地减少冲突,就可以解决问题,尽管这通常意味着不使用恒定时间哈希函数。

6
什么会导致算法具有O(log n)复杂度?
我对big-O的知识是有限的,当对数项出现在等式中时,甚至会使我失望得多。 有人可以简单地向我解释什么是O(log n)算法吗?对数从何而来? 当我尝试解决这个期中练习问题时,特别是这样: 令X(1..n)和Y(1..n)包含两个整数列表,每个列表以非降序排列。给出O(log n)时间算法以查找所有2n个组合元素的中值(或第n个最小整数)。例如,X =(4、5、7、8、9),Y =(3、5、8、9、10),则7是合并列表的中位数(3、4、5、5、7 ,8、8、9、9、10)。[提示:使用二进制搜索的概念]

2
JavaScript数组的大O
JavaScript中的数组很容易通过添加和删除项来进行修改。它在某种程度上掩盖了一个事实,即大多数语言数组都是固定大小的,并且需要复杂的操作来调整大小。看起来,JavaScript使编写性能不佳的数组代码变得容易。这导致了一个问题: 对于数组性能,我可以从JavaScript实现中获得什么样的性能(就O时间复杂度而言)? 我假设所有合理的JavaScript实现最多都具有以下大O。 存取权-O(1) 追加-O(n) 前置-O(n) 插入-O(n) 删除-O(n) 交换-O(1) JavaScript使您可以使用以下命令将数组预填充为特定大小 new Array(length)语法。(奖金问题:是以O(1)或O(n)的方式创建数组)这更像是常规数组,并且如果用作预大小数组,则可以允许添加O(1)。如果添加了循环缓冲区逻辑,则可以实现O(1)前置。如果使用动态扩展数组,则O(log n)将是这两种情况的平均情况。 我可以期望某些事情比我的假设有更好的性能吗?我不希望任何规范概述任何内容,但实际上,可能是所有主要实现都在幕后使用了优化的数组。是否在工作中动态扩展数组或其他一些提高性能的算法? 聚苯乙烯 我想知道这是因为我正在研究一些排序算法,当描述它们的整体大O时,大多数似乎都假定追加和删除是O(1)运算。

14
为什么要在链表O(1)的中间插入?
根据Wikipedia关于链表的文章,在链表的中间插入被视为O(1)。我认为这将是O(n)。您是否不需要定位列表末尾附近的节点? 这种分析是否不考虑发现节点操作(尽管是必需的),而仅考虑插入本身? 编辑: 链接列表比数组具有多个优势。在列表的特定点插入元素是一项固定时间的操作,而在数组中插入则可能需要移动一半或更多的元素。 上面的陈述对我有些误导。如果我错了,请纠正我,但我认为结论应该是: 数组: 查找插入/删除点O(1) 执行插入/删除O(n) 链接列表: 找出插入/删除点O(n) 执行插入/删除O(1) 我认为,您唯一不需要找到位置的就是保持某种指针(在某些情况下为头和尾)。因此,我们不能断然地说,链表总是在插入/删除选项中击败数组。
105 linked-list  big-o 


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.