首页 > 编程语言 >算法复杂度

算法复杂度

时间:2024-10-22 22:47:29浏览次数:8  
标签:count 复杂度 Fun 算法 时间 空间

文章目录



提示:以下是本篇文章正文内容,下面案例可供参考

一、算法复杂度的概念

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

二、时间复杂度

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

    1. 因为程序运⾏时间和编译环境和运⾏机器的配置都有关系,⽐如同⼀个算法程序,⽤⼀个⽼编译
      器进⾏编译和新编译器编译,在同样机器下运⾏时间不同。
    1. 同⼀个算法程序,⽤⼀个⽼低配置机器和新⾼配置机器,运⾏时间也不同。
    1. 并且时间只能程序写好后测试,不能写程序前通过理论思想计算评估。

1.大O的渐进表示法

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

    1. 时间复杂度函数式T(N)中,只保留最⾼阶项,去掉那些低阶项,因为当N不断变⼤时,
      低阶项对结果影响越来越⼩,当N⽆穷⼤时,就可以忽略不计了。
    1. 如果最⾼阶项存在且不是1,则去除这个项⽬的常数系数,因为当N不断变⼤,这个系数
      对结果影响越来越⼩,当N⽆穷⼤时,就可以忽略不计了。
    1. T(N)中如果没有N相关的项⽬,只有常数项,⽤常数1取代所有加法常数。
void Fun(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) = 2N + 10 ,根据推导规则第3条得出,Fun的时间复杂度为:O(N)

  • ⼤O的渐进表⽰法在实际中⼀般情况关注的是算法的上界,也就是最坏运⾏情况。

  • 最坏情况:任意输⼊规模的最⼤运⾏次数(上界)

  • 平均情况:任意输⼊规模的期望运⾏次数

  • 最好情况:任意输⼊规模的最⼩运⾏次数(下界)

三、空间复杂度

  • 间复杂度也是⼀个数学表达式,是对⼀个算法在运⾏过程中因为算法的需要额外临时开辟的空间。
  • 空间复杂度不是程序占⽤了多少的空间,因为常规情况每个对象⼤⼩差异不会很⼤,所以空间复杂度算的是变量的个数。
  • 空间复杂度计算规则基本跟实践复杂度类似,也使⽤⼤O渐进表⽰法。

注意:函数运⾏时所需要的栈空间(存储参数、局部变量、⼀些寄存器信息等)在编译期间已经确定好了,因此空间复杂度主要通过函数在运⾏时候显式申请的额外空间来确定

long long Fun(size_t N) 
{ 
 if(N == 0) 
 return 1; 
 else
 return Fun(N-1)*N; 
}

Fun递归调⽤了N次,额外开辟了N个函数栈帧,每个栈帧使⽤了常数个空间因此空间复杂度为:O(N)


标签:count,复杂度,Fun,算法,时间,空间
From: https://blog.csdn.net/2401_86588837/article/details/143087714

相关文章

  • 代码随想录算法训练营day22和day23 | 77. 组合 216.组合总和III 17.电话号码的字母
    学习资料:https://programmercarl.com/回溯算法理论基础.html回溯法backtracking:for循环控制递归数量,暴力搜索:组合、切割、子集、排列、棋盘今天学了组合和切割可以画个N叉树的图来帮助理解回溯过程组合又包括1.单个数组(要加startIndex参数)或多个数组;2.数组内有无重复元素;3.数......
  • Spark实现PageRank算法
    详细步骤:1、创建Sparksql环境2、读取数据3、数据切分(分为page列,outLink列)形成表pageDF4、新增pr一列 (给定初始值)  形成表initPrDF5、新增avgPr一列(根据出链关系,求每个页面所分到的Pr)6、分组聚合(将outLink列explode炸开,在按照page分组,然后sum求和,这就是表......
  • 排序算法 —— 快速排序(理论+代码)
    目录1.快速排序的思想2.快速排序的实现hoare版挖坑法前后指针法快排代码汇总3.快速排序的优化三数取中小区间优化三路划分4.快速排序的非递归版本5.快速排序总结1.快速排序的思想快速排序是一种类似于二叉树结构的排序方法。其基本思想为从待排序序列中任取一个......
  • 计算法统计二叉树中度为1的节点个数
    最近学习有关于二叉树类的知识,学习时使用的是C语言。代码如下:include<stdio.h>include<stdlib.h>//添加这一行,包含malloc的声明typedefstructTreeNode{intval;structTreeNode*left;structTreeNode*right;}TreeNode;//创建树节点TreeNode*createNode(in......
  • 代码随想录算法训练营 | 图论理论基础,98. 所有可达路径
    图论理论基础1.图的种类:有向图,无向图,加权有向图,加权无向图;2.度:无向图中有几条边连接该节点,该节点就有几度,在有向图中,每个节点有出度和入度;出度:从该节点出发的边的个数;入度:指向该节点边的个数;3.连通图:在无向图中,任何两个节点都是可以到达的;强连通图:在有向图中,任何两个节点是可以......
  • 【Python-AI篇】数据结构和算法
    1.算法概念1.1什么是数据结构存储,组织数据的方式1.2什么是算法实现业务目的的各种方法和思路算法是独立的存在,只是思想,不依附于代码和程序,可以使用不同语言实现(java,python,c)1.2.1算法的五大特性输入:算法具有0个或多个输入输出:算法至少有1个或多个输出有穷性:算法......
  • KNN算法
    这是内容这是内容###这是内容这是内容###这是内容这是内容###这是内容这是内容###这是内容这是内容###这是内容这是内容###这是内容这是内容###这是内容这是内容###这是内容这是内容###这是内容这是内容###这是内容这是内容###这是内容这是内容###这是内......
  • 【从零开始的LeetCode-算法】884. 两句话中的不常见单词
    句子 是一串由空格分隔的单词。每个 单词 仅由小写字母组成。如果某个单词在其中一个句子中恰好出现一次,在另一个句子中却 没有出现 ,那么这个单词就是 不常见的 。给你两个 句子 s1 和 s2 ,返回所有 不常用单词 的列表。返回列表中单词可以按 任意顺序 组织。......
  • 【从零开始的LeetCode-算法】3184. 构成整天的下标对数目 I
    给你一个整数数组 hours,表示以 小时 为单位的时间,返回一个整数,表示满足 i<j 且 hours[i]+hours[j] 构成 整天 的下标对 i, j 的数目。整天 定义为时间持续时间是24小时的 整数倍 。例如,1天是24小时,2天是48小时,3天是72小时,以此类推。示例1:......
  • c++ STL标准模板库-算法
    C++StandardTemplateLibrary(STL)算法是一组泛型算法,它们可以在各种容器上操作。这些算法被设计为与容器无关,因此可以在任何提供必要迭代器接口的容器上使用。STL算法分为以下几个主要类别:非修改算法Non-modifyingsequenceoperations:不改变容器内容,主要用于搜索和排序。......