将前缀合并到二进制搜索算法?

时间:2014-04-17 00:20:47

标签: algorithm binary-search prefix

作为家庭作业的一部分,我告诉将前缀的使用纳入标准的二元搜索算法,即

int binarySearch( AnyType[] a, AnyType x, AnyType prefix )
{
    int low = 0; high = a.length - 1;

    while( low <= high )
    {
        int mid = ( low + high ) / 2; 

            #what goes here????

        if( a[ mid ].compareTo( x ) < 0 )
        {
            low = mid + 1;
        }
        else if( a[ mid ].compareTo( x ) > 0 )
        {
            high = mid - 1;
        }
        else
        {
            return mid;
        }
    }

    return NOT_FOUND;
}

我告诉他们这个改变很简单,并且询问哪个版本更快。我无法理解如何将前缀合并到算法中。

上下文是我将前缀合并到散列函数程序中,对于散列中的每个单词,我知道该单词的前缀也存储在散列中。这样,我可以通过检查前缀是否在表中,然后继续使用其余单词来减少我的计算。 (这是一个单词搜索程序)

编辑:这是我目前正在看的内容。关于这个表现的任何想法?

int binarySearch( AnyType[] a, AnyType x, AnyType prefix )
{
    int low = 0; high = a.length - 1;

    while( low <= high )
    {
        int mid = ( low + high ) / 2;

        if( a[ mid ].compareTo( prefix ) < 0 )
        {
            low = mid + 1;
        }
        else if( a[ mid ].compareTo( prefix ) > 0 )
        {
            high = mid - 1;
        }
        else
        {
            high = mid;
            while( low <= high )
            {
                int mid = ( low + high ) / 2;

                if( a[ mid ].compareTo( x ) < 0 )
                {
                    low = mid + 1;
                }
                else if( a[ mid ].compareTo( x ) > 0 )
                {
                    high = mid - 1;
                }
                else
                {
                    return mid;
                }
            }
        }
    }

    return NOT_FOUND;
}

1 个答案:

答案 0 :(得分:0)

考虑一种以二进制搜索适用的方式在数组中存储前缀的方法。对于可以应用二进制搜索的数组存在基本要求。想想那些方面。 :)