有个网站可以学做ppt/怎么在百度上投放广告

有个网站可以学做ppt,怎么在百度上投放广告,网站建设的基本流程图,安平营销型网站建设费用引言 详细介绍什么是时间复杂度和空间复杂度。 前言:为什么要学习时间复杂度和空间复杂度 算法在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源。因此衡量一个算法的好坏,一般是从时间和空间两个维度来衡量的,即时…

引言

        详细介绍什么是时间复杂度和空间复杂度。

前言:为什么要学习时间复杂度和空间复杂度

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

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

一、时间复杂度 

问:时间复杂度是程序运行的时间吗?                     

        这是一个很严重的问题。这里先肯定回答:不是

仔细往下看,最后你亲自来回答这个问题                                

1.什么是时间复杂度

        时间复杂度是对一个算法运行时间长短的一种度量它描述的是随着输入数据规模 n 的增大,算法执行时间的增长趋势,而不是具体的运行时间。因为具体运行时间会受到硬件、编程语言、编译器等多种因素的影响,所以使用时间复杂度可以更客观地评估算法的效率。

    

程序执行的时间  =  二进制指令运行的时间 * 执行的次数 

        因为程序在计算机中二进制指令的运行时间是非常快的,可以假定时间是一样的,所以使用代码的执行次数来等效程序的执行时间 

2.表示方法(大O表示法)

        通常使用大 O 符号(Big O notation)来表示时间复杂度。大 O 符号表示的是算法执行时间的上界,即最坏情况下的时间复杂度。看到这里你可能不知道什么是大O表示法,跟随下面的案例来理解,就明白什么是大O表示法了。

        推导大O阶规则

        1. 时间复杂度函数式 T(N) 中,只保留最高阶项,去掉那些低阶项,因为当 N 不断变⼤时, 低阶项对结果影响越来越⼩,当 N 无穷大时,就可以忽略不计了。

         2. 如果最高阶项存在且不是 1 ,则去除这个项目的常数系数,因为当 N 不断变大,这个系数对结果影响越来越小,当 N 无穷大时,就可以忽略不计了。

         3.T(N) 中如果没有 N 相关的项目,只有常数项,用常数 1 取代所有加法常数。

3.常见的时间复杂度

1. O(1):常数时间复杂度

代码一:

        推导一下这段代码的执行次数T与n之间的函数关系


void Func2(int N)
{int count = 0;for (int k = 0; k < 2 * N; ++k){++count;}int M = 10;while (M--){++count;}printf("%d\n", count);
}

        T(N)= 2 * N + 10;

当N足够大时,从1 增长到10000000,会发现2 和10 对次数的影响不是很大,所以

        1. 如果最高阶项存在且不是 1 ,则去除这个项目的常数系数,因为当 N 不断变大,这个系数对结果影响越来越小,当 N 无穷大时,就可以忽略不计了。

        2. T(N) 中如果没有 N 相关的项目,只有常数项,用常数 1 取代所有加法常数。

代码二: 

void Func4(int N)
{int count = 0;for (int k = 0; k < 100; ++k){++count;}printf("%d\n", count);
}

        观察这段代码,会发现n和程序的执行次数是没有关系的(T(N)= 100),这时就认为时间复杂度为O(1);

2. O(n):线性时间复杂度

代码一:

        算法的执行时间与输入数据规模 n 成正比。

#include <stdio.h>// 计算数组元素的和
int sum(int arr[], int n) {int total = 0;for (int i = 0; i < n; i++) {total += arr[i];}return total;
}int main() {int arr[] = {1, 2, 3, 4, 5};int n = sizeof(arr) / sizeof(arr[0]);int result = sum(arr, n);printf("Sum = %d\n", result);return 0;
}

        在 sum 函数中,需要遍历数组中的每个元素,因此循环的执行次数与数组的长度 n 成正比,时间复杂度为 O(n)。即因为是要循环n次,所以是O(n)。

代码二: 

const char* strchr(const char* str, int character)
{const char* p_begin = 's';while (*p_begin != character){if (*p_begin == '\0')return NULL;p_begin++;}return p_begin;

 strchr执行的基本操作次数:

1)若要查找的字符在字符串第⼀个位置,则: T(N) = 1

