在字符串列表中的二进制搜索

时间:2013-07-21 19:47:09

标签: php

我有一个包含大约30K歌曲名称的文件。我必须使用此列表与AJAX自动文本建议。 一些名字也以数字开头。我的问题是我可以对此列表进行二进制搜索吗?如果是,怎么样?

2 个答案:

答案 0 :(得分:2)

首先对列表进行排序;

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

从high = 0开始,low =字符串数-1;

然后你可以定义一个和一个索引,其中high是以“A”开头的最后一个索引,low是第一个有字符串开头的索引用“A”。通过两次二进制搜索,可以实现这一目标。

因此,如果键入的下一个字母是“B”,那么您可以在上面定义的高和低范围内进行另一个二进制搜索,并使用两个二进制搜索再次调整高和低。确保在高低之间搜索字符串的第二个字符以匹配“B”,依此类推:)

注意:我建议使用数据库来执行此操作,但是当您查询是否有任何方法可以使用二进制搜索时,我会回答这个问题:)

简单的SQL查询:SELECT column_name FROM table_name WHERE column_name LIKE 'prefix%'选择以'table_name'表格的'column_name'列中存储的'prefix'开头的字符串

答案 1 :(得分:0)

您可以使用mixed array_search ( mixed $needle , array $haystack [, bool $strict = false ] )

php.net documentation