You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

构建最优二叉搜索树(BST)以最小化查找成本的技术问询

Hey there! Let's walk through building your optimal binary search tree (BST) step by step. The goal here is to minimize the total lookup cost, calculated as the sum of each element's access count multiplied by its lookup cost (that's 1 + depth from the root—so root nodes cost 1, their children cost 2, etc.).

1. Problem Recap

First, let's restate your problem clearly:

  • We have 4 sorted elements: x₁ < x₂ < x₃ < x₄
  • Access counts per element: x₁=2, x₂=4, x₃=3, x₄=6
  • Lookup cost rule: For any node, cost = 1 + depth (depth starts at 0 for the root)
2. Dynamic Programming Approach

We'll use the classic DP method for optimal BSTs, which relies on three core tables:

  • weight[i][j]: Total access counts for the subset of elements xᵢ to xⱼ
  • cost[i][j]: Minimum total lookup cost for the optimal BST containing xᵢ to xⱼ
  • root[i][j]: The index of the root node for the optimal BST of xᵢ to xⱼ

2.1 Calculate the Weight Table

First, let's compute the total access weights for all possible subtrees:

weight[1][1] = 2 | weight[2][2] = 4 | weight[3][3] = 3 | weight[4][4] = 6
weight[1][2] = 6 | weight[2][3] = 7 | weight[3][4] = 9
weight[1][3] = 9 | weight[2][4] = 13
weight[1][4] = 15

2.2 Initialize the Cost Table

For single-node subtrees, the total cost is just the element's access count (since the lookup cost is 1 for the root of the tiny subtree):

cost[1][1] = 2 | cost[2][2] = 4 | cost[3][3] = 3 | cost[4][4] = 6

2.3 Fill the Cost & Root Tables

We'll iterate over subtree lengths from 2 to 4 (since we already handled length 1):

Subtree Length = 2

  • Subset x₁-x₂:
    • If root is x₁: Cost = 0 (empty left subtree) + cost[2][2] + weight[1][2] = 0 + 4 + 6 = 10
    • If root is x₂: Cost = cost[1][1] + 0 (empty right subtree) + 6 = 2 + 0 + 6 = 8
    • Minimal cost = 8, so root[1][2] = 2
  • Subset x₂-x₃:
    • Root x₂: Cost = 0 + 3 + 7 = 10; Root x₃: Cost = 4 + 0 + 7 = 11
    • Minimal cost = 10, root[2][3] = 2
  • Subset x₃-x₄:
    • Root x₃: Cost = 0 + 6 + 9 = 15; Root x₄: Cost = 3 + 0 + 9 = 12
    • Minimal cost = 12, root[3][4] = 4

Subtree Length = 3

  • Subset x₁-x₃:
    • Root x₁: 0 + 10 + 9 = 19; Root x₂: 2 + 3 + 9 = 14; Root x₃: 8 + 0 + 9 = 17
    • Minimal cost = 14, root[1][3] = 2
  • Subset x₂-x₄:
    • Root x₂: 0 + 12 + 13 = 25; Root x₃: 4 + 6 + 13 = 23; Root x₄: 10 + 0 + 13 = 23
    • Minimal cost = 23, so root[2][4] can be 3 or 4 (both give the same cost)

Subtree Length = 4 (Full Tree)

Now we check all possible roots for the entire set of elements:

  • Root x₁: 0 + 23 + 15 = 38
  • Root x₂: 2 + 12 + 15 = 29
  • Root x₃: 8 + 6 + 15 = 29
  • Root x₄: 14 + 0 + 15 = 29

The minimal total lookup cost is 29—and there are three different optimal BST structures that achieve this!

3. Optimal BST Structures

Here are the three valid optimal trees, each with a total cost of 29:

  1. Root = x₂:

    x₂
      /  \
    x₁   x₄
        /
      x₃
    

    Cost breakdown: (22) + (41) + (33) + (62) = 4 + 4 + 9 + 12 = 29

  2. Root = x₃:

    x₃
      /  \
    x₂   x₄
    /
    

x₁

Cost breakdown: (2*3) + (4*2) + (3*1) + (6*2) = 6 + 8 + 3 + 12 = 29

3. **Root = x₄**:
x₄
 /

x₂
/
x₁ x₃

Cost breakdown: (2*3) + (4*2) + (3*3) + (6*1) = 6 + 8 + 9 + 6 = 29

# 4. Key Takeaway
All three trees are equally optimal for your access counts. If you have additional constraints (like wanting a more balanced tree), you can pick the structure that fits best—otherwise, any of them will minimize your total lookup cost.

内容的提问来源于stack exchange,提问作者MickeyTheMouse
相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:04:31