数据结构系列-算法的时间复杂度算法效率

news2024/11/20 9:45:12

🌈个人主页:会编程的果子君 

💫个人格言:“成为自己未来的主人~”  

算法效率

如何衡量一个算法的好坏

如何衡量一个算法的好坏,比如对于以下斐波那契数列:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

long long Fib(int N) {
	if (N < 3) {
		return 1;
	}
	return Fib(N - 1) + Fib(N - 2);
}
int main()
{



	return 0;
}

斐波那契数列的递归实现方式非常简洁,但简洁一定好吗?那该如何衡量其好与坏呢?

算法的复杂度

算法在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源,因此衡量一个算法是从时间和空间两个维度衡量的,即时间复杂度和空间复杂度。

时间复杂度主要衡量一个算法的运行快慢,而空间复杂度主要衡量一个算法运行所需要的额外空间,计算机发展的早期,计算机的存储容量很小,所以对空间复杂度很是在乎,但是经过计算机行业的迅速发展,计算机容量已经发到了很高的程度,所以我们如今已经不需要再特别关注一个算法的空间复杂度。

时间复杂度

时间复杂度的概念

时间复杂度的定义:在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间,一个算法执行所耗费的时间,从理论上来说,是不可能算出来的,只有你把你的程序放在机器上跑起来,才能知道,但是我们需要每个算法都上机测试吗?是可以都上机测试,但是这很麻烦,所以才有了时间复杂度这种分析方式,一个算法所花费的时间与其中语句的执行次数成正比例,算法中的基本操作的执行次数,为算法的时间复杂度。

即:找到某条基本语句与问题规模N之间的数学表达式,就是算出了该算法的时间复杂度。

//时间复杂度计算
void Func1(int N) {
	int count = 0;
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < N; j++) {
			count++;
		}
	}
	for (int k = 0; k < 2 * N; k++) {
		count++;
	}
	int m = 10;
	while (m--) {
		count++;
	}
}

实际中我们计算时间复杂度时,我们其实并不一定要计算精确的执行次数,而只需要大概执行次数,那么在这里我们使用大O的渐进表示法。

大o的渐进表示法

大O符号:用于描述函数渐进行为的数学符号

推导大O阶方法:

1.用常数1取代运行时间中的所有加法常数

2.在修改后的运行次数函数中,只保留最高阶项。

3.如果最高阶存在且不是1,则去掉与这个项目相乘的常数,得到的结果就是大O阶

使用大O的渐进表示法以后,Func1的时间复杂度

O(N^2)

通过上面我们会发现大O的渐进表示发去掉了那些对结果影响不大的项,简洁明了的表示出了执行次数,另外有些算法的时间复杂度存在最好,平均和最坏情况。

最坏情况:任意输入规模的最大运行次数

平均情况:任意输入规模的期望运行次数

最好情况:任意输入的最小运行次数

在实际情况中一般关注的是算法的最坏运行情况,所以数组中搜索数据时间复杂度为O(N)

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阿里云优惠券在哪里领取?

随着云计算技术的快速发展&#xff0c;越来越多的企业和个人开始选择使用云服务来满足他们的数据存储、计算、网络等需求。阿里云作为国内领先的云计算服务提供商&#xff0c;一直以其稳定、高效、安全的服务赢得了广大用户的信赖。而在购买阿里云产品时&#xff0c;使用优惠券…

mysql之基本概念与安装

一 数据库的基本概念 1.1 数据 记录个体的信息 1.2 表 存放信息的集合&#xff0c;行于与列 1.3 数据库 数据库就是表的集合。它是以一定的组织方式存储的相互有关的数据集合 1.4 数据库管理系统 数据库管理系统&#xff08;DatabaseManagementSystem&#xff0c;DBMS&…

如何申请香港信用卡?

第一种方法就是申请香港的虚拟卡 在线上申请&#xff0c;方便快捷&#xff0c;下卡快&#xff0c;可以绑定香港apple id&#xff0c;香港paypal等等 点击获取线上香港信用卡 第二种线下办理方法 如何申请香港个人卡 香港个人银行卡(等同于大陆的借记卡9)&#xff0c;开户限制…

【Go实现】实践GoF的23种设计模式:解释器模式

上一篇&#xff1a;【Go实现】实践GoF的23种设计模式&#xff1a;适配器模式 简单的分布式应用系统&#xff08;示例代码工程&#xff09;&#xff1a;https://github.com/ruanrunxue/Practice-Design-Pattern–Go-Implementation 简介 解释器模式&#xff08;Interpreter Pat…

【小白入门篇1】GPT到底是怎样练成?

由于具有代表性的OpenAI公司GPT模型并没有开源&#xff0c;所以本章节是参考一些开源和现有课程&#xff08;李宏毅&#xff09;讲解ChatGPT原理。本章没有涉及到很多数学运算&#xff0c;比较适合小白了解GPT到底是怎么练成。GPT的三个英文字母分别代表Generative(生成式)&…

CSS样式,1行文字溢出...省略,2行文字溢出...省略,多行文字溢出...省略

提示&#xff1a;CSS样式文字溢出…省略 文章目录 前言一、1行文字溢出...省略二、2行或多行文字溢出...省略三、1行或多行文字溢出...省略总结 前言 一、1行文字溢出…省略 test.html <!DOCTYPE html> <html lang"en"> <head><meta charset…

