0

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

4

2 回答 2

2

首先对列表进行排序;

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

从高 = 0 开始,低 = 字符串数 -1;

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

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

注意:我建议使用数据库来这样做,但是当您询问是否有任何使用二进制搜索的方法时,我是这样回答的:)

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

于 2013-07-21T19:53:34.940 回答
0

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

php.net 文档

于 2013-07-21T19:49:27.723 回答