所以我一直试图尽可能地理解Big O符号,但仍有一些我很困惑的事情.所以我一直在读,如果有东西是O(n),它通常指的是算法的最坏情况,但它不一定要参考最坏的情况,这就是为什么我们可以说最好的例如,插入排序的大小是O(n).但是,我无法理解这意味着什么.我知道如果最坏情况是O(n ^ 2),这意味着在最坏情况下表示算法的函数增长不快于n ^ 2(存在上限).但如果你有O(n)作为最好的情况,我应该怎么读呢?在最好的情况下,算法增长不比n快?我的图片是以n为上限的图形,如

如果算法的最佳情况是O(n),那么n是算法运算在最佳情况下增长的速度的上限,因此它们不能比n增长得快......但这并不意味着它们可以像O(log n)或O(1)那样快速增长,因为它们低于上限?这没有意义,因为O(log n)或O(1)是比O(n)更好的场景,所以O(n)不是最好的情况吗?我很失落哈哈
可能重复:
Big O的简明英语解释
我想这可能是在课堂上讲授的东西,但作为一名自学成才的程序员,我很少见到它.
我收集它与时间有关,而O(1)是最好的,而像O(n ^ n)这样的东西非常糟糕,但是有人能指出我对其实际代表的基本解释,这些数字来自哪里?
我一直在注意使用这些术语的堆栈溢出的答案,但我不知道它们是什么意思.他们叫什么,是否有一个很好的资源,可以用简单的术语解释它们?
可能重复:
Big O的简单英文解释
我知道Big O表示法用于评估算法的效率,但我不明白你如何阅读Big O表示法或算法究竟有多高效.有人可能会解释Big O符号的基础知识吗?谢谢.
我有一个数学问题,我通过反复试验解决(我认为这被称为暴力),当有一些选项时程序工作正常,但是当我添加更多变量/数据时,运行时间越来越长.
我的问题是,虽然原型工作,它对数以千计的变量和大数据集很有用; 所以,我想知道是否有可能扩展蛮力算法.我该如何进行缩放?
我开始学习和玩Hadoop(和HBase); 虽然它看起来很有希望,但我想验证我正在尝试做的事情并非不可能.
如果它有帮助,我用Java编写程序(并且如果可能的话可以使用它),但最终将它移植到Python,因为我觉得它更舒服.
更新:为了提供更多洞察力,我想我会添加一个简化版本的代码来实现这个想法.基本上如果我知道总和是100,我试图找到可以等于它的所有变量组合.这很简单,在我的版本中我可能会使用更大的数字和更多的变量.它是Diophantine,我相信没有算法可以在没有蛮力的情况下解决它.
int sum = 100;
int a1 = 20;
int a2 = 5;
int a3 = 10;
for (int i = 0; i * a1 <= sum; i++) {
for (int j = 0; i * a1 + j * a2 <= sum; j++) {
for (int k = 0; i * a1 + j * a2 + k * a3 <= sum; k++) {
if (i * a1 …Run Code Online (Sandbox Code Playgroud) 为什么声明:
算法A的运行时间至少为O(n²)
没意义?
插入排序算法的运行时间最多为O(n²)
这是对的吗?
我尝试了网但无法得到很好的解释.
我有另一个问题:
我知道任何线性函数a⋅n+ b都是O(n),也是O(n²).它也是O(n³)吗?
我正在进行图形分析.我想计算N×N相似度矩阵,其包含每两个顶点之间的Adamic Adar相似性.为了概述Adamic Adar,让我从这个介绍开始:
给出A无向图的邻接矩阵G.CN是一组两个顶点的所有常见的邻居x,y.两个顶点的公共邻居是两个顶点具有边/链接的顶点,即两个顶点对应的公共邻居节点都具有1 A.k_n是节点的程度n.
Adamic-Adar定义如下: 
我计算它的尝试是从中获取x和y节点的两行,A然后对它们求和.然后查找具有2值的元素,然后获取它们的度数并应用等式.然而,计算需要花费很长时间.我尝试使用包含1032个顶点的图形,并且花费了大量时间进行计算.它从7分钟开始,然后我取消了计算.所以我的问题是:有更好的计算算法吗?
这是我在python中的代码:
def aa(graph):
"""
Calculates the Adamic-Adar index.
"""
N = graph.num_vertices()
A = gts.adjacency(graph)
S = np.zeros((N,N))
degrees = get_degrees_dic(graph)
for i in xrange(N):
A_i = A[i]
for j in xrange(N):
if j != i:
A_j = A[j]
intersection = A_i + A_j
common_ns_degs = list()
for index in …Run Code Online (Sandbox Code Playgroud) 假设我们有一个1.000.000元素的数组,我们通过它们来检查一些简单的东西,例如,如果第一个字符是"A".从我(很少)的理解,复杂性将是O(n),并将需要一些X时间.如果我添加另一个IF(不是if)进行检查,让我们说,如果最后一个字符是"G",它将如何改变复杂性?它会增加复杂性和时间吗?喜欢O(2n)和2X?
我想避免考虑不同命令必须进行的计算次数.例如,我理解Len()需要更多的计算才能给出结果而不是简单的char比较,但是我们可以说IF中使用的命令(几乎)具有相同的复杂度.
我有一个List<string>,我想从中获取5个项目组.没有键或任何简单的分组......但它总是5的倍数.
例如
{"A","16","49","FRED","AD","17","17","17","FRED","8","B","22","22","107","64"}
Run Code Online (Sandbox Code Playgroud)
参加团队:
"A","16","49","FRED","AD"
"17","17","17","FRED","8"
"B","22","22","107","64"
Run Code Online (Sandbox Code Playgroud)
但我无法找到一个简单的方法来做到这一点!
很确定它可以用枚举和Take(5)来完成......
我必须创建一个Java程序,它在给定的String中查找长度为n的所有重复子字符串.输入字符串非常长,蛮力方法需要花费太多时间.
我已经尝试过:
现在我分别找到每个子字符串,并使用KMP算法检查该子字符串的重复.这也花费了太多时间.
对于这个问题,什么是更有效的方法?