在算法分析的时间复杂度的大O表示法中,如果k大于n,O(n + k log n)是否与O(n log n)相同?我对此不太确定。
答案 0 :(得分:0)
我不确定100%N + KlogN是什么意思。我习惯将K用作N的子集,例如“ N中的前K个项目集”,对于大N,通常只返回N中的前K个项目是因为大O时间是NlogK比NlogN快得多(因为K较小)。
如果您的字面意思是N + KlogN,那将比简单地NlogN更复杂,因为K加到了数字上。例如,当K变为零时,您只会得到NlogN,否则得到的值会大于NlogN,我希望这显然会更复杂。
我希望这能回答一些问题。我承认,我觉得我可能会错过这里的要点,如果可以的话,我表示歉意。
答案 1 :(得分:0)
否,在特定情况下,您提到的这些是不同的。例如,考虑以下算法:给定一个长度为N且数字K≥N的数组,对该数组进行线性扫描,然后对该数组进行K个二进制搜索。这里做了多少工作?好吧,线性搜索花费的时间为O(N),而K个二进制搜索的总时间为O(K log N),所以总工作量为O(N + K log N)。
但是,这里的工作是 not O(N log N)。由于K可以任意大,所以K log N的值可以超过N log N的值任意数量。观察这种情况的另一种方式:O(N log N)的界限意味着运行时仅取决于N而不取决于K。但是这里不是这种情况,因为以K方式启动曲柄,肯定会增加运行时间,与N是什么无关。
希望这会有所帮助!