”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 示例:确定大 O

示例:确定大 O

发布于2024-08-10
浏览:895

本节给出了确定重复、序列和选择语句的 Big O 的几个示例。

实施例1

考虑以下循环的时间复杂度:

for (int i = 1; i k = k 5;
}

这是一个常数时间,c,用于执行

k = k 5;

由于循环执行了n次,所以循环的时间复杂度为

T(n) = (常数 c)*n = O(n).

理论分析预测了算法的性能。为了了解该算法的执行情况,我们运行下面程序中的代码来获取 n = 1000000、10000000、100000000 和 100000000 时的执行时间。

Image description

我们的分析预测了该循环的线性时间复杂度。如示例输出所示,当输入大小增加 10 倍时,运行时间大约增加 10 倍。执行结果证实了预测。

实施例2

以下循环的时间复杂度是多少?

for (int i = 1; i for (int j = 1; j k = k i j;
}
}

这是一个常数时间,c,用于执行

k = k i j;

外循环执行n次。对于外循环中的每次迭代,内循环都会执行 n 次。因此,循环的时间复杂度为

T(n) = (常数 c)*n*n = O(n^2)

时间复杂度为 O(n^2) 的算法称为二次算法,它表现出二次增长率。随着问题规模的增加,二次算法会快速增长。如果将输入大小加倍,算法的时间就会增加四倍。具有嵌套循环的算法通常是二次的。

实施例3

考虑以下循环:

for (int i = 1; i for (int j = 1; j k = k i j;
}
}

外循环执行n次。对于 i = 1, 2, c ,内循环执行一次、两次和 n 次。因此,循环的时间复杂度为

Image description

实施例4

考虑以下循环:

for (int i = 1; i for (int j = 1; j k = k i j;
}
}

内循环执行20次,外循环执行n次。因此,循环的时间复杂度为

T(n) = 20*c*n = O(n)

实施例5

考虑以下序列:

for (int j = 1; j k = k 4;
}

for (int i = 1; i for (int j = 1; j k = k i j;
}
}

第一个循环执行10次,第二个循环执行20 * n次。因此,循环的时间复杂度为

T(n) = 10*c 20*c*n = O(n)

实施例6

考虑以下选择语句:

if (list.contains(e)) {
System.out.println(e);
}
别的
for (对象 t: 列表) {
System.out.println(t);
}

假设列表包含n个元素。 list.contains(e) 的执行时间为 O(n)。 else 子句中的循环需要 O(n) 时间。因此,整个语句的时间复杂度为

Image description

实施例7

考虑整数 n 的 a^n 计算。一个简单的算法将 a 乘以 n 次,如下所示:

