Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Segment Tree Basics

halfrost
January 15, 2020

Segment Tree Basics

halfrost

January 15, 2020
Tweet

More Decks by halfrost

Other Decks in Programming

Transcript

  1. Segment Tree
    基础篇

    View Slide

  2. Range Minimum/Maximum Query
    •需求:在饿了么的⼀个⽤户的历史订单中,找出该⽤户指定⼀段
    时间内单笔订单最贵/最便宜的订单
    One problem
    •O(n), when query K —> ∞ times ?

    View Slide

  3. Range Minimum/Maximum Query
    •需求:在饿了么的⼀个⽤户的历史订单中,求出找出该⽤户指定
    ⼀段时间内累积消费总⾦额
    Another problem
    •O(n), when query K —> ∞ times ?
    •prefixSum, time O(n), query O(1)

    View Slide

  4. Range Minimum/Maximum Query
    •需求:在 12306 ⽹站上,统计⼀条线路上任意指定两个站点之间
    的可售出的票数总和
    One more thing
    •O(n), when query K —> ∞ times ?
    •prefixSum, time O(n), update O(n), query O(1)

    View Slide

  5. How to ?
    Range Minimum/Maximum Query
    5
    O(log n) or O(1) ?

    View Slide

  6. Presentation agenda
    6
    What
    How to use Leetcode example
    What is segment tree
    2
    3
    1
    How Example

    View Slide

  7. Define
    Segment Tree
    7
    1. ❌ Complete Binary Tree
    2. ∈ Balanced Binary Tree
    3. As Full binary tree

    View Slide

  8. 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)

    View Slide

  9. 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

    View Slide

  10. How to create
    Segment Tree
    10

    View Slide

  11. How to query
    Segment Tree
    11

    View Slide

  12. How to update
    Segment Tree
    12

    View Slide

  13. How to update
    Segment Tree
    13
    •Update [2,3] ?
    •❌ O(n)

    View Slide

  14. How to update
    Segment Tree
    14
    •Update [2,3] ?
    •✅O(log n)

    View Slide

  15. How to update
    Segment Tree
    15

    View Slide

  16. How to query
    Segment Tree
    16
    •push_down

    View Slide

  17. How to update
    Segment Tree
    17
    •push_down + push_up

    View Slide

  18. How to low space
    Segment Tree
    18
    •Leetcode 715

    View Slide

  19. 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)

    View Slide

  20. Segment Tree
    20
    Example

    View Slide

  21. Segment Tree
    21
    Example

    View Slide

  22. Segment Tree
    22
    Example

    View Slide

  23. Boyer-Moore Majority Vote Algorithm
    23
    Example

    View Slide

  24. Segment Tree
    24
    Example

    View Slide

  25. 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

    View Slide

  26. 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

    View Slide

  27. 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

    View Slide