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
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
Takumiから考えるSecurity_Maturity_Model.pdf
gessy0129
1
150
AI時代のシステム設計:ドメインモデルで変更しやすさを守る設計戦略
masuda220
PRO
6
1.1k
Rethinking API Platform Filters
vinceamstoutz
0
140
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
750
AI駆動開発の本音 〜Claude Code並列開発で見えたエンジニアの新しい役割〜
hisuzuya
4
530
Cyrius ーLinux非依存にコンテナをネイティブ実行する専用OSー
n4mlz
0
230
Nostalgia Meets Technology: Super Mario with TypeScript
manfredsteyer
PRO
0
100
Agentic AI: Evolution oder Revolution
mobilelarson
PRO
0
190
生成 AI 時代のスナップショットテストってやつを見せてあげますよ(α版)
ojun9
0
290
安いハードウェアでVulkan
fadis
0
740
メッセージングを利用して時間的結合を分離しよう #phperkaigi
kajitack
3
290
Kubernetesでセルフホストが簡単なNewSQLを求めて / Seeking a NewSQL Database That's Simple to Self-Host on Kubernetes
nnaka2992
0
170
Featured
See All Featured
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
150
Testing 201, or: Great Expectations
jmmastey
46
8.1k
Abbi's Birthday
coloredviolet
2
5.6k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
450
Technical Leadership for Architectural Decision Making
baasie
3
300
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.2k
A Soul's Torment
seathinner
5
2.5k
AI: The stuff that nobody shows you
jnunemaker
PRO
3
460
Skip the Path - Find Your Career Trail
mkilby
1
87
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
240
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
770
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
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]