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

前言

进入代码世界已经有一阵了,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取代所有加法常数

举个例子

c 复制代码
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)

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

空间复杂度

至于空间复杂度和时间复杂度的算法一样,就不过多叙述


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

相关推荐
郝学胜-神的一滴11 分钟前
C++中的`auto`与`std::any`:功能、区别与选择建议
开发语言·c++·程序人生·算法
Rain_is_bad1 小时前
初识c语言————排序方法
c语言·开发语言·数据结构
极客BIM工作室2 小时前
老生常谈智能指针:《More Effective C++》的条款28
开发语言·c++
一支闲人2 小时前
C语言相关简单数据结构:顺序表
c语言·数据结构·基础知识·适用新手小白
嘟爸教编程3 小时前
C++少儿编程(二十二)—条件结构
开发语言·c++
霖003 小时前
FPGA的PS基础1
数据结构·人工智能·windows·git·算法·fpga开发
幸幸子.4 小时前
LeetCode 组合总数
c++·算法·leetcode
☆璇4 小时前
【C++】哈希
c++·算法·哈希算法
数据智能老司机5 小时前
图算法趣味学——桥和割点
数据结构·算法·云计算
菜就多练,以前是以前,现在是现在5 小时前
Codeforces Round 1042 (Div. 3)
c++·算法