Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
算法初步
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Thomas
February 02, 2017
Programming
0
200
算法初步
该 PPT 来自,七月在线的算法课程,如有侵权请通知。
Thomas
February 02, 2017
Tweet
Share
More Decks by Thomas
See All by Thomas
Self Confidence
zhgqthomas
0
57
Android Interprocess Commuincation
zhgqthomas
0
99
Other Decks in Programming
See All in Programming
【卒業研究】会話ログ分析によるユーザーごとの関心に応じた話題提案手法
momok47
0
200
AI によるインシデント初動調査の自動化を行う AI インシデントコマンダーを作った話
azukiazusa1
1
740
CSC307 Lecture 04
javiergs
PRO
0
660
Lambda のコードストレージ容量に気をつけましょう
tattwan718
0
140
AI巻き込み型コードレビューのススメ
nealle
2
420
MDN Web Docs に日本語翻訳でコントリビュート
ohmori_yusuke
0
650
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
590
CSC307 Lecture 05
javiergs
PRO
0
500
CSC307 Lecture 10
javiergs
PRO
1
660
360° Signals in Angular: Signal Forms with SignalStore & Resources @ngLondon 01/2026
manfredsteyer
PRO
0
130
IFSによる形状設計/デモシーンの魅力 @ 慶應大学SFC
gam0022
1
310
AI Schema Enrichment for your Oracle AI Database
thatjeffsmith
0
310
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Agile that works and the tools we love
rasmusluckow
331
21k
The Language of Interfaces
destraynor
162
26k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.2k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
160
GraphQLとの向き合い方2022年版
quramy
50
14k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
270
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
220
Build your cross-platform service in a week with App Engine
jlugia
234
18k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
320
Practical Orchestrator
shlominoach
191
11k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
100
Transcript
算法初步 Ben
Why? • 应用:机器学习、数据挖掘、自然语言处理、密码学、计算 机图形学等 • 研究:时空复杂度等 • 找工作:贪心、分治、动态规划、树、图等
What? • 大象放进冰箱 • 有穷性 必须在人类毁灭前结束 • 确定性 老板,便宜一点(康盲,一点是多少) •
可行性 造个飞碟(你这么厉害你家里人造么) • 输入&输出
How? • 穷举(万能算法) 求N个数的全排列 8皇后问题 • 分而治之(减而治之) 二分查找——减而治之 归并排序——分而治之
How? • 贪心 最小生成树 Prim, Kruskal 单源最短路 Dijkstra • 动态规划
背包 士兵路径
复杂度 • 谈算法不谈复杂度=耍流氓 • 硬件发展,速度提升、内存提升(常数级) • 在实现之前,我们要预估算法所需要的资源 • 时间 •
空间
复杂度 • 时空复杂度 使用大O记号 时间:基本操作次数(汇编指令条数) 空间:占用内存字节数 区别:空间可以再利用 时空互换(Hash表)
复杂度 • 常见时间复杂度分析方法 数循环次数 均摊分析 递归式——主定理
复杂度 • O(1) 基本运算,+,-,*,/,%,寻址 • O(logn) 二分查找 • O(n1/2) 枚举约数
复杂度 • O(n) 线性查找 • O(n2) 朴素最近点对 • O(n3) Floyd最短路
普通矩阵乘法
复杂度 • O(nlogn) 归并排序 快速排序的期望复杂度 基于比较排序的算法下界 • O(2n) 枚举全部的子集
复杂度 • O(n!) 枚举全排列 • 总结: 优秀 O(1) < O(logn)
< O(n1/2) < O(n) < O(nlogn) 可能可以优化 O(n2) < O(n3) < O(2n) < O(n!)
均摊分析 • 多个操作,一起算时间复杂度 MULTIPOP的队列,可以一次性出队k个元素 每个元素只出入队列一次 动态数组尾部插入操作(vector) 一旦元素超过容量限制,则扩大一倍,再复制
例题:最大子数组和 • 给定数组a[1…n],求最大子数组和,即找出1<=i<=j<=n, 使a[i]+a[i+1]+…+a[j]最大 • 介绍三个算法 暴力枚举 O(n3) 优化枚举 O(n2)
贪心法 O(n)
暴力枚举 • 暴力枚举:三重循环 for i 1 to n for
j i to n sum a[i]+..+a[j] ans max(ans, sum) 时间复杂度 O(n3) 附加空间复杂度 O(1)
优化枚举 • 优化枚举:两重循环 for i 1 to n sum
0 for j i to n sum sum + a[i] ans max(ans, sum) 时间复杂度 O(n2) 附加空间复杂度 O(1)
贪心法 • 贪心法:一重循环 sum 0 ans 0 for
i 1 to n sum sum + a[i] ans max(sum, ans) if (sum < 0) sum 0 时间复杂度 O(n) 附加空间复杂度 O(1)
作业题1 • 设计一个队列 • 支持:出队,入队,求最大元素 • 要求O(1) • 均摊分析
作业题2 • 给定一个正整数组a,是否能以3个数为边长构成三角形? • 即是否存在不同的i,j,k, • 满足 a[i] < a[j]
+ a[k] • 并且 a[j] < a[i] + a[k] • 并且 a[k] < a[i] + a[j]