알고리즘 서론 제1 5 장 - 최 적 화 된 이 진 트 리 찾기
2159 단어 알고리즘
// , 。 。
#include<iostream>
using namespace std;
void Optimal_BST(double *p,double *q,int length,double (*e)[20],int (*root)[20])
{
int i,j,k,r;
double t;
double w[20][20]={0};
for(i=1;i<=length+1;i++)
{
e[i][i-1]=q[i-1];
w[i][i-1]=q[i-1];
}
//i
for(i=1;i<=length;i++)
{
// j k
for(j=1;j<=length-i+1;j++)
{
k=i+j-1;
e[j][k]=0x7fffffff;
w[j][k]=w[j][k-1]+p[k]+q[k];
// j k j k , , r j
// k
for(r=j;r<=k;r++)
{
t=e[j][r-1]+e[r+1][k]+w[j][k];
if(e[j][k]>t)
{
e[j][k]=t;
//r j k
root[j][k]=r;
}
}
}
}
}
void Construct_Optimal_BST(int (*root)[20],int i,int j,bool flag)
{
if(flag==0)
{
cout<<"k"<<root[i][j]<<" "<<endl;
flag=1;
}
int r=root[i][j];
//
if(r-1<i)
{
cout<<"d"<<r-1<<" is the left child of "<<"K"<<r<<endl;
}
//
else
{
cout<<"k"<<root[i][r-1]<<" is the left child of "<<"K"<<r<<endl;
Construct_Optimal_BST(root,i,r-1,1);
}
//
if(r>=j)
{
cout<<"d"<<j<<" is the right child of "<<"K"<<r<<endl;
}
//
else
{
cout<<"k"<<root[r+1][j]<<" is the right child of "<<"K"<<r<<endl;
Construct_Optimal_BST(root,r+1,j,1);
}
}
int main()
{
double p[6]={0,0.15,0.1,0.05,0.1,0.2};
double q[6]={0.05,0.1,0.05,0.05,0.05,0.1};
double e[20][20]={0};
int root[20][20]={0};
Optimal_BST(p,q,6,e,root);
cout<<e[1][5]<<endl;
Construct_Optimal_BST(root,1,5,0);
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
물체 검출의 평가 지표 IoU의 계산 방법Yolo나 SSD 등 물체 검출에서 평가 지표로 사용되는 IoU에 대해 조사했으므로 정리했습니다. IoU (Intersection over Union)는 두 영역이 얼마나 겹치는지를 나타내는 지표입니다. 두 영역의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.