跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
编程语言算法

算法核心概念与复杂度入门

算法是解决特定问题求解步骤的描述,表现为指令的有限序列。其具备输入输出、有穷性、确定性、可行性五个基本特性。设计良好算法需满足正确性、可读性、健壮性及高效率低存储量要求。效率度量主要采用事前分析估算方法,通过分析程序运行时间依赖因素来评估。算法复杂度分为时间复杂度和空间复杂度,是衡量算法性能的关键指标,也是校招面试中的常见考点。

监控大屏发布于 2025/11/25更新于 2026/6/216 浏览
算法核心概念与复杂度入门

在这里插入图片描述

引言

在计算机领域,算法是解决问题的核心。理解算法的基本概念、特性以及复杂度分析,是掌握编程技术的基础。本文将梳理算法的定义、设计目标及效率度量方法,帮助读者建立扎实的理论框架。

一、算法的定义

算法:是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。简单来说,算法就是'解决问题的清晰流程'——就像菜谱(做菜的步骤)、导航路线(从 A 到 B 的路径),本质都是算法。

二、算法的特性

算法具有五个基本特性:输入、输出、有穷性、确定性和可行性。

2.1 输入

算法具有 0 个或多个输入。尽管对于大多数算法来说,输入参数都是有必要的,但对于个别情况,如打印 "hello world!" 这样的代码,不需要任何输入参数,因此算法的输入可以是零个。

2.2 输出

算法至少有 1 个或多个输出。算法是一定需要输出的,如果不需要输出,使用这个算法的意义就不大了。输出的形式可以打印输出,也可以是返回一个或多个值等。

2.3 有穷性

有穷性:是指算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且每一个步骤都在可接受的时间内完成。死循环代码就是典型的不满足有穷性的情况。

2.4 确定性

确定性:算法的每一步骤都具有确定的含义,不会出现二义性。算法在一定条件下,只有一条执行的路径,相同的输入只能有唯一的输出结果。算法的每一步骤都被精确定义而无歧义。

2.5 可行性

可行性:算法的每一步都必须是可行的,也就是说,每一步都能够通过执行有限次数完成。

三、算法设计要求

算法不是唯一的。解决同一个问题,可以有多种解决问题的算法。通常为了设计一个'好'的算法应考虑达到以下目标:

在这里插入图片描述

3.1 正确性

正确性:算法的正确性是指算法至少应该具有输入、输出和加工处理无歧义性,能够得到问题的正确答案。但是算法的'正确'一词在用法上通常有很大差别,大体分为以下四个层次:

  1. 算法程序没有语法错误;
  2. 算法程序对于合法的输入数据能够产生满足要求的输出结果;
  3. 算法程序对于非法的输入数据能够得出满足规格说明的结果;
  4. 算法程序对于精心选择的,甚至刁难的测试数据都有满足要求的输出结果。

对于这四层含义,第 1 层的要求最低,但仅仅没有语法错误实在谈不上是好算法。这就是如同仅仅解决温饱,不算是生活幸福一样。而第 4 层是最难实现的,我们几乎不可能逐一验证所有的输入都得到正确的结果。所以一般情况下,我们通常把第 3 层作为衡量一个算法是否合格的标准。

3.2 可读性

可读性:算法的另一个目的是为了便于阅读,来理解和交流。可读性高有助于人们理解算法,晦涩难懂的算法往往隐含错误,不易被发现,并且难以调试和修改。

3.3 健壮性

健壮性:当输入数据不合法时,算法也能做出相关处理而不是产生异常或莫名其妙的结果。

3.4 时间效率高和存储量低

时间效率指的是算法的执行时间。对于同一个问题,如果有多个算法能够解决,执行时间短的算法效率高,执行时间长的效率低。存储量需求指的是算法在执行过程中需要的最大空间,主要指算法程序运行时所占用的内存或外部硬盘存储空间。因此,设计算法时应尽量满足时间效率高和存储量低的需求。

四、算法效率的度量方法

刚才我们提到了设计算法要提高效率。这里的效率大都指算法的执行时间。算法的执行时间需要依据该算法编制的程序在计算机上运行时所消耗的时间来度量的。而度量一个程序的执行时间通常有两种方法 —— 事后统计方法和事前分析估算方法。

