算法的基本概念和复杂度

目录

  • 一. 算法的基本概念
    • 1.1 什么是算法
    • 1.2 算法的五个特性
    • 1.3 怎么才算好的算法
  • 二. 算法的时间复杂度
  • 三. 算法的空间复杂度

\quad

一. 算法的基本概念

\quad

在这里插入图片描述

\quad

1.1 什么是算法

在这里插入图片描述
算法可以用自然语言来描述, 也可以用伪代码和代码来描述

\quad

1.2 算法的五个特性

有穷性, 一个算法必须总在执行有穷步之后结束,且每一步都可在有穷时间内完成。

在这里插入图片描述
所以死循环就不是算法

\quad
\quad

确定性, 算法中每条指令必须有确切的含义,对于相同的输入只能得出相同的输出。

在这里插入图片描述
按照年龄来排会得到下面两个结果
解决方法可以是岁数相同的话, 就按金额来排

\quad
\quad

可行性。算法中描述的操作都可以通过已经实现的基本运算执行有限次来实现。

可行性说白了就是可以实现的

输入。一个算法有零个或多个输入,这些输入取自于某个特定的对象的集合。
输出。一个算法有一个或多个输出,这些输出是与输入有着某种特定关系的量。

\quad
\quad

1.3 怎么才算好的算法

\quad

1.正确性。算法应能够正确地解决求解问题。

2.可读性。算法应具有良好的可读性,以帮助人们理解。(多写注释)

3.健壮性。输入非法数据时,算法能适当地做出反应或进行处理,而不会产生莫名其妙的输出结果。

4.高效率(时间复杂度)与低存储量需求(空间复杂度)

在这里插入图片描述

\quad

二. 算法的时间复杂度

\quad

在这里插入图片描述
\quad
\quad
在这里插入图片描述
\quad
\quad

在这里插入图片描述

在这里插入图片描述
在外面套个O

\quad
\quad
重点, 判断时间复杂度
在这里插入图片描述
在这里插入图片描述
\quad
\quad

在这里插入图片描述
\quad
\quad
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

\quad

三. 算法的空间复杂度

\quad

在这里插入图片描述
n是问题规模, 不管n的值是如何变化, 这个算法在执行的过程当中它所需要的内存空间大小都是固定不变的

算法所需的内存空间为常量, 称为算法原地工作

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

虽然都是n,a,b,c但是每一次调用都是开辟新的空间

在这里插入图片描述
空间复杂度=递归调用的深度

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/541597.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙视频播放的实现

文章目录 前言播放效果视频播放的实现总结 一、前言 现在市面上很多应用都跟视频有关,那么在鸿蒙系统上怎么来播放视频呢,今天就讲解视频播放控件,让你也能快速地进行视频播放功能开发。 最后呢,我会提供一个鸿蒙中涉及的主要…

elasticsearch篇:DSL查询语法

1.DSL查询文档 众所周知,elasticsearch的查询依然是基于JSON风格的DSL来实现的。 1.1. DSL查询分类 Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。常见的查询类型包括: 查询所有:查询出…

Pytest全局变量的使用详解

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 这里重新阐述下PageObject设计模式: PageObject设计模式是selenium自动化最成熟&…

Html+threejs数字孪生三维场景实现

程序示例精选 Htmlthreejs数字孪生三维场景实现 如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助! 前言 这篇博客针对《Htmlthreejs数字孪生三维场景实现》编写代码,代码整洁,规则&#xf…

练习题手撕总结

基础篇 1.基础知识(时间复杂度、空间复杂度等) 2.线性表(顺序表、单链表) 3.双链表、循环链表 4.队列 5.栈 6.递归算法 7.树、二叉树(递归、非递归遍历) 8.二叉搜索树(BST) 9.二分查…

鸿蒙Next-Grid布局

鸿蒙中的Grid布局类似于前端中的栅格布局 4.0 Grid 文档中心 在Grid组件中只能放GridItem组件 Entry Component struct GridCase {build() {Grid() {GridItem() {GridCaseItem()}GridItem() {GridCaseItem()}GridItem() {GridCaseItem()}GridItem() {GridCaseItem()}}.width…

面试秒过!测试老司机揭秘写好简历的7个细节!

咱们上次说到(详见《一位做过HR的测试老司机带你换工作,简历回复率飙升》)选好了要投的公司,然后就是准备简历的问题了。简历是HR对候选人的第一印象,一个有经验的HR初筛一份2页A4纸的简历通常只有几十秒的时间&#x…

OpenCV(八)——基本线条操作

基本线条操作 OpenCV中提供了基本的线条的操作,包括画直线、画矩形、画圆形等。 (1)画直线,在OpenCV中利用line()画直线,形式为image_with_line cv2.line(image, start_point, end_point, color, thickness)。line(…

CodeTop day2

class Solution {public ListNode reverseKGroup(ListNode head, int k) {ListNode dummy new ListNode(0);//设置虚拟头节点dummy.next head;ListNode pre dummy;//让起始和结束的k个节点从类似虚拟节点的头节点出发ListNode end dummy;while(end.next!null){for (int i0;…

云原生(二)、Docker基础

Docker Docker 是一种开源的容器化平台,用于开发、部署和运行应用程序。它允许开发者将应用程序及其所有依赖项打包到一个可移植的容器中,这个容器可以在任何支持 Docker 的环境中运行,无论是开发人员的个人笔记本电脑、测试环境、生产服务器…

【C++设计模式】UML图的介绍及其画法

文章目录 前言一、UML图的介绍1.1 UML图是什么1.2 UML图的作用 二、UML图的画法2.1 最简单的UML图2.2 继承的UML图2.3 关联关系2.4 聚合关系2.5 组合关系2.6 依赖关系 总结 前言 在软件开发过程中,设计模式是一种被广泛应用的方法,它为解决特定问题提供…

蓝桥杯--冶炼金属

目录 一、题目 二、解决代码 (1)版本一(报错:超时) 代码分析 (2)版本二(不会超时) 代码分析 (3)版本三(最终精简版)…