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
Thomas
February 02, 2017
Programming
0
120
算法初步
该 PPT 来自,七月在线的算法课程,如有侵权请通知。
Thomas
February 02, 2017
Tweet
Share
More Decks by Thomas
See All by Thomas
Self Confidence
zhgqthomas
0
51
Android Interprocess Commuincation
zhgqthomas
0
91
Other Decks in Programming
See All in Programming
Compose-View Interop in Practice (mDevCamp 2024)
stewemetal
0
160
GraphQLサーバの構成要素を整理する #ハッカー鮨 #tsukijigraphql / graphql server technology selection
izumin5210
4
900
VS Code をプロダクトにどう取り込むか
onomax
1
640
Netty Chicago Java User Group 2024-04-17
sullis
0
200
Behind VS Code Extensions for JavaScript / TypeScript Linnting and Formatting
unvalley
6
1.1k
SIMD Parallel Programming with the Vector API
josepaumard
0
220
Tailwind CSSを本気でカスタマイズする方法
fsubal
14
5.5k
ServerAction で Progressive Enhancement はどこまで頑張れるか? / progressive-enhancement-with-server-action
takefumiyoshii
6
400
大規模Reactアプリのリアーキテクチャ~8万行のTanStack Query移行の軌跡~
kj455
4
1k
FigmaとPHPで作る1ミリたりとも表示崩れしない最強の帳票印刷ソリューション
ttskch
43
19k
スクラムガイドのスプリントレトロスペクティブを改めて読みかえしてみた / Re-reading the Sprint Retrospective Section in the Scrum Guide
mackey0225
3
480
DMMプラットフォームがTiDB Cloudを採用した背景
pospome
9
4.2k
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
21
1.4k
YesSQL, Process and Tooling at Scale
rocio
165
13k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
245
20k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
26
2.3k
Fantastic passwords and where to find them - at NoRuKo
philnash
38
2.5k
Stop Working from a Prison Cell
hatefulcrawdad
267
19k
Designing with Data
zakiwarfel
96
4.8k
Optimizing for Happiness
mojombo
370
69k
Side Projects
sachag
451
41k
Build The Right Thing And Hit Your Dates
maggiecrowley
25
2k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
21
1.9k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
19
6.9k
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]