【问题标题】:How to Reduce Time Complexity [closed]如何降低时间复杂度
【发布时间】:2012-07-28 19:16:13
【问题描述】:

昨天我参加了一个面试。他给了我几个编程问题要解决。当我解决它们时,面试官说可以以更好的时间复杂度来完成。我非常沮丧,以至于我无法以最佳时间复杂度完成程序。最后我无法通过面试过程。但我想知道的是,我们如何才能在最佳时间解决任何问题?我应该采取什么方法来达到这种状态?我知道完美的答案是实践。但是我仍然想知道如何以及以什么方式来执行一个程序,以便它在更短的时间内运行并使用最好的内存。我必须读什么书?我必须练习什么问题?

P.S:我知道这不是技术问题。但请告诉我该怎么做。

【问题讨论】:

  • 你能举个例子吗?也许他不雇用的原因是其他原因?很难说。
  • 您知道解决问题的最佳方法取决于问题,对吗?没有千篇一律的解决方案。不,甚至没有 jQuery。
  • @AndersK 有两个数组说 B[],A[]。这两个都是大小为 n 的。现在我需要计算 B[0 到 n-1] 使得 B[0] = A[1] * A[2] * A[3] ... A[n-1] B[1] = A[ 0] * A[2] * A[3] ... A[n-1] 以此类推。也就是说,对于每个索引为 0 到 n 的 B 数组,我需要对 A[] 数组进行乘法运算,除了我们正在计算的索引为 B 的元素。我在 O(n^2) 中完成了这个,他告诉我可以在 O(n) 中完成。想不通怎么办?同样还有几个问题。
  • 你必须学会​​更好地应对这类面试问题。期望某人知道每个问题的“最佳”算法是不合理的,所以一个理性的面试官没有这样的期望,你也不应该有这样的期望。我有理由期望候选人了解一组(小)核心问题(排序、搜索、特定领域的东西(在我的情况下是数字运算)...)的最佳算法(注意复数)并能够将他们的算法知识应用于新问题,例如在面试中遇到的问题。
  • @Amarnath,您可以将值 A[0]*A[1]*..*A[n-1] 赋值给一个名为 mulA 的变量,然后对于每个 i 从 0 到n - 1,您可以分配 B[i] 等于 mulA / A[i]mulA 的计算可以在 O(n) 中完成,后面的部分需要另一个 O(n) 复杂性。而O(n) + O(n) 实际上是O(n)

标签: algorithm data-structures time-complexity


【解决方案1】:

关于算法、数据结构、时间和空间复杂性的最佳书籍之一是Introduction to Algorithms。我还可以建议您阅读以下书籍,以便为面试做好准备:

  1. Cracking the Coding Interview: 150 Programming Questions and Solutions
  2. Programming Interviews Exposed: Secrets to Landing Your Next Job
  3. Programming Pearls

【讨论】:

    【解决方案2】:

    解决这类问题需要练习,再加上“看窍门”。对于这个特定示例,您可能会注意到B[i] = P/A[i],其中P 是所有A[i] 元素相乘的乘积。因此,在这种情况下,O(n) 性能来自首先计算一次 P(n-1 次乘法),然后计算每个 B[i](另外 n 个除法)。

    有时,“看花招”的最佳方法是在您使用的算法中寻找重复的模式。对于您的示例,请注意,在您的描述中,您实际上输入了字符串 "A[2] * A[3] ... A[n-1]" 两次,所以这是一种思考“我可以在算法中只做一次这件事”的地方。

    【讨论】:

    • 谢谢。我想这就是他在采访中告诉我的,有一种模式看..看..看..:(
    【解决方案3】:

    阅读大量算法并练习它们。

    通过在线评委解决问题也有助于提高问题解决技能的效率和准确性。

    部分评委名单如下:

    【讨论】:

      猜你喜欢
      • 2011-06-15
      • 2016-10-07
      • 2016-01-08
      • 2020-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多