如何使用仅使用单词而不使用数字的二进制搜索?
答
二进制搜索运行排序输入。您也可以在单词上定义order,而不仅限于值。例如,lexicographical order。在Java中,这甚至实现为String
的自然顺序。所以你可以做"text1".compareTo("text2")
,它会返回订单。
二进制搜索的一个小例证:
正如你看到的,唯一在算法决定的,是两个物体之间的顺序。例如,从图像中,7 < 14
和7 > 6
。如上所述,您也可以为String
s执行此操作。事实上,对于的所有内容,其中您的定义了订单。
其实很多类(超过150
更多)实现自然秩序,它们在接口Comparable
(documentation)中列出,它们都提供一个compareTo
方法与有意义的顺序。
答
想想在词典中查找单词;这是二进制搜索的一个例子。
例如,让我们仰望“eunoia”:
- 你翻开字典大约“E”部分,但也许你去得有点过分了和“M”部分中结束。
- 你翻转大约一半的路,现在你在“E”部分(如果你幸运的话)
- 移到单词中的下一个字母上并重复。
这一切工作,因为字典是秩序井然,大家都一致认为A是第一个字母,B是第二等的另一种方式来看待它是该字母是一样的东西作为不同名称的数字[0 - 25]。
+0
有没有一种方法可以告诉我一个如何使用带字母的字符串来搜索文本文档的例子?我仍然有点困惑! – Nervoxin
答
二进制搜索串实施了C.
char *lineptr[MAXLINE] //Array of char pointers stores the address of string
int binsrch(char srch[],int low,int high)
{
int mid;
if(high>=low){
mid=(low+high)/2;
if(strcmp(srch,lineptr[mid])<0) //compare string stored in srch and lineptr[mid]
return binsrch(srch,low,mid-1,count);
else if(strncmp(srch,lineptr[mid],count)>0)
return binsrch(srch,mid+1,high,count);
else
return mid; // Found
}
return -1; //Not found
}
你如何使用它的数字呢?什么可以阻止你这样做的话? – Oleg
下面是一个快速谷歌搜索良率的演示实现:[GitHub Gist:BinarySearch.java](https://gist.github.com/aviraldg/2195495)。这只是一种常规算法,比较像' Zabuza
@Nevoxin如果用户回答你的问题,也请接受他的回答([接受答案:它是如何工作的?](https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-工作))。如果不是,那么请说明还没有答案,这是*的重要组成部分,非常感谢。 – Zabuza