【问题标题】:Compare algorithms by time{O(n logn) or O(kn)} and space{O(1) and O(k)} respectively [closed]分别按时间{O(n logn)或O(kn)}和空间{O(1)和O(k)}比较算法[关闭]
【发布时间】:2021-05-19 13:22:28
【问题描述】:

如果我有 2 个算法 A 和 B 其中 A 使用 O(n logn) 时间和 O(1) 额外空间。 另一方面,B 使用 O(nk) 时间和 O(k-1) 额外空间。 大家觉得哪一个会是更好的选择呢?为什么?

【问题讨论】:

  • 对于我要解决的给定问题,我会使用性能更好的那个。复杂性不能告诉你,它只能给你第一个提示
  • 你能告诉我你如何根据问题来解决这个问题
  • O(n logn) 可以有t = n * log(n) 执行时间,而第二个算法t = 1e100 * n。因此,即使第二个算法有更好的 Big O,第一个算法对于所有合理的输入都更快。空间也一样
  • 如果 n 是问题大小并且 k 是常数,O(kn) == O(n) 并且 O(k-1) == O(1)。也就是说,@largest_prime_is_463035818 一针见血。请记住,O 描述的是渐近行为。
  • 运行基准测试。如果您想在实际编写代码之前获得估计,仅靠渐近复杂度并没有真正帮助(对于某些给定的n 和k),因为它忽略了常数因素

标签: python c++ algorithm data-structures


【解决方案1】:

更好的选择是不超过内存预算并且在生产条件下明显更快的选择。找出这一点的可靠方法是测量。

如果您正在编写一个将/可能在许多不同环境中使用的库,那么一个不错的选择是实现这两种算法并让用户选择。

【讨论】:

    猜你喜欢
    • 2015-05-25
    • 2023-03-25
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 2012-11-22
    • 1970-01-01
    相关资源
    最近更新 更多