algorithm - 如何找出每种算法的大 O 表示法?
问题描述
我遇到了一个问题,我有一系列与这两种算法有关的问题,但是我很难理解我觉得很简单的大 O 表示法的概念。
本质上,我需要找出大 O 表示法是什么,每个算法需要多长时间才能解决一两百万次操作的问题。
算法 A:
SET sum TO 0
FOR i=1 to size
FOR j=1 to 10000
sum=sum+1
算法 B:
SET sum TO 0
FOR i=1 to size
FOR j=1 to size
sum = sum + 1
这是假设计算机每秒可以执行一百万次操作
解决方案
从您帖子的最后一句话开始:算法的时间复杂度不取决于计算机每秒可以执行的操作数。这是无关紧要的。
我假设该语句sum = sum + 1
属于内部FOR
循环 - 缩进并没有说明这一点。
两种算法都会执行sum = sum + 1
多次。我们可以认为一次执行sum = sum + 1
需要恒定的时间。
现在,两种算法的区别在于内循环运行的次数。在第一个版本中,这是一个常数(10000)。这意味着完整FOR
循环的一次执行将花费恒定的时间。它不依赖于大小。
这意味着第一个算法只有一个取决于size的循环:它执行内部循环size次。所以时间复杂度是O(size)。
然而,在第二个版本中,内部循环也运行大小时间。所以它显然取决于size。现在执行最内层语句的次数为2。所以时间复杂度是O(size 2 )。
推荐阅读
- javascript - 使用终端创建快速项目时,为什么每个导入的库都带有“var”?
- php - 使用远程get调用API
- javascript - 脚本选择更改仅运行一次
- java - 对列 >String< 使用 ENUMS
- ipad - 11" iPad Pro 和 12.9" iPad Pro 的静态启动屏幕图像
- reactjs - 对打字稿子道具的反应与父母几乎相同
- python - 带有bs4的Python在中查找元素
- google-sheets - 来自 Lenovo 页面的 Googlesheet ImportXML
- xamarin - ContentPage 中的 ViewGroup - ExportRenderer 问题 Xamarin
- markdown - Redundant frame and scrollbars on Jekyll code excerpt