第1章 算法设计基础

1-1 什么是算法

见识算法

  • 算法是计算机科学的基石:从古代算术到现代计算机,算法始终是解决问题的核心。

算法的起源
  • 张苍《九章算术》:创立了机械化算法体系(如“合分术”分数相加算法)。

  • 欧几里得《几何原本》:奠定了逻辑演绎体系,为后世算法理论提供严密的数学基础。


1.1.1 算法的定义

  • 算法:对特定问题求解步骤的一种描述,是指令的有限序列。

  • 三要素

    1. 有穷性:算法必须在有限步内终止,防止出现死循环或无限运行,以保证能在实际环境中获得结果;

    2. 确定性:每一步都有唯一明确定义,避免歧义和不一致,确保重复执行时输出一致;

    3. 可行性:每一步都能在有限时间和空间资源下执行,保证算法在实际计算环境中可实现。

Problem 与 Instance
  • Problem(问题):规定输入与输出之间关系的抽象集合;

  • Instance(实例):具体的输入数据集合。

  • 排序问题示例

    • 输入:<31, 41, 59, 26, 41, 58>

    • 输出:<26, 31, 41, 41, 58, 59>

示例题目
  • 例1.1 设计算法求两个自然数的最大公约数

    • 思路(质因数分解法)

      1. 找出 m 的所有质因子;

      2. 找出 n 的所有质因子;

      3. 求交集并相乘。

    • 缺陷:分解过程时间复杂度高,因子枚举不确定,难以扩展大数运算,且分解失败时无法输出。

  • 例1.2 欧几里德算法——辗转相除法求最大公约数

    • 步骤:

      1. r = m % n

      2. 若 r = 0,则输出 n;否则 m ← n,n ← r,转步骤1。

    • 优点:时间复杂度 O(log min(m,n)),保证有穷性和可行性,简单易实现,确定性强。


1.1.2 算法的描述方法

  1. 自然语言

    • 优点:通俗易懂;缺点:描述不够严密,易产生歧义。

  2. 程序流程图

    • 优点:结构清晰、直观;缺点:难表达复杂逻辑,维护和修改成本高。

  3. 伪代码

    • 优点:兼顾可读性与严密性,可快速转化为程序;缺点:语法非标准,不同风格可能导致理解成本。

示例伪代码题目
  • (1)瓶子 A 与 B 液体互换

    1. C ← A

    2. A ← B

    3. B ← C

  • (2)三个数由小到大排序

    1. 若 x > y,则交换;

    2. 若 z < x,则循环交换;否则若 z < y,则交换;

    3. 输出 x, y, z。

  • (3)在 n 元素集合中查找最大值

    1. max ← a[1];

    2. i ← 2;

    3. 当 i ≤ n 时:若 a[i] > max,则 max ← a[i];i ← i + 1;

    4. 输出 max。


1.1.3 算法在问题求解中的地位

  1. 分析问题并设计算法;

  2. 编写程序;

  3. 机器 执行程序,得到结果。

强调算法设计是沟通人和机器的桥梁,决定程序效率与可维护性。


1-2 什么是好算法

1.2.1 如何评价算法

  1. 正确性:算法必须对所有合法输入产生正确输出,否则无法信赖;

  2. 健壮性:能识别和处理无效或异常输入,避免程序崩溃或产生误导性结果;

  3. 可理解性:清晰的逻辑结构和注释便于他人阅读、调试和维护,降低开发成本;

  4. 抽象分级:合理划分模块和层次,符合人类认知规律(7±2 原则),提高复用性;

  5. 高效性:兼顾时间复杂度和空间复杂度,使算法在大规模数据或复杂环境中仍能快速运行;

  6. 可扩展性:便于后续功能扩展或性能优化,以适应需求变化。

案例对比:当 n = 10³ 时,冒泡排序约需 0.01 s;当 n = 10⁶ 时,快速排序仅需约 0.02 s,而冒泡排序则超过 10² s,效率差异随规模增长指数级放大。


1-3 为什么要学习和研究算法

