《重生到现代之从零开始的数据结构生活》—— 复杂度

news/2024/10/8 7:11:34 标签: 数据结构, 生活, c++

前言

进入代码世界已经有一阵了,C语言学的差不多了打算看看数据结构

以前都没想过我能学到这嘞哈哈哈哈

所以,《重生到现代之从零开始的数据结构生活》开始啦

数据结构

我们天天说数据结构怎么怎么了,那什么是数据结构你知道吗

数据结构(Data Structure)是计算机存储、组织数据的⽅式,指相互之间存在⼀种或多种特定关系的数据元素的集合

这么说可能有点抽象了,但是如果举一个例子:int arr[3]={0};不就是数据元素的集合吗,没错,他就是数据结构的一种,不过我们会有很多更为复杂的情况,只要这种简单的肯定是不够的,这就是我们学习数据结构的原因

算法

算法(Algorithm):就是定义良好的计算过程,他取⼀个或⼀组的值为输⼊,并产⽣出⼀个或⼀组值作为 输出。简单来说算法就是⼀系列的计算步骤,⽤来将输⼊数据转化成输出结果。

简单来说就是我们写的每一个成熟的代码,都是某种算法

但是我对他的了解也不深,所以只能讲解到这了

复杂度

之前在牛客上面刷题的时候,我写的代码就经常和讨论区的不一样

我的代码就会很复杂,逻辑也会很冗杂

但是当时的我并不care,想着把题目完成就行了,管他这么多,反正又不是我算

等到我打开一些对复杂度有要求的的题的时候我就懵了

不是哥们,我咋写代码你也管啊

至于那他怎么管,用什么管,管的标准是什么

让我们看看复杂度吧

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

时间复杂度主要衡量⼀个算法的运⾏快慢,⽽空间复杂度主要衡量⼀个算法运⾏所需要的额外空间

其实从开始我说的大家也能看出来,有很多的地方都有在使用复杂度这一概念

在时间复杂度和空间复杂度中,由于现代科技的发达,让我们对空间的要求没有这么高,所以,复杂度基本指的就是时间复杂度

时间复杂度

在计算机科学中,算法的时间复杂度是⼀个函数式T(N),它定量描述了该算法的运⾏时间

实际上空间复杂度是在描述程序的时间效率,因为没有固定的时间,运行的时间可能会随着环境,cpu,内存等因素改变,所以主要算的就是运行的效率

时间复杂度的计算

计算复杂度的时候,我们不能精确的算出来程序执行的次数,因为很麻烦,所以我们只需要算出大概的执行次数然后比较他们执行次数的量级就行了

执行次数就是程序运行了多少次,程序没运行一次都算

复杂度的表⽰通常使⽤⼤O的渐进表示法

大O的渐进表示法

⼤O符号(Big O notation):是⽤于描述函数渐进⾏为的数学符号

大O的规则

  • 时间复杂度函数式T(N)中,只保留最⾼阶项,去掉那些低阶项,因为当N不断变⼤时, 低阶项对结果影响越来越⼩,当N⽆穷⼤时,就可以忽略不计了
  • 如果最⾼阶项存在且不是1,则去除这个项⽬的常数系数,因为当N不断变⼤,这个系数 对结果影响越来越⼩,当N⽆穷⼤时,就可以忽略不计了
  • T(N)中如果没有N相关的项⽬,只有常数项,⽤常数1取代所有加法常数

举个例子

void Func2(int N) 
{ 
    int count = 0; //1(后面的数字就是运行的次数)
  for (int k = 0; k < 2 * N ; ++ k) 
{
     ++count; //2n
 }
     int M = 10; //1
 while (M--) 
 {
      ++count;//10
   }
       printf("%d\n", count);//1

T (N) = 2N + 13

但是根据大O渐进表示法来看

时间复杂度就是:O(N)

这就是时间复杂度计算的过程


今天的知识讲解完啦,如果觉得有用可以点一下赞和关注,也可以先收藏以防需要时找不到哦,当然如果作者写的哪里有问题欢迎指出,我们一起进步!!!
祝看到这里的人天天开心哦(笔芯)


http://www.niftyadmin.cn/n/5693760.html

相关文章

[C++] 小游戏 征伐 SLG DNF 0.0.2 版本 zty出品

目录 大家好~ 今天zty带来的是 War and Expedition SLG DNF 0.0.2 version 讲人话就是 War and Expedition &#xff08;游戏名&#xff0c;即征伐&#xff09; SLG &#xff08;即时战略类游戏&#xff09; DNF &#xff08;Did Not Finish&#xff09; 0.0.2 &#xff…

利用Python输入n个用空格分隔的整数 ← list(map(int,input().split()))

在算法设计中&#xff0c;经常需要输入 n 个用空格分隔的整数。现对其 Python 代码进行总结&#xff1a; ● 当 n1 时&#xff1a; xint(input()) print(x) ● 当 n2 时&#xff1a; x,ymap(int,input().split()) #Enter numbers separated by space sumxy print(sum) in: 1…

【Docker】04-Docker部署Java后端

1. 运行MySQL镜像 hm.cnf [client] default_character_setutf8mb4 [mysql] default_character_setutf8mb4 [mysqld] character_set_serverutf8mb4 collation_serverutf8mb4_unicode_ci init_connectSET NAMES utf8mb4运行MySQL镜像 docker run -d --name mysql -p 3307:3306…

swift使用internvl2微调ocr文字检测(目标检测)

详细记录swfit微调interVL2-8B多模态大模型进行目标检测(附代码)-CSDN博客文章浏览阅读2k次,点赞45次,收藏14次。目标检测任务已经不是一个新鲜事了,但是多模态大模型作目标检测任务并不多见,本文详细记录swfit微调interVL2-8B多模态大模型进行目标检测的过程,旨在让更多…

Notepad++ 怎么让行行之间只保留一空行

在 Notepad 中&#xff0c;您可以使用正则表达式查找和替换功能来实现您的需求。以下是步骤和相应的正则表达式&#xff1a; 一、打开您的文本文件。 二、按下 Ctrl H 快捷键打开查找和替换对话框。 三、在“查找模式”部分&#xff0c;选择“正则表达式”选项。 四、输入…

Steam Deck掌机可装“黑苹果” 开发者成功安装macOS 15 Sequoia

在Steam Deck掌机上运行Windows 11相对轻松&#xff0c;但要让其成功搭载“黑苹果”系统则颇具挑战性。近日&#xff0c;有博主勇于尝试&#xff0c;将macOS 15 Sequoia安装到了Steam Deck上。 开发者kaitlyn在X平台上分享道&#xff1a;“在朋友们的鼎力相助下&#xff0c;我…

MySQL存储过程原理、实现及优化

目录 第一章 存储过程概述 1.1 存储过程定义与作用 1.2 存储过程的优点与缺点 1.2.1 优点 1.2.2 缺点 1.3 MySQL中的存储过程 第二章 存储过程的原理 2.1 存储过程的执行流程 2.1.1 编译阶段 2.1.2 存储阶段 2.1.3 执行阶段 2.2 存储过程的存储机制 2.3 存储过程与…

leetcode 刷题day36动态规划Part05 背包问题(完全背包、518. 零钱兑换 II、377. 组合总和 Ⅳ、70. 爬楼梯 (进阶))

完全背包 完全背包的每件商品都有无限个&#xff0c;和01背包的一不同主要体现在遍历顺序上。为了保证每个物品仅被添加一次&#xff0c;01背包内嵌的循环是从大到小遍历。而完全背包的物品是可以添加多次的&#xff0c;所以要从小到大去遍历。 518. 零钱兑换 II 思路&#…