2013-07-21 4 views
0

У меня есть файл, содержащий имена песен 30K. Я должен использовать этот список для автоматического предложения текста с помощью AJAX. Некоторые имена также начинаются с цифр. Мой вопрос: могу ли я выполнить бинарный поиск по этому списку? Если да, то как?Бинарный поиск в php над списком строк

+0

Define " бинарный поиск ", пожалуйста. Как вы хотите, чтобы результаты выглядели? Является ли выпадающим списком? – silkfire

+4

Используйте базу данных ... не пытайтесь делать это с большим файлом. – Orangepill

+0

@silkfire Да, его покажет, как в раскрывающемся списке, как в Google – silverflash

ответ

2

Прежде всего рода перечень;

Предположим, что первая буква, которую пользователь набрал, - «A»;

Начать с high = 0 и low = количество строк -1;

Затем вы можете определить высокий и индекс низкой, где высокий последний индекс, который начинается с «A» и низкий первый индекс, который имеет строку начинается с «A». С двумя бинарными поисками это может быть достигнуто.

Таким образом, если следующая буква, набравшая букву «B», вы делаете другой бинарный поиск в диапазоне высоких и низких значений выше и снова корректируете высокий и низкий уровни с помощью двух бинарных поисков. Убедитесь, что вы ищите второй символ строк между высоким и низким для соответствия «B» и т. Д. :)

Примечание: Я бы предложил использовать базу данных, чтобы сделать это, но по мере того, как вы спрашивали, есть ли каким-либо образом использовать бинарный поиск, Я отвечаю на этот путь :)

Простой SQL-запрос: SELECT column_name FROM table_name WHERE column_name LIKE 'prefix%' для выбора строки те начинаются с «префикса» хранится в столбце «column_name» таблицы «table_name»

+1

Большое падение здесь - вам нужно заполнить и найти массив из 30 000 элементов с каждым запросом. – Orangepill

+0

@Orangepill: список предварительно заполнен, я считаю. и поиск - двоичный поиск, так что lg (30 000) <= 16 (где, lg = log2). Таким образом, на каждом шаге будет не более 16 + 16 = 32 сравнений. – Fallen

+0

Не буду ли я запрашивать базу данных каждый раз, когда пользователь нажимает клавишу, если я буду использовать базу данных? – silverflash

Смежные вопросы