Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Segment Tree Basics
halfrost
January 15, 2020
Programming
0
560
Segment Tree Basics
halfrost
January 15, 2020
Tweet
Share
More Decks by halfrost
See All by halfrost
Redis multi-data center two-way synchronization
halfrost
0
250
Redis design ideas and usage specifications
halfrost
0
220
Golang message streaming practice in Eleme
halfrost
0
200
SQL practical optimization
halfrost
0
200
Fundamentals of Cryptography
halfrost
0
150
The practice of spatial index in geographic service
halfrost
0
200
Getting started with Machine Learning
halfrost
0
130
Functional Reactive Programming
halfrost
0
140
Eleme Report
halfrost
1
190
Other Decks in Programming
See All in Programming
Cloudflare WorkersでGoを動かすライブラリを作っている話
syumai
1
320
なぜRubyコミュニティにコミットするのか?
luccafort
0
310
Ruby Pattern Matching
bkuhlmann
0
610
Findy - エンジニア向け会社紹介 / Findy Letter for Engineers
findyinc
2
42k
Spring BootとKubernetesで実現する今どきのDevOps入門
xblood
0
350
Remote SSHで行うVS Codeリモートホスト開発とトラブルシューティング
smt7174
1
470
Micro Frontends with Module Federation @MicroFrontend Summit 2023
manfredsteyer
PRO
0
560
10年以上続くプロダクトの フロントエンド刷新プロジェクトのふりかえり
yotahada3
2
340
Form実装基本を学び直してみた
hyugatsukui
0
240
xarray-Datatree: Hierarchical Data Structures for Multi-Model Science
tomnicholas
0
220
Rによる大規模データの処理
s_uryu
2
640
Workshop on Jetpack compose
aldefy
0
140
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
10
1.3k
Side Projects
sachag
451
37k
Designing with Data
zakiwarfel
91
4.2k
Designing the Hi-DPI Web
ddemaree
273
32k
KATA
mclloyd
12
9.7k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
224
50k
How New CSS Is Changing Everything About Graphic Design on the Web
jensimmons
214
12k
Fashionably flexible responsive web design (full day workshop)
malarkey
396
63k
JazzCon 2018 Closing Keynote - Leadership for the Reluctant Leader
reverentgeek
175
9.1k
From Idea to $5000 a Month in 5 Months
shpigford
374
44k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
270
12k
What's in a price? How to price your products and services
michaelherold
233
9.7k
Transcript
Segment Tree 基础篇
Range Minimum/Maximum Query •需求:在饿了么的⼀个⽤户的历史订单中,找出该⽤户指定⼀段 时间内单笔订单最贵/最便宜的订单 One problem •O(n), when query
K —> ∞ times ?
Range Minimum/Maximum Query •需求:在饿了么的⼀个⽤户的历史订单中,求出找出该⽤户指定 ⼀段时间内累积消费总⾦额 Another problem •O(n), when query
K —> ∞ times ? •prefixSum, time O(n), query O(1)
Range Minimum/Maximum Query •需求:在 12306 ⽹站上,统计⼀条线路上任意指定两个站点之间 的可售出的票数总和 One more thing
•O(n), when query K —> ∞ times ? •prefixSum, time O(n), update O(n), query O(1)
How to ? Range Minimum/Maximum Query 5 O(log n) or
O(1) ?
Presentation agenda 6 What How to use Leetcode example What
is segment tree 2 3 1 How Example
Define Segment Tree 7 1. ❌ Complete Binary Tree 2.
∈ Balanced Binary Tree 3. As Full binary tree
How many node Segment Tree 8 0-level : 1 1-level
: 2 2-level : 4 3-level : 8 4-level : 16 (n-1)—level :2^(n-1) n-level:2^n Σ 0-(n-1) level:Σ = 2^n - 1 ≈ n-level => 2n Mathematical Induction:Σ = 4n (n = 2^k or n = 2^k + 1)
How many node Segment Tree 9 •When n≥3, [1,n] segment
split [1,n] into 2*⌊log (n-1)⌋ sub- Interval •4n ≥ 2*⌊log (n-1)⌋ <= 2n ≥ log (n-1) <= 4^n ≥ n-1
How to create Segment Tree 10
How to query Segment Tree 11 ❗
How to update Segment Tree 12 ❗
How to update Segment Tree 13 •Update [2,3] ? •❌
O(n)
How to update Segment Tree 14 •Update [2,3] ? •✅O(log
n)
How to update Segment Tree 15
How to query Segment Tree 16 •push_down
How to update Segment Tree 17 •push_down + push_up
How to low space Segment Tree 18 •Leetcode 715
Compared ST VS Array 19 20% 80% 60% 40% 2585
785 Update: Array O(n) | Segment Tree O(log n) Query: Array O(n) | Segment Tree O(log n)
Segment Tree 20 Example
Segment Tree 21 Example
Segment Tree 22 Example
Boyer-Moore Majority Vote Algorithm 23 Example
Segment Tree 24 Example
Segment Tree 25 Example •judge threshold •count = map[1:[0 1
4 5] 2:[2 3]] •eg: 1 in [0,5] count , twice binary search, find [lowerBound, upperBound) •(upperBound - lowerBound) ≥ threshold
Segment Tree 26 •Leetcode 327. Count of Range Sum •Leetcode
715. Range Module •Leetcode 699. Falling Squares & 732. My Calendar III •Leetcode 850. Rectangle Area II •Leetcode 218. The Skyline Problem Exercise
Advance 27 15% 35% 50% •One point update (update: min/change,
query: sum/min) •Interval update (update: min/change, query: sum/hash) •Discretization •Interval merge •Scan line •Binary Index Tree