认识算法的特性

简介: 努力是为了不平庸~算法学习有些时候是枯燥的,这一次,让我们先人一步,趣学算法!欢迎记录下你的那些努力时刻(算法学习知识点/算法题解/遇到的算法bug/等等),在分享的同时加深对于算法的理解,同时吸收他人的奇思妙想,一起见证技术er的成长~

一、什么是算法

瑞士著名的科学家Niklaus Wirth教授曾提出:数据结构+算法=程序
数据结构是程序的骨架,算法是程序的灵魂。

二、算法的复杂性

例、写一个算法,求以下序列之和:
-1,1,-1,1,…,(-1)^n
算法一:

int sum(int n)
{
   
    int sum=0;
    for(int i=1;i<=n;i++)
    sum+=pow(-1,i);//表示(-1)^i
    return sum;
}

算法二:

int sum(int n)
{
   
    int sum=0;
    if(sum%2==0)
    sum=1;
    else
    sum==-1;
    return sum;
}

算法是对特定问题求解步骤的一种描述。

算法具有以下特性。

  1. 有穷性:算法是由若干条指令组成的有穷序列,总是在执行若干次后结束,不可能永不停止。
  2. 确定性:每条语句都有确定的含义,无歧义。
  3. 可行性:算法在当前环境条件下可以通过有限次运算来实现。
  4. 输入输出:有零个或多个输入以及一个或多个输出。

    三、空间复杂度

    算法占用的空间大小。
    空间复杂度的本意是指算法在运行过程中占用了多少存储空间。算法占用的存储空间包括:

  5. 输入输出数据;

  6. 算法本身;
  7. 额外需要的辅助空间。

输入输出数据占用的空间是必需的,算法本身占用的空间可以通过精简算法来缩减,但缩减的量是很小的,可以忽略不计。算法在运行时所使用的辅助变量占用的空间(即辅助空间)才是衡量算法空间复杂度的关键因素。

四、时间复杂度

算法运行需要的时间。
算法的运行时间主要取决于最高项,小项和常数项忽略不计。

常见的算法时间复杂度有以下几类。

  1. 常数阶。
    常数阶算法的运行次数是一个常数,如5、20、100。常数阶算法的时间复杂度通常用O(1)表示。
  2. 多项式阶。
    很多算法的时间复杂度是多项式,通常用O(n)、O(n²)、O(n³)等表示。
  3. 指数阶。
    指数阶算法的运行效率极差,程序员往往像躲“恶魔”一样避开这种算法。指数阶算法的时间复杂度通常
    用O(2")、O(n!)、O(n")等表示。
  4. 对数阶。
    对数阶算法的运行效率较高,通常用O(logn)、O(nlogn)等表示。
    指数阶增量随着的增加而急剧增加,而对数阶增长缓慢。它们之间的关系如下:
    O(1)<O(logn)<O(n)<O(nlogn)O(n²)<O(n³)<O(2")O(n!)<O(n")
    在设计算法时,我们要注意算法复杂度增量的问题,尽量避免爆炸级增量。

本节主要说明了以下问题。

  • 将程序执行次数作为时间复杂度衡量标准。
  • 时间复杂度通常用渐近上界符号O((n)表示。
  • 衡量算法的好坏时通常考查算法的最坏情况。
  • 空间复杂度只计算辅助空间。
  • 递归算法的空间复杂度需要计算递归使用的栈空间。
  • 设计算法时要尽量避免爆炸级增量复杂度。
目录
相关文章
|
4月前
|
算法 Java 程序员
【算法训练-队列 一】【结构特性】用两个栈实现队列
【算法训练-队列 一】【结构特性】用两个栈实现队列
30 0
|
4月前
|
缓存 算法 Java
Linux内核新特性年终大盘点-安卓杀后台现象减少的背后功臣MGLRU算法简介
MGLRU是一种新型内存管理算法,它的出现是为了弥补传统LRU(Least Recently Used)和LFU(Least Frequently Used)算法在缓存替换选择上的不足,LRU和LFU的共同缺点就是在做内存页面替换时,只考虑内存页面在最近一段时间内被访问的次数和最后一次的访问时间,但是一个页面的最近访问次数少或者最近一次的访问时间较早,可能仅仅是因为这个内存页面新近才被创建,属于刚刚完成初始化的年代代页面,它的频繁访问往往会出现在初始化之后的一段时间里,那么这时候就把这种年轻代的页面迁移出去
|
4月前
|
算法 安全 Java
【算法训练-栈 一】【结构特性】有效的括号、最小栈(包含Min函数的栈)
【算法训练-栈 一】【结构特性】有效的括号、最小栈(包含Min函数的栈)
34 0
|
1月前
|
存储 算法 Python
算法的特性及其实现
算法是计算机科学中的核心概念,它代表了解决问题的步骤和过程。一个有效的算法不仅应当能够解决问题,还应当具有一些重要的特性,如正确性、可读性、健壮性、效率等。本文将详细讨论这些特性,并通过代码示例进行说明。
9 1
|
2月前
|
安全 算法 Java
JDK 9新特性:增强的加密算法支持
本文将深入探讨JDK 9中增强的加密算法支持这一新特性。随着网络安全威胁的日益严重,加密算法在保障数据安全方面起着至关重要的作用。JDK 9通过引入更多高效、安全的加密算法,提升了Java应用程序的加密能力。本文将详细介绍这些新加密算法的特点,以及如何在实际项目中应用这些新特性来提高数据的安全性。
|
10月前
|
存储 算法 大数据
算法的特性和空间复杂度---数据结构
算法的特性和空间复杂度---数据结构
|
10月前
|
机器学习/深度学习 传感器 算法
基于Bellhop算法模拟海底地形起伏条件下的传播特性附Matlab 源码
基于Bellhop算法模拟海底地形起伏条件下的传播特性附Matlab 源码
|
存储 自然语言处理 算法
认识算法的特性
认识算法的特性
95 0
|
存储 机器学习/深度学习 自然语言处理
【算法的特性,标准,时间维度空间维度计算方式】
【算法的特性,标准,时间维度空间维度计算方式】
226 0
【算法的特性,标准,时间维度空间维度计算方式】
|
存储 自然语言处理 算法
数据结构— 基本概念、逻辑和存储结构、数据类型与操作、算法特性与时间复杂度(下)
数据结构— 基本概念、逻辑和存储结构、数据类型与操作、算法特性与时间复杂度
151 0
数据结构— 基本概念、逻辑和存储结构、数据类型与操作、算法特性与时间复杂度(下)