2)若要查找的字符在字符串最后的⼀个位置, 则: T(N) = N

3)若要查找的字符在字符串中间位置,则:N T(N) = 2 因此:strchr的时间复杂度分为: 最好情况: O(1)

最坏情况: O(N)

平均情况: O(N)



通过上面我们会发现,有些算法的时间复杂度存在最好、平均和最坏情况。

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

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

最好情况:任意输入规模的最小运行次数(下界)

大O的渐进表示法在实际中⼀般情况关注的是算法的上界,也就是最坏运行情况。


所以上面这段代码的时间复杂度是O(N)

3. O(n^2):平方时间复杂度

        算法的执行时间与输入数据规模 n 的平方成正比。

参考代码:
#include <stdio.h>// 冒泡排序
void bubbleSort(int arr[], int n) {for (int i = 0; i < n - 1; i++) {for (int j = 0; j < n - i - 1; j++) {if (arr[j] > arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}
}int main() {int arr[] = {64, 34, 25, 12, 22, 11, 90};int n = sizeof(arr) / sizeof(arr[0]);bubbleSort(arr, n);for (int i = 0; i < n; i++) {printf("%d ", arr[i]);}printf("\n");return 0;
}

粗略理解:在 bubbleSort 函数中,使用了两层嵌套循环,因此时间复杂度为 O(n^2)。

细节分析:

        1)若数组有序,则: T(N)=N

        2)若数组有序且为降序,则: T(N)=  1 + 2 + 3 + .......+ n - 1 = ((n - 1) * (1 + n - 1) ) / 2   即等差数列求和公式:a1 = 1, an = n - 1, 共n - 1项。

        T(N)= (n^2) * 1 / 2 + n / 2;

       因此:BubbleSort的时间复杂度取最差情况为: O(N ^ 2)

4. O(log n ):复杂度

参考代码:
void func5(int n)
{int cnt = 1;while (cnt < n){cnt *= 2;}
}

当n= 2 时,执行次数为1

当n= 4 时,执行次数为2

当n=16时,执行次数为4

假设执行次数为x,则 2^x = x  因此执行次数: x=logn

因此:func5的时间复杂度取最差情况为:O(log n) 

这里为什么不写

因为这个在输入法上不好打出来

注意:在有的地方会把  logn  写成lgn,严格上来说这个是不对的

        当n接近无穷大时,底数的大小对结果影响不大。因此,一般情况下不管底数是多少都可以省略不写。

还有其他的时间复杂度如:n*logn, n!(n的阶乘),在以后的学习中肯定会遇到

二、空间复杂度

 1.什么是空间复杂度

定义

        空间复杂度是对一个算法在运行过程中临时占用存储空间大小的一种度量,它描述的是随着输入数据规模 n 的增大,算法所需额外存储空间增长趋势。

注意:函数栈帧的创建和销毁是不算入空间复杂度的,即 创建函数 和 销毁函数 是不算入时间复杂度的。

表示方法

        同样使用大 O 符号来表示空间复杂度。

常见的空间复杂度及其示例代码

1. O(1):常数空间复杂度

算法在运行过程中所需的额外存储空间是固定的,不随输入数据规模 n 的变化而变化。

#include <stdio.h>// 计算数组元素的和
int sum(int arr[], int n) {int total = 0;for (int i = 0; i < n; i++) {total += arr[i];}return total;
}int main() {int arr[] = {1, 2, 3, 4, 5};int n = sizeof(arr) / sizeof(arr[0]);int result = sum(arr, n);printf("Sum = %d\n", result);return 0;
}

        在 sum 函数中,只使用了一个额外的变量 total 来存储数组元素的和,因此空间复杂度为 O(1)。

2. O(n):线性空间复杂度

算法在运行过程中所需的额外存储空间与输入数据规模 n 成正比。

#include <stdio.h>
#include <stdlib.h>// 复制数组
int* copyArray(int arr[], int n) {int *newArr = (int*)malloc(n * sizeof(int));for (int i = 0; i < n; i++) {newArr[i] = arr[i];}return newArr;
}int main() {int arr[] = {1, 2, 3, 4, 5};int n = sizeof(arr) / sizeof(arr[0]);int *newArr = copyArray(arr, n);for (int i = 0; i < n; i++) {printf("%d ", newArr[i]);}printf("\n");free(newArr);return 0;
}