1.3.1 算法研究推动计算机技术发展

  • 查找问题:二分查找 O(log n),将线性查找 O(n) 降为对数级,大幅提升检索效率;

  • 图问题:Dijkstra 算法解决最短路径,实现地图导航、网络路由等核心功能;

  • 组合优化:背包问题、旅行商问题等,影响资源分配与调度系统设计。

多数现代应用(搜索引擎、社交网络、电子商务)都依赖高效算法来支撑海量数据处理。

1.3.2 算法训练提升计算思维能力

  • 模型化:将现实问题抽象为数学模型,有助于使用已知算法求解;

  • 抽象思考:在机外表示与机内表示间切换,理解问题核心;

  • 形式化:将解题思路转化为伪代码或程序,保证逻辑严密性和可执行性。

思维收益:培养分治、贪心、动态规划等思维模式,提高解决复杂问题的条理性与创造力。

1.3.3 程序员必学算法的程度

Algorithm + Data Structures = Programs

  • 基础功底:理解算法思想有助合理选择和组合数据结构;

  • 应用层面:不必精通所有算法,但应熟练掌握常用排序、查找、图算法等;

  • 高级优化:针对性能关键场景,掌握算法优化技巧能显著提升系统效率。


1-4 如何设计算法

1.4.1 基本数据结构及其作用

  • 集合:无序元素集合,支持高效去重和成员检测;

  • 线性结构:表、栈(LIFO)、队列(FIFO),常用于任务调度和历史记录;

  • 树结构:二叉树、平衡树,用于层级数据组织与快速查找;

  • 图结构:邻接表、邻接矩阵,灵活表示网络、依赖关系等。

1.4.2 常见问题类型与典型算法思路

  • 查找:顺序查找、二分查找、哈希查找;

  • 排序:冒泡、插入、归并、快速、堆排序;

  • 图:遍历(DFS/BFS)、最短路径、最小生成树;

  • 组合优化:动态规划(背包、LCS)、分支限界;

  • 数学:质数判定、最大公约数、快速幂;

  • 几何:凸包、扫描线。

1.4.3 算法设计一般流程

  1. 问题分析:明确输入输出与性能约束;

  2. 选择技术:分治、动态规划、贪心、回溯等;

  3. 算法描述:伪代码或流程图;

  4. 手动模拟:验证正确性,修正逻辑;

  5. 实现编码:关注可读性与可维护性;

  6. 复杂度分析:评估时间和空间消耗;

  7. 迭代优化:基于测试与分析,持续改进性能。


1-5 拓展与演练

1.5.1 图灵奖获奖者与算法贡献

  • Edsger Dijkstra:Dijkstra 最短路径算法;

  • Donald Knuth:《算法艺术》系列与文献规范;

  • Tony Hoare:快速排序;

  • Stephen A. Cook:NP 完全性理论;

  • Andrew Yao(姚期智):通信复杂度与伪随机数理论;

  • Leslie Valiant:概率近似正确模型;

  • Yoshua Bengio、Geoffrey Hinton、Yann LeCun:深度学习算法发展。

1.5.2 代码优化技巧及原因

  1. 常量计算:编译期计算不变表达式,减少运行时开销;

  2. 算术优化:用加减或 Horner 法则替代乘除;

  3. 位运算替代:如 x & 1 判断奇偶,加快计算;

  4. 避免重复:缓存中间结果,减少函数调用;

  5. 共享子表达式:提高编译器优化机会;

  6. 逻辑短路:提前终止无必要判断;

  7. 合并循环:减少循环次数,降低控制开销;

  8. 循环不变式外提:移出循环内不变运算;

  9. 合理条件顺序:高概率分支优先,降低分支预测失败;

  10. 嵌套循环优化:优先减少内层循环次数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/78801.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/78801.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java中ArrayList扩容机制的解析

本文将系统地介绍 Java 中 ArrayList 的扩容机制&#xff0c;包括其初始容量的设置、触发扩容的时机、容量增长算法、扩容的详细流程以及性能优化建议&#xff0c;帮助读者从源码层面深入理解这一关键特性&#xff0c;并在实际开发中合理预分配容量以提升性能。 一、ArrayList…

