Search Tree Problem.
#include <stdio.h>
#include<limits.h>
#define MAX_KEYS 100
int optimalBST(int keys[], int freq[], int n) {
int dp[MAX_KEYS + 1][MAX_KEYS + 1];
for (int i = 0; i <= n; i++) {
for (int j = 0; j <= n; j++) {
dp[i][j] = 0;
}
}
for (int len = 1; len <= n; len++) {
for (int i = 0; i <= n - len + 1; i++) {
int j = i + len - 1;
dp[i][j] = INT_MAX;
for (int r = i; r <= j; r++) {
int c = ((r > i) ? dp[i][r - 1] : 0) + ((r < j) ? dp[r + 1][j] : 0) + freq[r];
if (c < dp[i][j]) {
dp[i][j] = c;
}
}
}
}
return dp[0][n - 1];
}
int main() {
int n;
printf("Enter the number of keys: ");
scanf("%d", &n);
int keys[MAX_KEYS], freq[MAX_KEYS];
printf("Enter the keys:\n");
for (int i = 0; i < n; i++)
{ scanf("%d", &keys[i]);
}
printf("Enter the frequencies:\n");
for (int i = 0; i < n; i++) {
scanf("%d", &freq[i]);
}
int result = optimalBST(keys, freq, n);
printf("Optimal cost of a Binary Search Tree: %d\n", result);
return 0;
}
 
 
0 Comments