在copyArray 函数中,使用了 malloc 函数动态分配了一个大小为 n 的数组,因此空间复杂度为 O(n)。 

5. 常见复杂度对比

  

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

        但是,在算法竞赛中,往往需要有一种思想:用时间换空间,或者用空间换时间。

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

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

相关文章

32单片机——LED

LED原理图如图所示&#xff1a; 代码 DS0和DS1每过500ms一次交替闪烁&#xff0c;实现类似跑马灯的效果 GPIO输出配置步骤 &#xff08;1&#xff09;使能对应GPIO时钟 STM32在使用任何外设之前&#xff0c;我们都要先使能其时钟&#xff08;下同&#xff09;。本实验用到…

贪心算法和遗传算法优劣对比——c#

项目背景&#xff1a;某钢管厂的钢筋原材料为 55米&#xff0c;工作需要需切割 40 米&#xff08;1段&#xff09;、11 米&#xff08;15 段&#xff09;等 4 种规格 &#xff0c;现用贪心算法和遗传算法两种算法进行计算&#xff1a; 第一局&#xff1a;{ 40, 1 }, { 11, 15…

【Java篇】一法不变,万象归一:方法封装与递归的思想之道

文章目录 Java 方法的使用&#xff1a;从基础到递归的全面解析一、方法的概念及使用1.1 什么是方法 (method)?1.2 方法定义1.3 方法调用的执行过程1.4 实参和形参的关系1.5 没有返回值的方法 二、方法重载2.1 为什么需要方法重载2.2 方法重载的概念2.2.4 C 和 Java 的比较&…

实验5 逻辑回归

实验5 逻辑回归 【实验目的】掌握逻辑回归算法 【实验内容】处理样本&#xff0c;使用逻辑回归算法进行参数估计&#xff0c;并画出分类边界 【实验要求】写明实验步骤&#xff0c;必要时补充截图 1、参照“2.1梯度下降法实现线性逻辑回归.ipynb”和“2.2 sklearn实现线性逻辑…

思维训练让你更高、更强 |【逻辑思维能力】「刷题训练笔记」假设法模式逻辑训练题(1-5)

每日一刷 思维训练让你更高、更强&#xff01; 题目1 谁在说谎&#xff0c;谁拿走了零钱&#xff1f; 姐姐上街买菜回来后&#xff0c;就随手把手里的一些零钱放在了抽屉里&#xff0c;可是&#xff0c;等姐姐下午再去拿钱买菜的时候发现抽屉里的零钱没有了&#xff0c;于是&…

用python代码将excel中的数据批量写入Json中的某个字段,生成新的Json文件

需求 需求&#xff1a; 1.将execl文件中的A列赋值给json中的TrackId&#xff0c;B列赋值给json中的OId 要求 execl的每一行&#xff0c;对应json中的每一个OId json 如下&#xff1a; {"List": [{"BatchNumber": "181-{{var}}",// "Bat…

【Python】dash-fastapi前后端搭建

概述 项目中需要快速搭建一个前后端系统&#xff0c;涉及到dash-fastapi架构的时候&#xff0c;对该架构的时候进行总结。本文主要总结的是对该架构的基本使用&#xff0c;后续再对该架构的项目源码进行总结分析 此处实现一个小的demo&#xff0c;迷你任务管理器&#xff0c;…

IDEA中链接使用mysql数据库

一、连接mysql 1. 打开idea&#xff0c;在右上角侧边栏有数据库database插件&#xff0c;打开侧边栏点击加号->数据源&#xff0c;可以看到支持很多数据库&#xff0c;选择mysql。 2. 首次使用需要下载驱动程序&#xff0c;不然连接数据库会报错。找到mysql&#xff0c;点击…

程序编译生成的文件

目录 .i 文件 .s 文件 .o文件 总结 在 C 编程中&#xff0c;.i、.s和 .o 文件是编译过程中生成的不同阶段的文件&#xff0c;它们代表不同的含义&#xff1a; .i 文件 全称 &#xff1a;预处理后的文件&#xff08;Intermediate File&#xff09;。 含义&#xff1a;.i文件…

[S32K]SPI

