【问题标题】:What are the steps to compute algorithm efficiency in terms of time complexity [closed]根据时间复杂度计算算法效率的步骤是什么[关闭]
【发布时间】:2012-06-23 04:57:56
【问题描述】:

我忘记了如何计算算法的时间复杂度。我不是在寻找一本书或 30 页的博客来刷新这些知识。采用以下算法,请您纠正我计算时间复杂度的方式。谢谢

线性搜索

bool SeqSearch(int[] arr, int sValue) {
    for (int index = 0; index < arr.Length-1; index++)
    if (arr[index] == sValue)
        return true;
    return false;
}

使用的步骤和逻辑

  1. 循环遍历所有元素 - N
  2. 每个索引的比较 - 1 还是 N
  3. 返回真或假 - 1

终于

我忘了我们是把它们加起来还是相乘?我以为我们必须添加所以最终得到 N+N+1 所以这一定是个大人物哦! N.O(N)

问题

  1. 我是乘以每个步骤所花费的时间还是将它们相加
  2. 对于比较,无法确定何时结束。那么需要多少时间(我假设为 1,因为它可以在第一个索引处找到,N 否则为最后一个索引)
  3. Assignments 和 Return 是常数时间 1 ?

注意:请不要让我访问网站。 SO 会持续很长时间,有相同/相似问题的人肯定会发现这篇文章的答案很有用。我无法相信其他网站何时会被关闭等。我也不在乎效率、时间复杂性,而是用于查找它的过程/步骤。

资源

http://faculty.simpson.edu/lydia.sinapova/www/cmsc250/LN250_Weiss/L03-BigOh.pdf

我只是想把这个链接放到 pdf 中,它清楚地解释了如何解释哪些陈述以及何时解释。就像我想要的一样。

【问题讨论】:

  • OK downvoter 关心解释?这不是编程问题吗?这是主观的吗?它不能说明问题吗?疯鹅
  • 我不是反对者,但以“我无法打扰 Google 或查找有关该主题的书”开始您的问题并不是一个好的开始。投票结束。
  • @Li-aungYip 当然,向练习事物的人学习比教你练习的书更好。在某些时候是的,所以不理解这个问题很烦人,没有冒犯的意思:)祝你有美好的一天
  • OTOH,2x2=4 不会随着您找到它的网站消失而改变。这是数学。​​

标签: algorithm big-o time-complexity


【解决方案1】:

考虑原始操作(内存访问和算术/逻辑操作)。

给定输入的大小N(在您的情况下为arr.Length),为您的算法计算它们。

然后查看操作总数与N 的关系,无论它只是某个常数还是N 的多项式(例如N3)或N 的对数或N 的指数或其他。

如果结果类似于 N+1 或 2*N,您应该忽略小常数,因为您主要关心的是当 N 很大时会发生什么以及整体行为。

这是基础。

这是最坏情况的大致时间复杂度(当sValue 不在arr[] 中时):

int index = 0; 是 1

index &lt; arr.Length-1; 为 1(但可能高达 10),重复 arr.Length

index++ 为 1(但可能高达 3),重复 arr.Length

if (arr[index] == sValue) 为 1(但可能高达 10),重复 arr.Length

return value; 是 1

所以你有类似 1 + 1 * arr.Length + 1 * arr.Length + 1 * arr.Length = 1 + 3 * arr.Length + 1 的东西。你把它简化为 arr.Length,因此 O( N)。

平均而言,您将只有 arr.Length / 2 次迭代。因此,平均而言,您有 1 + 1 * arr.Length / 2 + 1 * arr.Length / 2 + 1 * arr.Length / 2 + 1 = 2 + 1.5 * arr.Length。再次,O(N)。

但是你真的应该阅读这些东西。

【讨论】:

    猜你喜欢
    • 2021-06-27
    • 2020-01-21
    • 2016-02-27
    • 2011-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    相关资源
    最近更新 更多