刚上了第一堂数据结构算法课,我一点也不懂。给我的一个问题是:
将下列函数按升序排列;也就是说,当且仅当𝑓(𝑛)是𝑂(𝑔(𝑛))时,𝑓(𝑛)应在列表中的𝑛(𝑛)之前。
3^2n , 5n lg n + 20n , n^0 , 2^lg n , 16 ^lg n
那我该怎么办将n替换为1,并在对其进行排序之前计算出每个函数?
最佳答案
首先,我建议你去读一读关于the big-O notation的书然后,如果你看看@eugenes在评论中给你的链接,你会注意到:
O(n^n) > O(n!) > O(α^n) > O(n^α) > O(log(n)) > O(1)
所以让我们把事情分解一下:
1. O(3^2n) = O(α^n)
2. O(5nlogn+20n) = O(nlogn)
3. O(n^0) = O(1)
4. O(2^logn) = O(α^logn)
5. O(16^logn) = O(α^logn)
现在你说
当且仅当_(_)是_(_(_))时,_(_)应位于列表中的_(_)之前。
你现在能安排吗?根据你在big-O上的理解和上面的列表。
正确的安排是
O(α^n) > O(α^logn) > O(α^logn) > O(nlogn) > O(1)
1 > 5 > 4 > 2 > 3
请注意:这是最基本的,也是非常重要的,所以在继续学习你的课程材料之前,一定要理解这一点。
关于algorithm - 在g(n)之前排列f(n)是什么意思?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45002983/