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
210
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
算法初步
该 PPT 来自,七月在线的算法课程,如有侵权请通知。
Thomas
February 02, 2017
More Decks by Thomas
See All by Thomas
Self Confidence
zhgqthomas
0
62
Android Interprocess Commuincation
zhgqthomas
0
110
Other Decks in Programming
See All in Programming
まずはプロンプトガイドを読もう、話はそれからだ
kiakiraki
1
260
DynamoDBの基礎を振り返りながらベクトル検索機能を理解する
musan
3
260
初心者DevRelとして参加者だった私が、DevRel Talks!#2に登壇するまでにしてきたこと
sokohirai
0
330
自分的「カンファレンスの楽しみ方」
syumai
0
190
GraphRAGのKnowledge Graphを 直接!見る/View-GraphRAG's-KnowledgeGraph-directly!
tyumugi1113
0
210
Go 1.27からのGODEBUG / Go 1.27 リリースパーティ #go127party
mazrean
0
300
片田舎のおっさん、 Swift Buildのダイアモンド問題解決の不具合修正PRを出すが、解決方法がキャッシュをしないようにすることであり、ビルド時間が伸びると言われてマージされないので高速化もする/swiftbuild
yimajo
0
350
新人はどこまで自力でやり、どこからAIに頼るべきか/エンジニア育成に向き合う_先輩たちの悩みと知見共有会
toppan_digital_dev
1
560
Go を使い始めて 2 ヶ月の学び / My first two months with Go
contour_gara
0
420
Claude Codeを組織的に動かして月400PRを実現した話
happy_ryo
0
250
Flow は今どうなっているか
mizdra
PRO
0
910
高専キャリア LT 発表内容
crysta1221
6
5.5k
Featured
See All Featured
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
430
Optimizing for Happiness
mojombo
378
71k
BBQ
matthewcrist
89
10k
Accessibility Awareness
sabderemane
1
200
A designer walks into a library…
pauljervisheath
211
25k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
400
WENDY [Excerpt]
tessaabrams
12
39k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3k
How to make the Groovebox
asonas
2
2.4k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Believing is Seeing
oripsolob
1
210
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]