SpiShiftClockidleLevel: CLK空闲时电平(CPOL)&#xff1b; SpiDataShifrEdge:数据移位边沿(CPHA)&#xff1b; SpiDataWidth: SpiTransferStart: MSB(高位起始)&#xff0c;LSB(低位起始)&#xff1b;&#xff1b; SpiHwUnit: 这是一个具体的硬件&#xff1f; SpiDataShiftE…

系统思考:客户价值

“真正的市场竞争&#xff0c;不是比谁更能制造产品&#xff0c;而是比谁更能创造价值。” ——杰夫贝索斯 在组织辅导中&#xff0c;我经常问团队一个问题&#xff1a;“我们的客户是谁&#xff1f;”大多数人的第一反应是——“支付费用的就是客户。” 这在过去的市场扩张阶…

ArcGIS Pro 车牌分区数据处理与地图制作全攻略

在大数据时代&#xff0c;地理信息系统&#xff08;GIS&#xff09;技术在各个领域都有着广泛的应用&#xff0c;而 ArcGIS Pro 作为一款功能强大的 GIS 软件&#xff0c;为数据处理和地图制作提供了丰富的工具和便捷的操作流程。 车牌数据作为一种重要的地理空间数据&#xf…

OpenCV图像加权函数:addWeighted

1 addWeighted函数 在OpenCV 里&#xff0c;addWeighted 函数的作用是对两个图像进行加权求和&#xff0c;常用于图像融合、图像过渡等场景。函数如下&#xff1a; cv2.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]])2 参数解释 src1&#xff1a;第一个输入图…

Tcp网络通信的基本流程梳理

先来一张经典的流程图 接下介绍一下大概流程&#xff0c;各个函数的参数大家自己去了解加深一下印象 服务端流程 1.创建套接字&#xff1a;使用 socket 函数创建一个套接字&#xff0c;这个套接字后续会被用于监听客户端的连接请求。 需要注意的是&#xff0c;服务端一般有俩…

leecode797.所有可能的路径

深度优先搜索 class Solution { private:vector<vector<int>> result;vector<int> temp;void allPathsSourceTarget(vector<vector<int>> &graph,int v){if(vgraph.size()-1)result.push_back(temp);else{for(auto& adjVertex:graph[v]…

第八节:红黑树(初阶)

【本节要点】 红黑树概念红黑树性质红黑树结点定义红黑树结构红黑树插入操作的分析 一、红黑树的概念与性质 1.1 红黑树的概念 红黑树 &#xff0c;是一种 二叉搜索树 &#xff0c;但 在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是 Red和 Black 。 通过对 任何…

微信小程序threejs三维开发

微信小程序threejs开发 import * as THREE from three; const { performance, document, window, HTMLCanvasElement, requestAnimationFrame, cancelAnimationFrame, core, Event, Event0 } THREE .DHTML import Stats from three/examples/jsm/libs/stats.module.js; im…

jupyter无法转换为PDF,HTMLnbconvert failed: Pandoc wasn‘t found.

无法转为PDF 手动下载工具 https://github.com/jgm/pandoc/releases/tag/3.6.3 似乎跟我想的不大一样&#xff0c;还有新的报错 https://nbconvert.readthedocs.io/en/latest/install.html#installing-tex 不知道下的啥玩意儿 sudo apt-get install texlive-xetex texlive-fon…

使用 Excel 实现绩效看板的自动化

引言 在日常工作中&#xff0c;团队的绩效监控和管理是确保项目顺利进行的重要环节。然而&#xff0c;面临着以下问题&#xff1a; ​数据分散&#xff1a;系统中的数据难以汇总&#xff0c;缺乏一个宏观的团队执行情况视图。​看板缺失&#xff1a;系统本身可能无法提供合适…

02 windows qt配置ffmpeg开发环境搭建

版本说明 首先我使用ffmpeg版本是4.2.1 QT使用版本5.14.2 我选择是c编译 在02Day.pro⾥⾯添加ffmpeg头⽂件和库⽂件路径 win32 { INCLUDEPATH $$PWD/ffmpeg-4.2.1-win32-dev/include LIBS $$PWD/ffmpeg-4.2.1-win32-dev/lib/avformat.lib \$$PWD/ffmpeg-4.2.1-win32-dev/l…