当前位置: 首页 > 知识库问答 >
问题:

什么时候值得使用更差的 Big-O 算法 [重复]

华星驰
2023-03-14

如果可以选择不同时间复杂度的算法,那么什么时候选择“更差”的 Big-O 更值得,例如选择 O(n) 而不是 O(log n)。

共有3个答案

马阳晖
2023-03-14

任何渐近符号都描述了在输入达到一定大小(< code>n

例如,计算复杂度为2*n3*n的两个算法将在同一个O(n)类中,而2*n^2算法将在O(n^2)中。现在,对于足够小的输入(本例中的n=1),2*n^2将比3*n算法更有效地执行。

这对于< code>O(n)相对于< code>O(log(n))(或任何其他)计算复杂性也是成立的。

龙华翰
2023-03-14

复杂性并不能告诉你任何关于性能的信息,所以仅仅知道复杂性不足以决定一种方法是否比另一种更有价值。要知道在给定的情况下(例如,对于给定的问题大小),一种方法是否比另一种方法更好,基准测试是一种方法。一旦您对不同的方法进行了基准测试,复杂性可以帮助您预测当问题变大时事情将如何扩展。

例如,了解算法的复杂性对图像处理非常有用:

想象一下,您有两个不同的过滤器,在2D图像上给出非常相似的结果,一个比另一个快于“普通”图像(例如一些百万像素)。如果将它们应用于 3D 图像,它们将如何表现(即,如果问题大小是千兆像素怎么办)?了解复杂性并拥有参考基准可以帮助您预测使用哪种过滤器“值得”使用,但最终......您仍将对这两种解决方案进行基准测试以确保。

滕夜洛
2023-03-14

大O意味着限制,当我们的代码处理有限数量的操作时,无限多的操作(因此大O是近似值)。比较两个时间复杂度:

t ~ 1e100 * N
t ~ N * N

对于真实世界的输入,第二种算法(具有更差的时间复杂度)是优选的,并且更快。

 类似资料:
  • 由于排序算法有许多不同的选择,在任何示例中使用更高复杂度的算法是否合适? 我能想到的唯一原因是,如果有一个非常短的数组,或者数组非常接近排序,或者只包含几个不同的数字。

  • 问题内容: 奇怪的是: 似乎或多或少被定义为。通过这种方式很容易产生错误: 一些fname意外地以else块结尾。修复很简单,我们应该改用它,但是从表面上看,这似乎是一种不错的pythonic方式,并且比“正确”的方式更具可读性。 由于字符串是不可变的,所以为什么字符串错误是什么技术细节?什么时候进行身份检查更好,什么时候进行平等检查更好? 问题答案: 据我所知,检查对象身份是否相等。由于没有强制

  • 问题内容: 何时使用和何时使用运算符? Java提供了两个选项来检查分配兼容性。什么时候使用? 问题答案: 我认为官方文档为您提供了答案(尽管以一种非常具体的方式): 此方法与Java语言instanceof运算符动态等效。 我认为这主要是指在运行时处理类型反射的代码中使用。特别是,我想说它的存在是为了处理您可能不事先知道要检查其成员资格的类的类型的情况(尽管这些情况可能很少)。 例如,您可以使用

  • 问题内容: 我有一个将客户发送到另一个站点来处理付款的应用程序。客户之外的另一个站点在我们的服务器上调用一个页面,让我们知道付款的状态。被调用页面会检查付款应用程序提供的参数,并检查我们是否知道该交易。然后,它更新数据库以反映状态。这一切都无需与客户进行任何互动即可完成。 我个人选择将此功能实现为JSP,因为将文件拖放到文件系统中比编译和打包文件然后将条目添加到配置文件中要容易得多。 考虑到页面的

  • 问题内容: 我怎么能说: 为什么函数调用中不需要括号,而最后一行呢? 问题答案: 是一个功能 调用该函数并产生该函数返回的任何值。 setTimeout的目的是在一段时间后运行代码。你需要的功能只是传递给它(这样的setTimeout可以自称在适当的时候函数),因为如果你将它传递给setTimeout的前调用的函数(用括号),将执行 现在 而不是1秒后,。

  • 在同时处理大量任务的超级计算机操作系统中,是否存在SJF策略比FCFS策略花费更长的时间的情况,说到等待时间指标? 可以假设系统中存在不止一个内核。

  • (1)重载是多态的集中体现,在类中,要以统一的方式处理不同类型数据的时候,可以用重载。 (2)重写的使用是建立在继承关系上的,子类在继承父类的基础上,增加新的功能,可以用重写。 (3)简单总结: 重载是多样性,重写是增强剂; 目的是提高程序的多样性和健壮性,以适配不同场景使用时,使用重载进行扩展; 目的是在不修改原方法及源代码的基础上对方法进行扩展或增强时,使用重写; 生活例子: 你想吃一碗面,我

  • 一般来说,当发现 CPU 的占用率和实际业务应该出现的占用率不相符,或者对 Nginx worker 的资源使用率(CPU,内存,磁盘 IO )出现怀疑的情况下,都可以使用火焰图进行抓取。另外,对 CPU 占用率低、吐吞量低的情况也可以使用火焰图的方式排查程序中是否有阻塞调用导致整个架构的吞吐量低下。 常用的火焰图有三种: lj-lua-stacks.sxx 用于绘制 Lua 代码的火焰图 sam