O(n^2) 与 O(n) 中的算法 [重复]

2024-03-19

我是计算机科学的新手,刚刚开始使用伪代码,我有一些问题。这是我这个学期的第三周,大部分时间都是自学。我有一些疑问:

O(n^2) 与 O(n) 算法有什么区别? - 同样,O(n log n) 是什么? - 和 Ω(n^2)?

到目前为止,我已经写过:

horner = 0;
for( i = n; i >= 0; i −− )
    horner = x * horner + a[i];

但发现它是O(n)。我该如何改造它?

运行时间是多少? - 我知道第一行的赋值是 1 次操作

它在实际的(例如 C#)算法中是什么样子的?


您要问的是计算机科学中的一个主题,称为算法复杂性分析。在程序中编写算法或解决方案时,这是一个非常重要的主题,因为它与运行时或计算运行的速度有关。

Big-Oh 或 O(n) 与算法运行的上限运行时间相关。在这种情况下,O(n) 意味着对于 n 个元素,需要考虑所有 n 个元素才能完成算法计算,或者是线性的。对于非常大且非常慢的计算,此 Big-Oh 复杂度的范围是从恒定时间 O(1) 到 O(n^n)。另外,请考虑如下方程:

y=10n+1
y=5n+10

这两个都是 O(n) 复杂度,因为随着元素数量的增加,方程也因此变得越来越大。我们忽略常数,因为方程会由于变量而变得更大且快速,而不是由于永远不会改变的常数值。 然而,方程如下:

y=10n^2+5n+5 

复杂度将为 O(n^2),因为 10n^2 是最大的增长元素,有助于方程增长更快。我们放弃常数并考虑方程中最大的增长分量来评估复杂性。

对于 Big-Omega 复杂性,我们认为这是算法复杂性分析的下限。例如,算法可以像 Omega(n)(最好情况)一样快地运行,但需要长达 O(n^2)(最坏情况),这在排序算法或搜索算法的分析中很常见。

在某些情况下,出于优化原因,我们希望使用高效且更快的算法编写程序,特别是当我们想要更快的程序以获得更快的解决方案或更快的运行时间时。

您提供的代码示例的时间复杂度为 O(n),因为它使用 for 循环来迭代 n 个元素。考虑一个双 for 循环,其中当前的 for 循环中有第二个循环。这是 O(n^2),因为在最坏的情况下需要迭代 n*n 个元素。

O(n^2) 运行时初始化空矩阵的 Java 伪代码:

int result[n][m];
for(int i=0; i<n; ++i){
    for(int j=0; j<m; ++j){
       result[i][j] = 0;
    }
}

请注意,它使用两个循环,因此导致运行时间为 O(n^2)。

Here is a graph to show how equations grow over time: (and how fast they grow) Graph

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

O(n^2) 与 O(n) 中的算法 [重复] 的相关文章

  • 如何使 Windows 窗体的关闭按钮不关闭窗体但使其不可见?

    该表单有一个 NotifyIcon 对象 当用户单击 关闭 按钮时 我希望表单不关闭而是变得不可见 然后 如果用户想再次查看该表单 可以双击系统托盘中的图标 如果用户想关闭表单 可以右键单击该图标并选择 关闭 有人可以告诉我如何使关闭按钮不
  • n 或 nlog(n) 比常数时间或对数时间更好吗?

    在 Coursera 上的普林斯顿教程中 讲师解释了遇到的常见增长顺序函数 他说 线性和线性算术运行时间是 我们努力的目标 他的推理是 随着输入大小的增加 运行时间也会增加 我认为这是他犯了错误的地方 因为我之前听过他提到线性增长顺序对于高
  • ASP.NET Core Serilog 未将属性推送到其自定义列

    我有这个设置appsettings json对于我的 Serilog 安装 Serilog MinimumLevel Information Enrich LogUserName Override Microsoft Critical Wr
  • Qt-Qlist 检查包含自定义类

    有没有办法覆盖加载自定义类的 Qt QList 的比较机制 即在 java 中你只需要重写一个比较方法 我有一个带有我的自定义类模型的 QList QList
  • pthread_cond_timedwait() 和 pthread_cond_broadcast() 解释

    因此 我在堆栈溢出和其他资源上进行了大量搜索 但我无法理解有关上述函数的一些内容 具体来说 1 当pthread cond timedwait 因为定时器值用完而返回时 它如何自动重新获取互斥锁 互斥锁可能被锁定在其他地方 例如 在生产者
  • 将布尔参数传递给 SQL Server 存储过程

    我早些时候问过这个问题 我以为我找到了问题所在 但我没有 我在将布尔参数传递给存储过程时遇到问题 这是我的 C 代码 public bool upload false protected void showDate object sende
  • 如何将图像和 POST 数据上传到 Azure 移动服务 ApiController 终结点?

    我正在尝试上传图片and POST表单数据 尽管理想情况下我希望它是json 到我的端点Azure 移动服务应用 我有ApiController method HttpPost Route api upload databaseId sea
  • Json.NET - 反序列化接口属性引发错误“类型是接口或抽象类,无法实例化”

    我有一个类 其属性是接口 public class Foo public int Number get set public ISomething Thing get set 尝试反序列化Foo使用 Json NET 的类给我一条错误消息
  • Qt moc 在头文件中实现?

    是否可以告诉 Qt MOC 我想声明该类并在单个文件中实现它 而不是将它们拆分为 h 和 cpp 文件 如果要在 cpp 文件中声明并实现 QObject 子类 则必须手动包含 moc 文件 例如 文件main cpp struct Sub
  • 在数据库中搜索时忽略空文本框

    此代码能够搜索数据并将其加载到DataGridView基于搜索表单文本框中提供的值 如果我将任何文本框留空 则不会有搜索结果 因为 SQL 查询是用 AND 组合的 如何在搜索 从 SQL 查询或 C 代码 时忽略空文本框 private
  • 将 unsigned char * (uint8_t *) 转换为 const char *

    我有一个带有 uint8 t 参数的函数 uint8 t ihex decode uint8 t in size t len uint8 t out uint8 t i hn ln for i 0 i lt len i 2 hn in i
  • 实体框架 4 DB 优先依赖注入?

    我更喜欢创建自己的数据库 设置索引 唯一约束等 使用 edmx 实体框架设计器 从数据库生成域模型是轻而易举的事 现在我有兴趣使用依赖注入来设置一些存储库 我查看了 StackOverflow 上的一些文章和帖子 似乎重点关注代码优先方法
  • 将 xml 反序列化为类,list<> 出现问题

    我有以下 XML
  • 将文本叠加在图像背景上并转换为 PDF

    使用 NET 我想以编程方式创建一个 PDF 它仅包含一个背景图像 其上有两个具有不同字体和位置的标签 我已阅读过有关现有 PDF 库的信息 但不知道 如果适用 哪一个对于如此简单的任务来说最简单 有人愿意指导我吗 P D 我不想使用生成的
  • 32 位到 64 位内联汇编移植

    我有一段 C 代码 在 GNU Linux 环境下用 g 编译 它加载一个函数指针 它如何执行并不重要 使用一些内联汇编将一些参数推送到堆栈上 然后调用该函数 代码如下 unsigned long stack 1 23 33 43 save
  • const、span 和迭代器的问题

    我尝试编写一个按索引迭代容器的迭代器 AIt and a const It两者都允许更改容器的内容 AConst it and a const Const it两者都禁止更改容器的内容 之后 我尝试写一个span
  • x86 上未对齐的指针

    有人可以提供一个示例 将指针从一种类型转换为另一种类型由于未对齐而失败吗 在评论中这个答案 https stackoverflow com questions 544928 reading integer size bytes from a
  • 如何使用 std::string 将所有出现的一个字符替换为两个字符?

    有没有一种简单的方法来替换所有出现的 in a std string with 转义 a 中的所有斜杠std string 完成此操作的最简单方法可能是boost字符串算法库 http www boost org doc libs 1 46
  • C 中的异或运算符

    在进行按位操作时 我在确定何时使用 XOR 运算符时遇到一些困难 按位与和或非常简单 当您想要屏蔽位时 请使用按位 AND 常见用例是 IP 寻址和子网掩码 当您想要打开位时 请使用包含或 然而 XOR 总是让我明白 我觉得如果在面试中被问
  • 如何在 C++ BOOST 中像图形一样加载 TIFF 图像

    我想要加载一个 tiff 图像 带有带有浮点值的像素的 GEOTIFF 例如 boost C 中的图形 我是 C 的新手 我的目标是使用从源 A 到目标 B 的双向 Dijkstra 来获得更高的性能 Boost GIL load tiif

随机推荐

  • 如何在不出现 WER 对话框的情况下使 Windows-7 上的进程崩溃?

    是否有可能在不出现 Windows 错误报告 WER 对话框的情况下使 Windows 7 上的常规用户模式进程崩溃 当 WER 正常启用且未应用任何特定标志时 注 我是not有兴趣禁用WER 我对崩溃场景感兴趣WER 尚未启动 尽管它应该
  • JavaScript 简写 if 语句,没有 else 部分

    所以我使用的是 JavaScript 简写if else声明 我在某处读到它们被称为三元声明 this dragHandle hasClass handle low direction left direction right 这很好用 但
  • 关于 Hinnant 堆栈分配器的问题

    我一直在使用霍华德辛南特的堆栈分配器 http howardhinnant github io stack alloc h它的工作方式就像一个魅力 但实施的一些细节对我来说有点不清楚 为什么全球运营商new and delete用过的 这a
  • BX 滑块和滚动页面

    我正在将 bxslider 用于移动网站 水平滚动图像 问题是 如果您触摸 bxslider 页面不会滚动 如何捕捉手指方向并向下滚动页面 谢谢 您可以将选项 touchEnabled 设置为 false
  • return 语句中的解构[重复]

    这个问题在这里已经有答案了 我的应用程序中有多个案例 如下所示 getVariables const allowCustomValues budgets budgetsToAdd budgetsToRemove isGlobal isReq
  • 过滤器“woocommerce_cart_contents_weight”不适用于运输重量

    我试图将包裹重量计入购物车的总重量 以便我可以收取正确的运费 我尝试在 woocommerce cart contents weight 上添加过滤器 如所解释的there https stackoverflow com questions
  • C# 调试问题:没有为任何调用堆栈帧加载符号

    我正在尝试从 C Web 服务 dll 进入外部 dll 中引用的方法 我正在开发 Web 服务代码 可以从我的 Winforms 应用程序进入它 我试图从网络服务进入的 dll 是由其他人开发的 我有 dll 和 pdb 文件 当我尝试进
  • 没有 XML Spring ApplicationContext

    我正在尝试创建一个带有或不带有 spring xml 配置的项目 首先 我像这样创建 xml 配置
  • Java FX 中的嵌套控制器问题

    我试图包括控制器 SelectedIssueController 在我的主要布局 main fxml 但我收到以下错误 Can not set lt mypackage controllers SelectedIssueController
  • 使用 C# 禁用窗口动画效果

    我试图禁用窗口中的 淡入淡出 动画 每当您打开或最大化 最小化窗口时就会发生这种动画 当然 可以通过取消选中复选框来手动完成最小化和最大化时为窗口设置动画 我正在尝试通过系统参数信息 https msdn microsoft com en
  • Plotly:同一图中的散点图和动画线图

    我需要在绘图中创建一个散点图 并在其上覆盖一个线图 我发现如果我使用图形对象创建图形 然后使用绘图表达添加数据 我可以做到这一点 scatter px scatter line px line fig go Figure data scat
  • 如何删除未加权有向图中的循环,以使边数最大化?

    令 G 为包含环的未加权有向图 我正在寻找一种算法 它可以找到 创建所有非循环图 G 由 G 中的所有顶点和 G 的边子集组成 足够小以使 G 非循环 更正式 所需的算法消耗 G 并创建一组非循环图 S 其中 S 中的每个图 G 满足以下属
  • 将 HashMap 序列化为 JSON 字符串,同时避免 Java 中的某些字段

    我有一张地图如下 Map map new HashMap
  • Django filter_horizo​​ntal 形式

    在管理定义属性filter horizo ntal中可以指定 使用 ManyToMany 字段的小部件创建很酷的 javascript 我 想在我的模型表单中使用这样的小部件 我该如何指定这一点 http www hoboes com Mi
  • vuetify中如何防止canvas溢出卡并使其响应?

    Context 您好 我正在尝试在 vuetify 中使用 Fabricjs Canvas 并使其在所有屏幕中看起来响应灵敏 但目前 我面临一个问题 画布没有根据卡片重新调整大小 而是溢出了卡片 我尝试过使用 v responsive 但它
  • 从jsp中合并表单对象时,Spring mvc丢失依赖集合的id

    我有以下控制器返回视图 RequestMapping value admin adminUsers method RequestMethod GET public String adminUsers ModelMap model HttpS
  • Google Contacts API 查询 n 个热门联系人

    有没有办法只查询n个热门联系人 例如 http www google com m8 feeds contacts default full alt json max results 50 popular true 这只会返回 50 个热门联
  • 你如何确定什么是压倒你的风格的? [复制]

    这个问题在这里已经有答案了 当摆弄示例代码的样式时 我发现代码的样式将覆盖我的样式 因为它们将使用更高优先级的引用 例如 div class gt class 我会遇到这样的情况 我如何找出哪种风格覆盖了我的风格 我想避免使用 import
  • 获取 Parse.com JS 查询中每个字段的最新记录

    我的 Parse 数据库中有一个表 其中包含 validFrom 和 uniqueId 列 可以有多个记录具有相同的 uniqueId 如名称 我必须使用什么查询来获取给定的 uniqueId 集的具有最新 validFrom 的项目 我尝
  • O(n^2) 与 O(n) 中的算法 [重复]

    这个问题在这里已经有答案了 我是计算机科学的新手 刚刚开始使用伪代码 我有一些问题 这是我这个学期的第三周 大部分时间都是自学 我有一些疑问 O n 2 与 O n 算法有什么区别 同样 O n log n 是什么 和 n 2 到目前为止