Optimal Binary Search Tree
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.