如何使用仅使用单词而不使用数字的二进制搜索?

问题描述:

我被要求使用二进制搜索找到特定单词在我们阅读的文件中。如何使用仅使用单词而不使用数字的二进制搜索?

我不明白的问题是如何使用二进制搜索,当你正在寻找单词而不是数字

+0

你如何使用它的数字呢?什么可以阻止你这样做的话? – Oleg

+0

下面是一个快速谷歌搜索良率的演示实现:[GitHub Gist:BinarySearch.java](https://gist.github.com/aviraldg/2195495)。这只是一种常规算法,比较像' Zabuza

+0

@Nevoxin如果用户回答你的问题,也请接受他的回答([接受答案:它是如何工作的?](https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-工作))。如果不是,那么请说明还没有答案,这是*的重要组成部分,非常感谢。 – Zabuza

二进制搜索运行排序输入。您也可以在单词上定义order,而不仅限于值。例如,lexicographical order。在Java中,这甚至实现为String自然顺序。所以你可以做"text1".compareTo("text2"),它会返回订单。


二进制搜索的一个小例证:

Binary search illustration

正如你看到的,唯一在算法决定的,是两个物体之间的顺序。例如,从图像中,7 < 147 > 6。如上所述,您也可以为String s执行此操作。事实上,对于的所有内容,其中您的定义了订单

在Java中

其实很多类(超过150更多)实现自然秩序,它们在接口Comparabledocumentation)中列出,它们都提供一个compareTo方法与有意义的顺序

+0

有没有一种方法可以告诉我一个如何使用带字母的字符串搜索文本文档的例子?我仍然有点困惑! – Nervoxin

+0

以二进制搜索算法为值,通过'String'交换。剩下的唯一东西就是用''与'String#compareTo'方法交换比较。如果您向我展示您的代码,我会为您编辑并解释这些更改。 – Zabuza

想想在词典中查找单词;这是二进制搜索的一个例子。

例如,让我们仰望“eunoia”:

  1. 你翻开字典大约“E”部分,但也许你去得有点过分了和“M”部分中结束。
  2. 你翻转大约一半的路,现在你在“E”部分(如果你幸运的话)
  3. 移到单词中的下一个字母上并重复。

这一切工作,因为字典是秩序井然,大家都一致认为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 
    }