作为家庭作业的一部分,我告诉将前缀的使用纳入标准的二元搜索算法,即
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;
}
答案 0 :(得分:0)
考虑一种以二进制搜索适用的方式在数组中存储前缀的方法。对于可以应用二进制搜索的数组存在基本要求。想想那些方面。 :)