什么东西更贵?读取或比较整数、双精度 我问自己,哪一个大O符号C++有。< /P>

什么东西更贵?读取或比较整数、双精度 我问自己,哪一个大O符号C++有。< /P>,c++,C++,我想要一组整数的极小值 我在stackoverflow中看到了一个类似的问题 答案是O(n),因为你必须读n个数字 但只有在阅读是关键操作的情况下,这才是正确的 我的问题是:什么东西更贵?(以cpu时钟或其他形式) 读取或比较?这取决于平台,但几乎可以肯定的是,从内存中读取值比CPU上的操作更昂贵。但是,关于大o表示法的话题,并不是关于哪个操作更昂贵。这是关于算法随着输入数量(即n)的变化而变化的事实。O(n)决定了算法的行为(尤其是对于大数字)。执行read或compare操作,或者两者都执行

我想要一组整数的极小值

我在stackoverflow中看到了一个类似的问题

答案是O(n),因为你必须读n个数字

但只有在阅读是关键操作的情况下,这才是正确的

我的问题是:什么东西更贵?(以cpu时钟或其他形式)
读取或比较?

这取决于平台,但几乎可以肯定的是,从内存中读取值比CPU上的操作更昂贵。但是,关于大o表示法的话题,并不是关于哪个操作更昂贵。这是关于算法随着输入数量(即n)的变化而变化的事实。

O(n)
决定了算法的行为(尤其是对于大数字)。执行
read
compare
操作,或者两者都执行,这并不重要。这是在混合两种截然不同的东西。
O(n)
表示法不关心哪个操作更昂贵
O(n)
表示操作的数量与比较的项目数量成正比。如果项目数量翻倍,时间也会翻倍<例如,code>O(n^2)表示当您将项的数量增加三倍时,处理它们的时间将乘以9(即
3^2
)您自己在问题中的陈述(“在cpu时钟或其他方面”)意味着答案取决于底层平台(硬件体系结构+指定的编译器)。简而言之,C++语言标准没有定义每一个机器操作的“价格”(实际上,它甚至不以任何其他方式引用机器操作,因为语言对于执行程序的机器是不可知的)。所以O(n)和O(log(n))之间没有区别吗?我不这么认为。事实上,您不需要比较n次来找到最小值。是的,有,但在O表示法中,执行n次操作和执行1000*n次操作之间没有区别,两者都是O(n)。另外,5*n秒的运算和1000*n秒的运算没有区别,两者都是以n为单位线性扩展的。谢谢你的回答。第二种说法是对的和错的。该算法确定大O中的函数。该函数统计完成该算法所需的关键操作。功能输入是输入的数量(即n)。例如,Min有一个不同的大O表示法,if<是关键操作,如果使用自己的弱顺序,这可能会很有趣。这不是错的。你是说用另一种方式编写算法会改变原始算法的复杂性。那不是真的。您现在正在评估一个全新的算法。复杂度取决于算法,而不是最终结果。是的,我认为OP对o表示法有一些混淆。它与放大时的算法复杂度有关,与算法的CPU负载或算法的单个操作无关。两种不同的算法可以是O(n),其中一种算法比另一种算法慢100000倍,但也有所谓的小O复杂度但不要把事情搞混了。。