具有O(1),O(n log n)和O(log n)复杂度的算法的示例

时间:2009-10-20 05:33:17

标签: algorithm time-complexity

我们每天使用的具有O(1),O(n log n)和O(log n)复杂度的算法是什么?

11 个答案:

答案 0 :(得分:202)

如果您想要问题中给出的具有时间复杂度的算法/语句组的示例,这里有一个小列表 -

O(1)时间

  • 访问数组索引(int a = ARR [5];)
  • 在链接列表中插入节点
  • 在堆栈上推送和弹出
  • 从队列中插入和删除
  • 找出存储在Array
  • 中的树中节点的父节点或左/右子节点
  • 跳转到双向链接列表中的下一个/上一个元素

O(n)时间

简而言之,所有需要线性的Brute Force算法或Noob算法都基于O(n)时间复杂度

  • 遍历数组
  • 遍历链表
  • 线性搜索
  • 删除链接列表中的特定元素(未排序)
  • 比较两个字符串
  • 检查回文
  • 计数/铲斗排序 在这里你也可以找到更多这样的例子......

O(log n)时间

  • 二进制搜索
  • 在二叉搜索树中查找最大/最小数字
  • 基于线性功能的某些划分和征服算法
  • 计算斐波纳契数 - 最佳方法 这里的基本前提是不使用完整的数据,并且每次迭代都会减小问题的大小

O(n log n)时间

通过考虑Divide and Conquer来引入'log n'因子。其中一些算法是经过最佳优化的算法并经常使用。

  • 合并排序
  • 堆排序
  • 快速排序
  • 基于优化O(n ^ 2)算法的某些划分和征服算法

O(n^2)时间

如果他们的O(nlogn)对应物存在,那么这些算法应该是效率较低的算法。一般申请可能是Brute Force。

  • 冒泡排序
  • 插入排序
  • 选择排序
  • 遍历简单的2D数组

答案 1 :(得分:28)

O(1)的一个简单示例可能是return 23; - 无论输入是什么,它都会在固定的有限时间内返回。

O(N log N)的典型示例是使用良好算法(例如mergesort)对输入数组进行排序。

一个典型示例,如果O(log N)将通过二分查找排序输入数组中的值。

答案 2 :(得分:24)

O(1) - 大多数烹饪程序都是O(1),也就是说,即使有更多的人做饭,它也需要一定的时间(在某种程度上,因为你的空间不足锅/平底锅,需要分开烹饪)

O(logn) - 在电话簿中查找内容。想二元搜索。

O(n) - 读书,其中n是页数。这是阅读书籍所需的最短时间。

O(nlogn) - 不能立即想到每天可能会做的事情,除非你通过合并或快速排序来分类卡片!

答案 3 :(得分:10)

我可以为您提供一些通用算法......

  • O(1):访问数组中的元素(即int i = a [9])
  • O(n log n):快速或合并(平均)
  • O(log n):二进制搜索

这些将是肠道反应,因为这听起来像家庭作业/面试的问题。如果你正在寻找更具体的东西,那就更难了,因为公众通常不知道流行应用程序的底层实现(当然是开源),这个概念一般也不适用于“应用程序”< / p>

答案 4 :(得分:3)

O(1) - 从双向链表中删除元素。 e.g。

typedef struct _node {
    struct _node *next;
    struct _node *prev;
    int data;
} node;


void delete(node **head, node *to_delete)
{
    .
    .
    .
}

答案 5 :(得分:2)

软件应用程序的复杂性不是衡量的,也不是用大写法写的。它仅用于测量算法复杂度和比较同一域中的算法。最有可能的是,当我们说O(n)时,我们的意思是它是“O(n)比较”或“O(n)算术运算”。这意味着,您无法比较任何算法或应用程序对。

答案 6 :(得分:2)

O(1):在国际象棋中找到最好的下一步(或者Go)。由于游戏状态的数量是有限的,所以只有O(1): - )

答案 7 :(得分:2)

您可以在列表中添加以下算法:

O(1) - 确定数字是偶数还是奇数;使用HashMap

O(logN) - 计算x ^ N,

O(N Log N) - 增长最长的子序列

答案 8 :(得分:1)

O(n log n)着名的是你可以对任意集合进行排序的速度的上限(假设一个标准而非高度并行的计算模型)。

答案 9 :(得分:0)

0(logn)-二进制搜索,数组中的峰元素(可以有多个峰) 0(1)-在python中计算列表或字符串的长度。 len()函数需要0(1)时间。访问数组中的元素需要0(1)时间。堆栈中的推入操作需要0(1)时间。 0(nlogn)-合并排序。在python中排序需要花费nlogn的时间。因此,当您使用listname.sort()时,它需要花费登录时间。

由于冲突,在哈希表中进行笔记搜索有时会花费比固定时间更多的时间。

答案 10 :(得分:0)

O(2 N

O(2 N )表示一种算法,随着输入数据集的每个增加,其增长都翻倍。 O(2 N )函数的增长曲线是指数的-从非常浅的起点开始,然后在气象上上升。 O(2 N )函数的一个示例是斐波纳契数的递归计算:

int Fibonacci (int number)
{
if (number <= 1) return number;
return Fibonacci(number - 2) + Fibonacci(number - 1);
}