系列文章目录
第一章 算法设计与分析基础知识
第二章 算法的分治策略
第三章 算法的动态规划
第四章 算法的贪心法
……
@[TOC](这里写目录标题) # 一级目录 ## 二级目录 ### 三级目录
参考教材
《算法设计与分析(第2版)》是由屈婉玲、刘田、张立昂、王捍贫编著,2016年清华大学出版社出版的21世纪大学本科计算机专业系列教材、普通高等教育“十一五”国家级规划教材。该教材适合作为大学计算机科学与技术、软件工程、信息安全、信息与计算科学等专业本科生和研究生的教学用书,也可以作为从事实际问题求解的算法设计与分析工作的科技人员的参考。
一、算法的由来
1 算法的由来
公元9世纪,波斯著名的数学家、天文学家、地理学 家阿尔·花拉子密在公元825年写成《印度数字算术》一书,对于 印度-阿拉伯数字系统在中东及欧洲的传播起到了重要作用。 该书被翻译成拉丁语“Algoritmi de numeroIndorum”, 花拉子密的拉丁文音译即为“算法”(Algorithm)一词的由来。
2 算法的历史
① 约公元前300年欧几里得提出了辗转相除法,用于计算两个整数的最大公约数, 其被记录在 欧几里得《几何原本》中
② 公元前1世纪,我国的第一本 “算法 ”书《周髀算经》出世
③ 魏晋时期,数学家刘徽在《九章算术注》中首创割圆术,内接正多边形去无限逼近圆,并以此求取圆周率的方法。
④ 唐高宗显庆元年(公元656年),规定将十部汉、唐一千多年间的十部著名数学著作作为国家最高学府的算学教科书,用以进行数学教育和考试,后世通称为《算经十书》。
3 为什么要学算法
数学王子 高斯的故事:
求: 1+ 2 + 3 + 4 + 5 + ⋯+ 100 =?
方式1(普通的方式): 对数据进行累加
1+2 =3
3+3 =6
6+4 =10
……
4950 + 100 = 5050
方式2(高斯算法): (1+100)* 50 = 5050
由上面的案例,我们可以得到如下结论:
求解同一问题通常存在多种方法,其效率可能不同,
所以需要我们分析比较算法运行效率,判断哪个算法更高效。
二、算法的基本概念
1 算法定义
给定计算问题,算法是一系列良定义(定义明确无歧义)的计算步骤,逐一执行计算步骤(计算机可实现的指令)即可得预期的输出。
举例:
比如我们平时在代码编写过程中比较常见的排序问题:
输入
包含𝒐个数字的数组 < 𝒂1 ,𝒂2,…,𝒂n >
输出
升序排列的数组
< 𝒂ʹ1,𝒂ʹ2,…,𝒂ʹn>
满足𝒂ʹ1≤ 𝒂ʹ2≤ ⋯ ≤ 𝒂ʹn
选择排序,从头至尾扫描序列,找出最小的一个元素,和第一个元素交换,接着从剩下的元素中继续这种选择和交换方式,最终得到一个有序序列:
输入: [