algorithm - 将 f(n) 排列在 g(n) 之前是什么意思?

标签 algorithm math big-o

刚刚参加了我的第一堂数据结构算法课,我根本听不懂。我收到的一个问题是:

将下列函数按升序排列;也就是说,当且仅当 𝑓(𝑛) 是 𝑂(𝑔(𝑛)) 时,𝑓(𝑛) 应该出现在列表中的 𝑔(𝑛) 之前。

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)

现在你说

𝑓(𝑛) should come before 𝑔(𝑛) in your list if and only if 𝑓(𝑛) is 𝑂(𝑔(𝑛)).

现在可以安排吗?根据您对 big-O 和上面列表的理解。 正确的安排是

O(α^n) > O(α^logn) > O(α^logn) > O(nlogn) > O(1)

1 > 5 > 4 > 2 > 3

self 提醒:这确实是基础知识,而且非常重要,因此在继续学习类(class) Material 之前,请确保您理解这一点。

关于algorithm - 将 f(n) 排列在 g(n) 之前是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45002983/

相关文章:

javascript - 在对 Angular 线段中获取点的算法

c++ - 寻找对的更有效方法

c - 为什么我的 C 中的链表失败了?

javascript - 根据 x, y 位置计算 Angular

math - 探索计算机科学的数学

algorithm - 为什么大 O 表示法中的加法常数无关紧要?

c++ - 大小的时间复杂度是多少?

algorithm - 使用rdiff/bsdiff以最佳时间/存储/加载方式从文件的原始版本(v0.1)转到新版本(v0.2)

c++ - 使用 O(m) 空间在 O(n) 时间内对 vector <int>(n) 进行排序?

r - 创建遵循各种分布的相关变量