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

示例:确定大 O

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

本节给出了确定重复、序列和选择语句的 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]删除
最新教程 更多>
  • 如何干净地删除匿名JavaScript事件处理程序?
    如何干净地删除匿名JavaScript事件处理程序?
    删除匿名事件侦听器将匿名事件侦听器添加到元素中会提供灵活性和简单性,但是当要删除它们时,可以构成挑战,而无需替换元素本身就可以替换一个问题。 element? element.addeventlistener(event,function(){/在这里工作/},false); 要解决此问题,请考虑...
    编程 发布于2025-07-24
  • 为什么我在Silverlight Linq查询中获得“无法找到查询模式的实现”错误?
    为什么我在Silverlight Linq查询中获得“无法找到查询模式的实现”错误?
    查询模式实现缺失:解决“无法找到”错误在银光应用程序中,尝试使用LINQ建立错误的数据库连接的尝试,无法找到以查询模式的实现。”当省略LINQ名称空间或查询类型缺少IEnumerable 实现时,通常会发生此错误。 解决问题来验证该类型的质量是至关重要的。在此特定实例中,tblpersoon可能需...
    编程 发布于2025-07-24
  • Java数组中元素位置查找技巧
    Java数组中元素位置查找技巧
    在Java数组中检索元素的位置 利用Java的反射API将数组转换为列表中,允许您使用indexof方法。 (primitives)(链接到Mishax的解决方案) 用于排序阵列的数组此方法此方法返回元素的索引,如果发现了元素的索引,或一个负值,指示应放置元素的插入点。
    编程 发布于2025-07-24
  • Java是否允许多种返回类型:仔细研究通用方法?
    Java是否允许多种返回类型:仔细研究通用方法?
    在Java中的多个返回类型:一种误解类型:在Java编程中揭示,在Java编程中,Peculiar方法签名可能会出现,可能会出现,使开发人员陷入困境,使开发人员陷入困境。 getResult(string s); ,其中foo是自定义类。该方法声明似乎拥有两种返回类型:列表和E。但这确实是如此吗...
    编程 发布于2025-07-24
  • CSS强类型语言解析
    CSS强类型语言解析
    您可以通过其强度或弱输入的方式对编程语言进行分类的方式之一。在这里,“键入”意味着是否在编译时已知变量。一个例子是一个场景,将整数(1)添加到包含整数(“ 1”)的字符串: result = 1 "1";包含整数的字符串可能是由带有许多运动部件的复杂逻辑套件无意间生成的。它也可以是故意从单个真理...
    编程 发布于2025-07-24
  • Python高效去除文本中HTML标签方法
    Python高效去除文本中HTML标签方法
    在Python中剥离HTML标签,以获取原始的文本表示Achieving Text-Only Extraction with Python's MLStripperTo streamline the stripping process, the Python standard librar...
    编程 发布于2025-07-24
  • 如何在Chrome中居中选择框文本?
    如何在Chrome中居中选择框文本?
    选择框的文本对齐:局部chrome-inly-ly-ly-lyly solument 您可能希望将文本中心集中在选择框中,以获取优化的原因或提高可访问性。但是,在CSS中的选择元素中手动添加一个文本 - 对属性可能无法正常工作。初始尝试 state)</option> < op...
    编程 发布于2025-07-24
  • 如何使用Python有效地以相反顺序读取大型文件?
    如何使用Python有效地以相反顺序读取大型文件?
    在python 中,如果您使用一个大文件,并且需要从最后一行读取其内容,则在第一行到第一行,Python的内置功能可能不合适。这是解决此任务的有效解决方案:反向行读取器生成器 == ord('\ n'): 缓冲区=缓冲区[:-1] ...
    编程 发布于2025-07-24
  • 如何从PHP中的数组中提取随机元素?
    如何从PHP中的数组中提取随机元素?
    从阵列中的随机选择,可以轻松从数组中获取随机项目。考虑以下数组:; 从此数组中检索一个随机项目,利用array_rand( array_rand()函数从数组返回一个随机键。通过将$项目数组索引使用此键,我们可以从数组中访问一个随机元素。这种方法为选择随机项目提供了一种直接且可靠的方法。
    编程 发布于2025-07-24
  • \“(1)vs.(;;):编译器优化是否消除了性能差异?\”
    \“(1)vs.(;;):编译器优化是否消除了性能差异?\”
    答案: 在大多数现代编译器中,while(1)和(1)和(;;)之间没有性能差异。编译器: perl: 1 输入 - > 2 2 NextState(Main 2 -E:1)V-> 3 9 Leaveloop VK/2-> A 3 toterloop(next-> 8 last-> 9 ...
    编程 发布于2025-07-24
  • 为什么使用固定定位时,为什么具有100%网格板柱的网格超越身体?
    为什么使用固定定位时,为什么具有100%网格板柱的网格超越身体?
    网格超过身体,用100%grid-template-columns 为什么在grid-template-colms中具有100%的显示器,当位置设置为设置的位置时,grid-template-colly修复了?问题: 考虑以下CSS和html: class =“ snippet-code”> g...
    编程 发布于2025-07-24
  • PHP阵列键值异常:了解07和08的好奇情况
    PHP阵列键值异常:了解07和08的好奇情况
    PHP数组键值问题,使用07&08 在给定数月的数组中,键值07和08呈现令人困惑的行为时,就会出现一个不寻常的问题。运行print_r($月)返回意外结果:键“ 07”丢失,而键“ 08”分配给了9月的值。此问题源于PHP对领先零的解释。当一个数字带有0(例如07或08)的前缀时,PHP将其...
    编程 发布于2025-07-24
  • Go web应用何时关闭数据库连接?
    Go web应用何时关闭数据库连接?
    在GO Web Applications中管理数据库连接很少,考虑以下简化的web应用程序代码:出现的问题:何时应在DB连接上调用Close()方法?,该特定方案将自动关闭程序时,该程序将在EXITS EXITS EXITS出现时自动关闭。但是,其他考虑因素可能保证手动处理。选项1:隐式关闭终止数...
    编程 发布于2025-07-24
  • 为什么使用Firefox后退按钮时JavaScript执行停止?
    为什么使用Firefox后退按钮时JavaScript执行停止?
    导航历史记录问题:JavaScript使用Firefox Back Back 此行为是由浏览器缓存JavaScript资源引起的。要解决此问题并确保在后续页面访问中执行脚本,Firefox用户应设置一个空功能。 警报'); }; alert('inline Alert')...
    编程 发布于2025-07-24
  • 如何使用FormData()处理多个文件上传?
    如何使用FormData()处理多个文件上传?
    )处理多个文件输入时,通常需要处理多个文件上传时,通常是必要的。 The fd.append("fileToUpload[]", files[x]); method can be used for this purpose, allowing you to send multi...
    编程 发布于2025-07-24

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

Copyright© 2022 湘ICP备2022001581号-3