File tree Expand file tree Collapse file tree 1 file changed +34
-0
lines changed Expand file tree Collapse file tree 1 file changed +34
-0
lines changed Original file line number Diff line number Diff line change 1+ //  https://www.youtube.com/watch?v=HnslzEs8dbY&ab_channel=Pepcoding
2+ //  Given sorted nodes of BST
3+ //  and their search frequency
4+ //  find the minimum BST which has minimum seach cost.
5+ //  FIND MIN COST
6+ 
7+ int  optimalBST (vector<int > arr, vector<int > freq) {
8+     int  n = arr.size ();
9+     vector<vector<int >> dp (n, vector<int >(n, 0 ));
10+     vector<int > cum_freq (n, 0 );
11+     cum_freq[0 ] = freq[0 ];
12+     for  (int  i = 1 ; i < n; i++) {
13+         cum_freq[i] = cum_freq[i - 1 ] + freq[i];
14+     }
15+     for  (int  gap = 0 ; gap < n; gap++) {
16+         for  (int  i = 0 , j = gap; j < n; i++, j++) {
17+             if  (gap == 0 ) {
18+                 dp[i][j] = freq[i];
19+             //  } else if (gap == 1) {
20+             //      dp[i][j] = min(freq[i] + 2 * freq[j], 2 * freq[i] + freq[j]);
21+             } else  {
22+                 int  min_cost = INT_MAX;
23+                 int  height_inc_cost = cum_freq[j] - ((i == 0 ) ? 0  : cum_freq[i - 1 ]);
24+                 for  (int  k = i; k <= j; k++) {
25+                     int  left = (k == i) ? 0  : dp[i][k - 1 ];   //  extreme left overflow
26+                     int  right = (k == j) ? 0  : dp[k + 1 ][j];  //  extreme right overflow
27+                     min_cost = min (min_cost, height_inc_cost + left + right);
28+                 }
29+                 dp[i][j] = min_cost;
30+             }
31+         }
32+     }
33+     return  dp[0 ][n - 1 ];
34+ }
 
 
   
 
     
   
   
          
    
    
     
    
      
     
     
    You can’t perform that action at this time.
  
 
    
  
    
      
        
     
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments