Optimal Binary Search Tree Hard 0 attempts
GeeksforGeeks ↗

Optimal Binary Search Tree

Hard Dynamic ProgrammingMemoization GeeksforGeeks

Given sorted keys with search frequencies, construct a BST that minimizes the total search cost.

Example: keys=[10,12,20], freq=[34,8,50] → minimum cost BST

Sample Input
Sample Output
Constraints
  • 1 <= n <= 50
  • keys are sorted

DP (Knuth's Optimization)

function optimalBST(keys, freq) {
  const n = keys.length;
  const dp = Array.from({length:n}, ()=>Array(n).fill(0));
  for (let i = 0; i < n; i++) dp[i][i] = freq[i];
  for (let len = 2; len <= n; len++) {
    for (let i = 0; i + len - 1 < n; i++) {
      const j = i + len - 1;
      dp[i][j] = Infinity;
      let sum = 0; for (let k = i; k <= j; k++) sum += freq[k];
      for (let r = i; r <= j; r++) {
        const cost = sum + (r>i?dp[i][r-1]:0) + (r<j?dp[r+1][j]:0);
        dp[i][j] = Math.min(dp[i][j], cost);
      }
    }
  }
  return dp[0][n-1];
}

Time: O(n³) | Space: O(n²)

Saved in this browser only. Private to you.

JavaScript