2013-07-21 95 views
0

我有一个包含大约30K首歌曲名称的文件。我必须使用这个列表来自动建立AJAX文本。 一些名称也以数字开头。我的问题是我可以在这个列表上进行二进制搜索吗?如果是,如何?在字符串列表中进行二进制搜索

+0

定义“前缀”“二进制搜索“,请。 您希望结果如何?是一个下拉菜单吗? – silkfire

+4

使用数据库...不要试图用这么大的文件来做这件事。 – Orangepill

+0

@silkfire是的,它会显示在谷歌 – silverflash

回答

2

首先排序列表;

假设用户输入的第一个字母是“A”;

以高= 0和低=字符串数量-1开头;

然后,你可以定义一个指数,其中高就是以“A”开头的,低的是,有一个字符串的第一个索引与“A”开头的最后一个索引。通过两个二进制搜索可以实现。

因此,如果输入的下一个字母是“B”,那么您在上面定义的高低范围内进行另一个二分搜索,然后再用两个二进制搜索再次调整高和低。确保你搜索字符串的高低之间的第二个字符与“B”匹配等:) :)

注意:我建议使用数据库来这样做,但正如你所查询的,如果有任何方式使用二进制搜索,我回答这样:)

简单的SQL查询:SELECT column_name FROM table_name WHERE column_name LIKE 'prefix%'选择那些字符串开始与存储在“表名”表列“COLUMN_NAME”

+1

大跌倒在这里是你必须填充和搜索每个请求30,000元素的数组。 – Orangepill

+0

@Orangepill:我相信该列表已预先填充。并且搜索是二分搜索,所以lg(30,000)<= 16(其中,lg = log2)因此每一步最多会有16 + 16 = 32个比较。 – Fallen

+0

如果我将使用数据库,每当用户按下某个键时,我都不需要查询数据库吗? – silverflash