algorithm - 哪个具有更好的复杂性 f1 = (n+m) +(n+m)log(n+m) 或 f2 = n*m
问题描述
哪个函数f1
或f2
具有更好的时间复杂度,如果
f1 = (n + m) + (n + m) * log(n + m)
和
f2 = n * m
解决方案
这取决于. 从中选择获胜者
f1 = (n + m) + (n + m) * log(n + m)
f2 = n * m
我们应该知道什么m
和n
是什么;和之间是什么关系。例如n
m
保持m
不变:
f1 = O((n + m) + (n + m) * log(n + m)) = O(n + n * log(n)) = O(n * log(n))
f2 = O(n * m) = O(n)
f2
更好。
让m ~ n
:
f1 = O((n + m) + (n + m) * log(n + m)) = O(2 * n + 2 * n * log(2 * n)) = O(n * log(n))
f2 = O(n * m) = O(n * n) = O(n**2)
现在f1
是更好的选择
最后,让m ~ log(n)
:
f1 = O((n + m) + (n + m) * log(n + m)) = O(n + log(n) + n*log(n + log(n))) = O(n * log(n))
f2 = O(n * m) = O(n * log(n)) = O(n * log(n))
f1
并且f2
具有相同的复杂性
推荐阅读
- java - 如何将此 int 转换为布尔值?
- ios - 线程 1:“UITableView 数据源为索引路径处的行返回了一个 nil 单元格:
我是 swift 的新手。我正在尝试从此链接运行旧教程中的代码。我已经根据编译器指令成功解决了语言兼容性问题。我已成
- javascript - 如何使用带有 Express API 的 reactjs 中的 get API 从前端获取变量到后端
- google-apps-script - 你好。你能帮我解决谷歌表库参考错误问题吗?
- mysql - 从数据透视表 laravel 中检索数据(计数等(用户数据))
- javascript - 递归函数在express js中没有返回值?
- javascript - 如何以角度将stimulsoft报告js保存到服务器?
- php - 如何在文件名中获取序列号?
- comparator - 什么是比较器,grapesjs 中的 components().comparator
- php - 使用 wordpress 简码的可变产品 ID