4.1 事后统计方法

事后统计方法:这种方法主要是通过设计好的测试程序和数据,利用计算机计时器对不同的算法编制的程序的运行时间进行比较,从而确定算法效率的高低。但是这种方法明显是有很大缺陷的:

  • 必须要依据算法事先编制好程序,这通常需要花费大量时间和精力。如果编制出来发现它根本就是一团很糟糕的算法,那不就是竹篮打水一场空了吗?
  • 时间的比较依赖计算机硬件和软件等环境因素的影响,有时会掩盖算法本身的优劣。
  • 算法的测试数据设计困难,并且程序的运行时间往往还与测试数据的规模有很大关系,效率高的算法在小的测试数据面前往往得不到体现。

基于事后统计方法有这样那样的缺陷,我们一般不予以采纳,而是采用另一种事前分析估算方法。

4.2 事前分析估算方法

事前分析估算方法:在计算机程序编制前,依据统计方法对算法进行估算。经过分析我们可以发现,一个用高级程序语言编写的程序在计算机上运行时所消耗的时间取决于以下因素:

在这里插入图片描述

解析: 第(1)条是一个好算法的根本,第(2)条要有软件来支持,第(4)条要看硬件性能。因此,抛开这些与计算机硬件、软件有关的因素,一个程序的运行时间,依赖于算法的好坏和问题的输入规模。所谓问题输入规模是指输入量的多少。

五、算法的复杂度

5.1 算法的复杂度的简单介绍

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

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

5.2 算法复杂度的重要性

复杂度在校招中的考察已经很常见,如下:

在这里插入图片描述

结语

本文主要讲解了算法的核心概念与复杂度基础:

  1. 定义:算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列。
  2. 特性:具备有穷性、确定性、可行性、输入、输出五个基本特征。
  3. 设计要求:追求正确性、可读性、健壮性以及高效率和低存储量需求。
  4. 度量方法:主要采用事前分析估算方法,关注算法本身与输入规模的关系。
  5. 复杂度:分为时间复杂度和空间复杂度,是评估算法性能的关键指标。

在这里插入图片描述

掌握这些基础概念,能为后续深入学习数据结构与高级算法打下坚实基础。

目录

  1. 引言
  2. 一、算法的定义
  3. 二、算法的特性
  4. 2.1 输入
  5. 2.2 输出
  6. 2.3 有穷性
  7. 2.4 确定性
  8. 2.5 可行性
  9. 三、算法设计要求
  10. 3.1 正确性
  11. 3.2 可读性
  12. 3.3 健壮性
  13. 3.4 时间效率高和存储量低
  14. 四、算法效率的度量方法
  15. 4.1 事后统计方法
  16. 4.2 事前分析估算方法
  17. 五、算法的复杂度
  18. 5.1 算法的复杂度的简单介绍
  19. 5.2 算法复杂度的重要性
  20. 结语
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Linux 进程地址空间详解
  • 错误定位 Prompt:快速定位异常堆栈
  • 鸿蒙金融理财全栈项目:风险控制、合规审计与产品创新
  • 网络安全入门:价值观、方法论与职业发展指南
  • 大疆无人机开发实战指南:MSDK/PSDK/上云 API 集成
  • GitHub 学生认证与 PyCharm 配置 Copilot 全流程指南
  • 矿场轨道异物AI监测系统:构建矿山运输安全智能防线
  • Java String 类常用方法详解
  • C++ 类与对象进阶特性与编译器优化实战
  • Fun-ASR 在中文普通话任务准确率超越 Whisper-small 近 5 个百分点
  • Python 字典子类的设计与实现
  • AI 驱动的小程序开发:从零构建“打工了马”实战复盘
  • 使用 WiX Toolset 构建专业 Windows 安装包:Whisper 部署实战
  • 自然语言处理在金融领域的应用与实战
  • 腾讯云智能客服 Java 集成与生产环境优化
  • FPGA 开发核心工具解析:Vivado、Quartus 与 ModelSim 深度对比
  • JavaScript 快速入门:条件语句与循环结构
  • AI Agent 架构:基础组成模块深度解析
  • Flutter 中 JavaScript 与 Dart 双向通信实现方案
  • CMake 核心概念与实战:目标、属性、API 及静态库构建

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online