【网络服务器】——回声服务器(echo)

作用 实现回声服务器的客户端/服务器程序&#xff0c;客户端通过网络连接到服务器&#xff0c;并发送任意一串英文信息&#xff0c;服务器端接收信息后&#xff0c;执行数据处理函数&#xff1a;将每个字符转换为大写并回送给客户端显示。 客户端&#xff1a;发送字符信息 服…

智能学习空间的范式革新:基于AI驱动的自习室系统架构与应用研究

摘要 在 “互联网 + 教育” 深度融合的背景下,传统自习室面临个性化服务缺失、学习效率低下等瓶颈。本文提出一种基于人工智能技术的 AI 自习室系统架构,通过构建多模态数据感知、个性化学习引擎及智能环境调控模块,实现学习过程的精准化、智能化与沉浸式体验。研究结合计算…

HTML01:HTML基本结构

HTML基本结构 <html> <head><meta charset"UTF-8"><title>我的第一个网页</title> </head> <body>我的第一个网页 </body> </html><body、</body等成对的标签&#xff0c;分别叫开发标签和闭合标签单独…

Spring Boot 实现多种来源的 Zip 多层目录打包下载(本地文件HTTP混合)

需要将一批文件&#xff08;可能分布在不同目录、不同来源&#xff09;打包成Zip格式&#xff0c;按目录结构导出给用户下载。 1. 核心思路 支持将本地服务器上的文件&#xff08;如/data/upload/xxx.jpg&#xff09;打包进Zip&#xff0c;保持原有目录结构。支持通过HTTP下载…

【Elasticsearch】在kibana中能获取已创建的api keys吗?

在 Kibana 中&#xff0c;目前没有直接的界面功能可以列出或查看已创建的 API 密钥&#xff08;API keys&#xff09;。API 密钥的管理和查看主要通过 Elasticsearch 的 REST API 来完成&#xff0c;而不是通过 Kibana 的管理界面。 在 Kibana 中使用 Dev Tools 查看 API 密钥…

公司项目架构搭建者

公司项目架构搭建者分析 项目架构搭建的核心角色 #mermaid-svg-FzOOhBwW3tctx2AR {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-FzOOhBwW3tctx2AR .error-icon{fill:#552222;}#mermaid-svg-FzOOhBwW3tctx2AR .err…

《技术驯化情感:AI伴侣、监控与伦理框架的重构挑战》

技术渗透与情感异化机制 情感计算技术正通过多种核心算法和数据处理方法深入人类生活&#xff0c;其在重构人类情感关系的同时也潜藏情感异化风险。本节从生物特征捕捉、行为模式诱导和认知框架重塑三方面解析情感计算的技术机理&#xff0c;并探讨其导致的情感依赖现象。 生物…

32单片机——独立看门狗

1、IWDG的简介 IWDG&#xff1a;Independent watchdog&#xff0c;即独立看门狗 独立看门狗本质上是一个定时器&#xff0c;该定时器是一个12位的递减计数器&#xff0c;当计数器的值减到0的时候&#xff0c;就会产生一个复位信号 如果在计数没减到0之前&#xff0c;重置计数器…

[计算机网络]数据链路层

408考纲(数链层部分): 0 概论&#xff1a;数据链路层都干什么事&#xff0c;提供啥功能 比物理层再高一层就是数据链路层&#xff0c;咱们上一篇讲物理层&#xff0c;物理层直接接触传输介质&#xff0c;现在数据链路层是使用物理层的传输服务&#xff0c;然后实现更多的功能。…

OpenAI大变革!继续与微软等,以非营利模式冲击AGI

今天凌晨2点&#xff0c;OpenAI宣布&#xff0c;将继续由非营利组织控制&#xff1b;现有的营利性实体将转变为一家公共利益公司&#xff1b;非营利组织将控制该公共利益公司&#xff0c;并成为其重要的持股方。 这也就是说OpenAI曾在去年提到的由非营利性转变成营利性公司&am…

