Big-O 计算资源

Big-O Computational Resources

我知道衡量渐近复杂度可以基于您拥有的任何资源,无论是时间、内存使用量、比较次数等。但是当涉及到排序时,我意识到我们通常将渐近符号与基本操作,例如 swaps/steps 的数量或比较的数量。

更具体地说,我发现排序算法中的所有那些 Big-O 都是基于比较的次数,而不是交换的次数(例如,在选择排序)。所以我们在这里假设比较比排序本身所需的实际步骤更昂贵?为什么比较如此受欢迎?

在冒泡排序中,如果我们也包括你在最坏情况下的 "bubbling" 的数量,上限是不是会再增加 n2大约?这个涨幅很大。那么为什么我们在这里忽略它呢?

如果我错了请纠正我。谢谢。

比较之所以是一个如此重要的因素,是因为你总是可以通过指针存储东西,最坏的情况是最坏的情况,并且对任何类型的键进行相同的交换。这些简单的系统技巧不适用于比较。按字典顺序比较字符串本质上比比较整数更昂贵。

至于你关于冒泡排序的 n2 的观点:它根本不会改变增长顺序。

人们忽略其他 n^2 个冒泡操作或类似操作的原因是它们只是作为常数因素增加了复杂性。

asympt complexity中忽略了常数因子,因为顾名思义,渐近复杂度更关心的是当问题规模n增大时,工作量增加了多少。如果一个算法具有恒定的复杂度,无论是 1 还是 100,它都不会随着 n 的增加而改变。所以常数因素不算数。