结果 = 1;
for (int i = 1; i 结果*=a;

该算法需要 O(n) 时间。不失一般性,假设 n = 2^k。您可以使用以下方案改进算法:

结果 = a;
for (int i = 1; i 结果 = 结果 * 结果;

该算法需要 O(logn) 时间。对于任意的n,可以修改算法,证明复杂度仍然是O(logn)。

为了简单起见,由于 0(logn) = 0(log2n) = 0(logan),所以省略了常量基数。

版本声明 本文转载于:https://dev.to/paulike/examples-determining-big-o-430b?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 为什么Microsoft Visual C ++无法正确实现两台模板的实例?
    为什么Microsoft Visual C ++无法正确实现两台模板的实例?
    [2明确担心Microsoft Visual C(MSVC)在正确实现两相模板实例化方面努力努力。该机制的哪些具体方面无法按预期运行?背景:说明:的初始Syntax检查在范围中受到限制。它未能检查是否存在声明名称的存在,导致名称缺乏正确的声明时会导致编译问题。为了说明这一点,请考虑以下示例:一个符合...
    编程 发布于2025-02-07
  • 如何克服PHP的功能重新定义限制?
    如何克服PHP的功能重新定义限制?
    克服PHP的函数重新定义限制在PHP中,多次定义一个相同名称的函数是一个no-no。尝试这样做,如提供的代码段所示,将导致可怕的“不能重新列出”错误。 // error:“ coss redeclare foo()” 但是,php工具腰带中有一个隐藏的宝石:runkit扩展。它使您能够灵活地...
    编程 发布于2025-02-07
  • 如何从Python中的字符串中删除表情符号:固定常见错误的初学者指南?
    如何从Python中的字符串中删除表情符号:固定常见错误的初学者指南?
    从python 导入编解码器 导入 text = codecs.decode('这狗\ u0001f602'.encode('utf-8'),'utf-8') 印刷(文字)#带有表情符号 emoji_pattern = re.compile(“ [”...
    编程 发布于2025-02-07
  • Java是否允许多种返回类型:仔细研究通用方法?
    Java是否允许多种返回类型:仔细研究通用方法?
    在java中的多个返回类型:一个误解介绍,其中foo是自定义类。该方法声明似乎拥有两种返回类型:列表和E。但是,情况确实如此吗?通用方法:拆开神秘 [方法仅具有单一的返回类型。相反,它采用机制,如钻石符号“ ”。分解方法签名: :本节定义了一个通用类型参数,E。它表示该方法接受了扩展foo类的任...
    编程 发布于2025-02-07
  • 在没有密码提示的情况下,如何在Ubuntu上安装MySQL?
    在没有密码提示的情况下,如何在Ubuntu上安装MySQL?
    在ubuntu 使用debconf-set-selections sudo debconf-set-selections
    编程 发布于2025-02-07
  • 如何在Java列表中有效计算元素的发生?
    如何在Java列表中有效计算元素的发生?
    计数列表中的元素出现在列表 中,在java编程中,列举列表中列举元素出现的任务来自列表。为此,收集框架提供了全面的工具套件。在这种情况下,Batocurrences变量将保持值3,代表动物列表中的“ BAT”出现的数量。 &&& [此方法是简单的,可以得出准确的结果,使其成为计算列表中元素出现的理...
    编程 发布于2025-02-07
  • 如何限制动态大小的父元素中元素的滚动范围?
    如何限制动态大小的父元素中元素的滚动范围?
    在交互式界面中实现垂直滚动元素的CSS高度限制 考虑一个布局,其中我们具有与可滚动的映射div一起移动的subollable map div用户的垂直滚动,同时保持其与固定侧边栏的对齐方式。但是,地图的滚动无限期扩展,超过了视口的高度,阻止用户访问页面页脚。 可以限制地图的滚动,我们可以利用CSS...
    编程 发布于2025-02-07
  • 如何检查对象是否具有Python中的特定属性?
    如何检查对象是否具有Python中的特定属性?
    方法来确定对象属性存在寻求一种方法来验证对象中特定属性的存在。考虑以下示例,其中尝试访问不确定属性会引起错误: >>> a = someClass() >>> A.property Trackback(最近的最新电话): 文件“ ”,第1行, AttributeError:SomeClass实...
    编程 发布于2025-02-07
  • 如何可靠地检查MySQL表中的列存在?
    如何可靠地检查MySQL表中的列存在?
    在mySQL中确定列中的列存在,验证表中的列存在与与之相比有点困惑其他数据库系统。常用的方法:如果存在(从信息_schema.columns select * * where table_name ='prefix_topic'和column_name =&...
    编程 发布于2025-02-07
  • 版本5.6.5之前,使用current_timestamp与时间戳列的current_timestamp与时间戳列有什么限制?
    版本5.6.5之前,使用current_timestamp与时间戳列的current_timestamp与时间戳列有什么限制?
    在默认值中使用current_timestamp或mysql版本中的current_timestamp或在5.6.5 这种限制源于遗产实现的关注,这些限制需要为Current_timestamp功能提供特定的实现。消息和相关问题 `Productid` int(10)unsigned not ...
    编程 发布于2025-02-07
  • 大批
    大批
    [2 数组是对象,因此它们在JS中也具有方法。 切片(开始):在新数组中提取部分数组,而无需突变原始数组。 令arr = ['a','b','c','d','e']; // USECASE:提取直到索引作...
    编程 发布于2025-02-07
  • 为什么PYTZ最初显示出意外的时区偏移?
    为什么PYTZ最初显示出意外的时区偏移?
    与pytz 最初从pytz获得特定的偏移。例如,亚洲/hong_kong最初显示一个七个小时37分钟的偏移: 差异源 考虑以下代码: < pre> import pytz [&& &&&&&&华&& && && && &&&华dt2 = hk.localize(dateTime(2012,1...
    编程 发布于2025-02-07
  • 如何在JavaScript对象中动态设置键?
    如何在JavaScript对象中动态设置键?
    如何为JavaScript对象变量创建动态键,尝试为JavaScript对象创建动态键,使用此Syntax jsObj['key' i] = 'example' 1;将不起作用。正确的方法采用方括号:他们维持一个长度属性,该属性反映了数字属性(索引)和一个数字属性的数量。标准对象没有模仿这...
    编程 发布于2025-02-07
  • 如何干净地删除匿名JavaScript事件处理程序?
    如何干净地删除匿名JavaScript事件处理程序?
    在这里工作/},false); 不幸的是,答案是否。除非在Creation中存储对处理程序的引用。要解决此问题,请考虑将事件处理程序存储在中心位置,例如页面的主要对象,请考虑将事件处理程序存储在中心位置,否则无法清理匿名事件处理程序。 。这允许在需要时轻松迭代和清洁处理程序。
    编程 发布于2025-02-07
  • 为什么使用Firefox后退按钮时JavaScript执行停止?
    为什么使用Firefox后退按钮时JavaScript执行停止?
    导航历史记录问题:JavaScript使用Firefox Back Back 此行为是由浏览器缓存JavaScript资源引起的。要解决此问题并确保在后续页面访问中执行脚本,Firefox用户应设置一个空功能以在window.onunload事件上调用。 pre> window.onloa...
    编程 发布于2025-02-07

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3