库存怎么管?怎样才能做到有效的库存管理?

说到库存管理&#xff0c;估计大多数老板和管理者都有过“烦心事”。一方面&#xff0c;库存过多&#xff0c;货物堆积如山&#xff0c;堆在仓库里也不动&#xff0c;结果占地方还占用资金&#xff1b;另一方面&#xff0c;又有可能遇到客户急着要货&#xff0c;可是库存却紧张…

Kotlin-空值和空类型

变量除了能引用一个具体的值之外,还有一种特殊的值,那就是 null, 它代表空值, 也就是不引用任何对象 在Kotlin中, 对空值的处理是非常严格的,正常情况下,我们的变量是不能直接赋值为 null 的,否则无法编译通过, 这直接在编译阶段就避免了空指针问题 Kotlin中所有的类型默认都是…

[特殊字符]算法次元突破:螺旋矩阵的“能量解码术” vs 超立方体的“维度折叠指南”

&#x1f50d; 引言 如果科幻电影中的能量矩阵是算法的考题&#xff0c;你会用螺旋指针破解它的DNA吗&#xff1f; 如果《星际穿越》的五维空间变成编程题&#xff0c;你敢用动态规划丈量时间的褶皱吗&#xff1f; 今天&#xff0c;我们将化身算法世界的能量解…

高光谱相机赋能烟叶分选:精准、高效与智能化的新突破

烟草产业作为中国重要的经济支柱&#xff0c;烟叶分选的质量与效率直接影响行业效益。传统人工分选存在效率低、主观性强、标准难以统一等问题&#xff0c;而机器视觉技术受限于可见光波段&#xff0c;难以捕捉烟叶深层特征。深圳中达瑞和科技有限公司推出的高光谱相机解决方案…

矩阵求导常用公式解析:标量、向量与矩阵的导数计算

矩阵求导常用公式解析&#xff1a;标量、向量与矩阵的导数计算 矩阵求导常用公式解析&#xff1a;标量、向量与矩阵的导数计算矩阵求导的布局问题1. 分子布局 vs 分母布局对比表2. 布局冲突的典型场景分析3. 混合布局的兼容性处理 一、标量对向量求导1. 线性函数求导2. 二次型函…

NocoDB:开源的 Airtable 替代方案

NocoDB:开源的 Airtable 替代方案 什么是 NocoDB?NocoDB 的主要特点丰富的电子表格界面工作流自动化应用商店程序化访问NocoDB 的应用场景使用 Docker 部署 NocoDB1. 创建数据目录2. 运行 Docker 容器3. 访问 NocoDB注意事项总结什么是 NocoDB? NocoDB 是一款功能强大的开源…

全格式文档转 Markdown 工具,Docker 一键部署,支持 API 调用

以下是简要介绍&#xff1a; 这是一款可以快速将任意文档文件转markdown格式内容的工具&#xff0c;提供API转换接口&#xff0c;方便集成与应用原理就是利用libreoffice、pandoc文件转换工具&#xff0c;把所有文档类型的文件逐步转化&#xff0c;最终转成markdown格式的内容…

MATLAB绘制饼图(二维/三维)

在数据分析与展示领域&#xff0c;饼图是一种直观且高效的可视化工具&#xff0c;能够在瞬间传递各部分与整体的比例关系。今天&#xff0c;我将分享一段 MATLAB 绘制二维及三维饼图的代码&#xff0c;助你轻松将数据以饼图形式呈现于众人眼前。 无论是二维饼图的简洁明了&…

AI笔记-1

Halide Perovskites (HPs) 卤化物钙钛矿 卤化物钙钛矿&#xff08;HPs&#xff09;已被 公认为 光伏和发光器件 中最有前途的材料之一 在本观点中&#xff0c;我们将探讨钙钛矿的定义&#xff0c;主要聚焦于由 较重卤素&#xff08;Cl、Br和I&#xff09;组成的钙钛矿亚群&…