Linux中Oracle数据库启动顺序

首先使用oracle用户登录Linux&#xff0c;用lsnrctl status查看监听状态 1、&#xff1a;进入sqlplus $ sqlplus /nolog SQL> 2&#xff1a;使用sysdab角色登录sqlplus SQL> conn /as sysdba 3&#xff1a;启动数据库 SQL> startup 4&#xff1a;打开Oracle监听 …

gitee上传方法,gitee基础命令使用,看一遍就会q(≧▽≦q)

废话不多说&#xff0c;直接上项目演示ψ(&#xff40;∇)ψ 必备工具:Git Bash 首先创建新仓库&#xff1a; 填写仓库名称 起一个合适的名字即可 其他的可以不用填&#xff0c;直接点击创建 然后会跳转到这样的一个页面 然后打开项目文件夹,点击右键,选择 Open Git Bash h…

基于STC12C5A60S2系列1T 8051单片机可编程计数阵列CCP/PCA/PWM模块的捕获模式(外部中断)应用

基于STC12C5A60S2系列1T 8051单片机可编程计数阵列CCP/PCA/PWM模块的捕获模式(外部中断)应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍STC12C5A60S2系列1T 805…

电商爬虫系统|电商数据采集|电商API商品数据采集

1、基本的说明 当初为了在几个电商网站抓取商品信息数据搭建的系统。该系统主要用来抓取电商网站上面的一百个左右品类的商品的价格信息、商品信息和折扣信息等。抓取的电商网站主要是某宝和某东。其他的电商网站抓取信息的方式无外乎这两种。跟其他的示例代码不同&#xff0c…

[Java、Android面试]_12_java访问修饰符、抽象类和接口

文章目录 1. java访问修饰符2. 抽象类和接口2.1 抽象类2.2 接口2.3 抽象类和接口的区别 本人今年参加了很多面试&#xff0c;也有幸拿到了一些大厂的offer&#xff0c;整理了众多面试资料&#xff0c;后续还会分享众多面试资料。 整理成了面试系列&#xff0c;由于时间有限&…

阿里CICD流水线Docker部署,将阿里镜像私仓中的镜像部署到服务器中

文章目录 阿里CICD流水线Docker部署&#xff0c;将阿里镜像私仓中的镜像部署到服务器中一、CICD流水线的初步使用可以看我之前的两篇文章二、添加部署任务&#xff0c;进行Docker部署&#xff0c;创建一个阿里的试用主机1、选择主机部署&#xff0c;并添加服务主机2、创建免费体…

使用蜂鸣器演奏《生日快乐》

一、音的组成 音乐通常由以下几个基本元素组成&#xff1a; 旋律&#xff08;Melody&#xff09;&#xff1a;旋律是一系列连续的音符&#xff0c;通过它们的音高和音长来构成乐曲的主旋律部分。旋律是音乐中最容易被人们记住和感知的部分。 节奏&#xff08;Rhythm&#xff…

如何从零开始拆解uni-app开发的vue项目(一)

uni-app项目分析: 背景:最近接手一个前同事留下的半拉子项目,出拿过来觉得很简单;当我看到app.vue的时候很确定是vue项目,心里不怎么慌,果断安装node.js,然后就去npm ;安装VS code,事实并不是我期盼的那样,或者说根本就不能运行。 报错:应用vs code打开文件,输入命…

【漏洞复现】福建科立迅通信指挥调度平台pwd_update.php SQL注入漏洞 (CVE-2024-2621)

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

如何保障消息一定能发送到RabbitMQ?

我们知道&#xff0c;RabbitMQ的消息最终是存储在Queue上的&#xff0c;而在Queue之前还要经过Exchange&#xff0c;那么这个过程中就有两个地方可能导致消息丢失。第一个是Producer到Exchange的过程&#xff0c;第二个是Exchange到Queue的过程。 为了解决这个问题&#xff0c…

【Transformer】transformer注解

every blog every motto: You can do more than you think. 0. 前言 transformer注解 在过去的一年里&#xff0c;《Attention is all you need》中的transformer一直萦绕在很多人的脑海里。除了在翻译质量上产生重大改进之外&#xff0c;它还为许多其他NLP任务提供了一种新的…

2024年【危险化学品经营单位安全管理人员】新版试题及危险化学品经营单位安全管理人员模拟考试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 危险化学品经营单位安全管理人员新版试题考前必练&#xff01;安全生产模拟考试一点通每个月更新危险化学品经营单位安全管理人员模拟考试题题目及答案&#xff01;多做几遍&#xff0c;其实通过危险化学品经营单位安…

matlab 电机仿真平台GUI

1、内容简介 略 74-可以交流、咨询、答疑 2、内容说明 略 电机仿真平台GUI 包含直流机要加调电压启动、回馈制动、串电阻调速 异步电动机要加串电阻启动、星三角启动、回馈制动模块 3、仿真分析 略 4、参考论文 略

【网安】DDoS / Web漏洞 / CC攻击 / 恶意爬虫

【网安】DDoS攻击&#xff1a;方法、影响与防御策略 写在最前面1.DDoS&#xff08;分布式拒绝服务&#xff09;攻击2. Web 漏洞利用3. CC&#xff08;凭证破解&#xff09;攻击4.恶意爬虫 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻时光&…