3

Я кодировал небольшую поисковую систему и вам нужно выяснить, есть ли более быстрый способ найти множество пересечений. В настоящее время я использую сортированный связанный список, как описано в большинстве алгоритмов поисковой системы. i.e для каждого слова у меня есть список документов, отсортированных по списку, а затем найдите пересечение между списками.Есть ли лучший способ найти множество пересечений для поискового кода?

Профилирование производительности корпуса here. Любые другие идеи для более быстрого набора пересечений?

+0

Вы можете начать с бинарного поиска, избегая линейного шага при начале. (это может быть распространено на перекрывающуюся часть, по методу «охоты»). BTW: связанный список не является лучшим представлением для больших отсортированных множеств. Вы можете попробовать массивы. – wildplasser

+0

Бинарный поиск - хорошая идея. Он будет defenitely помочь пропустить, если введено. то массив Vs List действительно имеет значение, если список/массив изменяется только при обновлении поисковых структур данных? большое спасибо –

ответ

2

Эффективный способ сделать это является «зиг-заг»:

Пусть ваши термины в список T:

lastDoc <- 0 //the first doc in the collection 
currTerm <- 0 //the first term in T 
while (lastDoc != infinity): 
    if (currTerm > T.last): //if we have passed the last term: 
    insert lastDoc into result 
    currTerm <- 0 
    lastDoc <- lastDoc + 1 
    continue 
    docId <- T[currTerm].getFirstAfter(lastDoc-1) 
    if (docID != lastDoc): 
    lastDoc <- docID 
    currTerm <- 0 
    else: 
    currTerm <- currTerm + 1 

Этот алгоритм предполагает эффективное getFirstAfter(), который может дать вам первый документ, который соответствует термину, а его docId больше заданного параметра. Он должен возвращать бесконечность, если их нет.

Алгоритм будет наиболее эффективным, если термины отсортированы так, что самый ранний термин будет первым.

Алгоритм обеспечивает не более #docs_matching_first_term * #terms итераций, но практически - обычно будет намного меньше итераций.

Более подробная информацию можно найти в this lecture notes слайдах 11-13 [прав копирования на первой странице лекционной в]

+0

даст вам попробовать и посмотреть, как это работает. thanx –

2

Вот research paper, который имеет анализ количественный для сравнения текущих алгоритмов.

+0

будет проходить через это спасибо. –

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