CodeBlanks Logo Icon CodeBlanks

Segment tree

Aralık sorguları için segment tree öğrenirsin.

Segment tree

Segment tree, bir dizinin aralıkları üzerinde sorgu (toplam, min, max) yapmayı sağlar. O(n) bellekle kurulu; sorgu O(log n) zamanda yanıtlanır.

Dizi [1, 3, 5, 7] için toplam segment tree'si kök 16, sol 4, sağ 12 olacak şekilde 7 düğümlü bir ağaçtır.

Ağaç kurulumu

Segment tree bir dizi olarak temsil edilir: tree[1] köktür, tree[2i] ve tree[2i+1] sol/sağ çocuktur. Yapraklar dizinin kendisidir.

Kurulum, yaprakları dizinin sonuna yerleştirip iç düğümleri çocuklarının toplamı olarak doldurur.

Uygulama build_segment_tree fonksiyonu

build_segment_tree(arr) yaz. tree dizisini kur: yaprakları sona koy, iç düğümleri çocukların toplamı yap. print(build_segment_tree([1, 3, 5, 7])) ile yazdır.

Başlangıç kodu

solution.py
def build_segment_tree(arr):
    # Segment tree kur

Örnek çözüm

solution.py
def build_segment_tree(arr):
    # Segment tree kur
    n = len(arr)
    tree = [0] * (2 * n)
    for i in range(n):
        tree[n + i] = arr[i]
    for i in range(n - 1, 0, -1):
        tree[i] = tree[2 * i] + tree[2 * i + 1]
    return tree
print(build_segment_tree([1, 3, 5, 7]))

Beklenen çıktı

[0, 16, 4, 12, 1, 3, 5, 7]

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Segment tree: kavramları eşleştir

Kavram Anlamı
tree[1] 16 (toplam)
tree[2] 4 (sol)
tree[3] 12 (sağ)
tree[4] 1 (yaprak)

2 [1, 3, 5, 7] için segment tree kökü kaç olur?

  • 4
  • 7
  • 16 Doğru cevap
  • 12

Açıklama: Kök tüm elemanların toplamıdır: 1+3+5+7=16.

3 iç düğüm hesabı

Soru
tree[i] = tree[2*i] + tree[____*i+1]
Cevap
tree[i] = tree[2*i] + tree[2*i+1]

Açıklama: 2 doğru.

İleri seviye bölümündeki tüm dersler