что лучший путь состоит в том, чтобы искать в миллионах имен файлов с подстановочным знаком (ШАРИК) поддержку

я работаю над маленькой поисковой системой для отображения соответствия имена файлов с полным путем. и важная вещь состоит в том, что я должен обеспечить подстановочный знак (ШАРИК) поиск как *.doc или *list*.xlx или *timesheet* или ???.doc или что-то как этот.

я нашел некоторое связанное решение

Поиск строк, соответствующих шаблону "abc: *:xyz" в меньше, чем O (n)

но я ищу эффективные алгоритмы, которые могут найти соответствия из миллиона имен файлов в меньше, чем секунда, настолько лучше, чем O (n) требуется..

я думаю о двух алгоритмах фазы с массивом подстроки (Суффиксный массив + массив префикса), поиск в первой фазе и нормальном RegEx перерывает результаты первой фазы вторая фаза.

любая справка значительно ценилась бы...

7
задан Community 23 May 2017 в 12:30
поделиться

2 ответа

Я слышал о 2 способах сделать это. Во-первых:

from win32com.shell import shell
shell.SHGetSpecialFolderPath(0,shellcon.CSIDL_COMMON_STARTMENU)

Во-вторых, использование объекта WScript.Shell (source: http ://www.mail-archive.com/python-win32 @ python.org/msg00992.html ):

import win32com.client
objShell = win32com.client.Dispatch("WScript.Shell")
allUserProgramsMenu = objShell.SpecialFolders("AllUsersPrograms")
userMenu = objShell.SpecialFolders("StartMenu")

Другой источник: http://blogs.msdn.com/saveenr/archive/2005/12/28/creating-a-start-menu-shortcut-with-powershell-and-python.aspx

-121--4222932-

Это как

Статические библиотеки компилируются в, динамические библиотеки загружаются во время выполнения, но только те символы, которые отсутствуют (я думаю) вы можете скомпилировать общие библиотеки в, и тогда вы, вероятно, получите конфликт символов.

поэтому opencv использует символы, которые компилируются в, поскольку они уже присутствуют, а не из динамических библиотек. вы в конечном итоге используете статические символы, возможно, с различными сигнатурами, из проспективы opencv.

-121--4460226-

Насколько я знаю, нет пути сделать лучше, чем O (n) для обобщенного поиска по глобусу.

Однако для особых случаев поиска префиксов и суффиксов можно выполнить сортировку индексов для выполнения двоичного поиска, в результате чего появится O (log n) для поиска префиксов и суффиксов. Индекс префикса будет отсортирован на основе первого символа, затем второго и так далее. Индекс суффикса будет отсортирован на основе последнего символа, затем второго последнего и так далее (обратные последовательности).

Я бы сделал, как вы предлагаете в вашей публикации и сделать поиск в двух фазах, поиск префикса или суффикса индексов, а затем грубый поиск силы через сокращенный список, предоставленный с первой фазы с помощью регекса, сделанного из глобуса.

Так как сравнение длин последовательности быстрее, чем регрессы, я бы также предварительно фильтровал минимальную длину совпадающего ряда или фиксированную длину совпадающего ряда для примера??? .doc.

Из звука вашей исходной публикации индексы также должны ссылаться на полный путь каждой записи, чтобы вы могли отобразить ее после того, как будут найдены окончательные результаты.

2
ответ дан 7 December 2019 в 12:19
поделиться

Вы можете сделать это легко, если вы используете относительно новую версию Subversion (1,5 или выше, я думаю) с mergeinfo подкоманды.

svn mergeinfo --show-revs eligible svn://repo/branches/your-branch-name svn://repo/trunk

Здесь отображаются все версии, которые могут быть объединены в багажник из ветви «your-branch-name».

Источник: http://svnbook.red-bean.com/en/1.5/svn.ref.svn.c.mergeinfo.html

-121--1000438-

Возможно, вам потребуется просмотреть протокол Stream Control Transmission Protocol , который допускает несколько потоков данных через одно TCP-соединение.

EDIT - Я не знал, что TCP не имеет собственного поля заголовка, поэтому не было бы способа сделать это без записи пользовательского эквивалента TCP, который содержит эту информацию. SCTP все еще может быть полезен, так что я оставлю эту ссылку.

-121--3113773-

Проверьте саминдексацию: Этот вопрос переполнения стека и эта статья DrDobbs на нем.

3
ответ дан 7 December 2019 в 12:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: