在Python中, in关键字的效率如何: a = [1, 2, 3] if 4 in a: …
查找操作或contains单个可以在最坏的情况下O(n)权利? 那么,对于n元素,在hashSet中hashSet将是O(n^2) ?
大多数元素是发生超过数组大小的一半的元素。 如何在O(n)find数组中的多数元素? 示例input: {2,1,2,3,4,2,1,2,2} 预期产出: 2
我需要知道:java中HashMap.containsKey()的时间复杂度是多less?
我正在研究一个数据结构课程,我不确定如何进行这个大O分析: sum = 0; for(i = 1; i < n; i++) for(j = 1; j < i*i; j++) if(j % i == 0) for(k = 0; k < j; k++) sum++; 我最初的想法是,这是减less后的O(n ^ 3),因为最里面的循环只会在j / i没有余数时运行,而乘法规则不适用。 我的推理在这里是正确的吗?
我正在通过“破解编码采访”一书的工作,我在这里遇到问题要求答案,但我需要帮助比较我的答案和解决scheme。 我的algorithm可行,但我很难理解本书中的解决scheme。 主要是因为我不明白一些运营商在做什么。 任务是:“实现一个algorithm来确定一个string是否具有所有唯一的字符,如果不能使用额外的数据结构怎么办? 这是我的解决scheme: public static boolean checkForUnique(String str){ boolean containsUnique = false; for(char c : str.toCharArray()){ if(str.indexOf(c) == str.lastIndexOf(c)){ containsUnique = true; } else { containsUnique = false; } } return containsUnique; } 它有效,但这有多高效? 我看到Java中的String的索引函数的复杂性是O(n * m) 以下是本书的解决scheme: public static boolean isUniqueChars(String str) { if (str.length() > 256) { return false; } int […]
是否有一个广泛使用的algorithm的时间复杂性比另一个已知的algorithm更差 ,但是在所有的实际情况下它是一个更好的select(复杂度更高但是更好 )。 可接受的答案可能是一种forms: 有algorithmA和B地具有O(N**2)和O(N)时间复杂度,但是B具有如此大的常数,以至于对于input小于宇宙中的primefaces数量,它不具有A优点。 答案中的例子突出显示: 单纯形algorithm – 对于凸优化问题,最坏情况是指数时间 – 已知多项式时间algorithm。 中值algorithm的朴素中位数 – 最坏情况O(N ** 2) 与已知的O(N)algorithm。 回溯正则expression式引擎 – 最坏情况下的指数与 O(N)Thompson NFA引擎。 所有这些例子都是利用最坏情况与平均情况。 是否有例子不依赖于最坏情况与平均情况之间的差异? 有关: “更坏更好”的崛起 。 (为了这个问题的目的,“更糟糕更好”这个短语的使用范围比文章更窄 (即algorithm时间复杂度) Python的devise理念 : ABC集团追求完美。 例如,他们使用基于树的数据结构algorithm,这些algorithm被certificate对于渐进式大集合是最优的(但对于小集合来说并不是那么好)。 如果没有能够存储这些大集合的计算机(换句话说,在这种情况下大不够大),这个例子将是答案。 方matrix乘法的Coppersmith-Winogradalgorithm是一个很好的例子(它是最快的(2008),但是差于algorithm)。 其他人? 从维基百科文章:“这不是在实践中使用,因为它只提供了一个巨大的优势,他们不能被现代硬件处理(罗宾逊2005年)”。
维基百科说: selectalgorithm:find最小值,最大值,最小值和最大值, 中值 ,甚至第k个最大元素都可以使用堆在线性时间内完成。 它所说的是,它可以做到,而不是如何。 你可以给我一些开始如何使用堆可以做到这一点?
在CLRS,第三版,第155页中给出了在MAX-HEAPIFY中, 每个子树的最大尺寸至多为2n / 3 ,最差的情况发生在树的底部正好满一半的时候。 我明白为什么最差的时候,树的底部正好是半满的。 在这个问题中也回答了MAX-HEAPIFY中的最坏情况:“最坏的情况发生在树的底部正好是半满的时候” 我的问题是如何获得2n / 3? 为什么如果最低水平是一半,那么子树的大小是2n / 3? 如何计算? 谢谢
鉴于这种algorithm,你如何expression它的时间复杂性? 最初在这里介绍 (部分存档) 。 #!/bin/bash function f() { sleep "$1" echo "$1" } while [ -n "$1" ] do f "$1" & shift done wait example usage: ./sleepsort.bash 5 3 6 3 6 3 1 4 7