数据结构与算法-静态最优查找树

静态最优查找树

当有序表中每个记录的查询概率相同时,用折半查找性能最优。当有序表的查找概率不等时,折半查找的概率未必最优。
若只考虑查找成功的情况,则使查找性能最优的判定树其带权路径长度之和为PH值。
PH=∑wihi
hi为第i个结点在二叉树上的层次数;结点的权wi=c*pi,pi为第i个结点的查找概率,c为某个常量。
称PH值最小的二叉判定树为静态最优查找树(Static Optimal Search Tree).

次优查找树(Nearly Optimal Search Tree)

构造次优查找树的方法:首先在记录序列中取第i个记录构造根结点,使得左部分序列的累计权值和与右部分序列的累计权值和差的绝对值最小;再对左右子序列分别构造次优查找树。

void SecondOptimal(BiTree &T,ElemType R[],float sw[],int low,high){
    i=low;
    min=abs(sw[high]-sw[low]);
    dw=sw[high]+sw[low-1];
    for(j=low+1;j<=high;++j){
        i=j;min=abs(dw-sw[j]-sw[j-1]);
    }//for
    T=(BiTree)malloc(sizeof(BiNode));
    T->data=R[i];
    if(i==low)T->lchild=NULL;
    else SecondOptimal(T->lchild,R,sw,low,i-1);
    if(i==high)T->rchild=NULL;
    else SecondOptimal(T->rchild,R,sw,i+1,high);
}//SecondOptimal

你可能感兴趣的:(数据结构与算法-静态最优查找树)