Skip to content

Commit efb346c

Browse files
committed
sprint4
1 parent 1846c91 commit efb346c

1 file changed

Lines changed: 20 additions & 9 deletions

File tree

src/main/java/algorithms/sprint4/FindSystem.java

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,12 @@ class FindSystem {
1717
* 1) Строим обратный индекс:
1818
* для каждого слова храним список документов, где оно встречается,
1919
* и число его вхождений в каждом документе.
20-
* 2) Для каждого запроса берём только уникальные слова.
21-
* 3) Для каждого такого слова прибавляем его частоту ко всем документам,
22-
* где это слово есть.
23-
* 4) Из найденных документов выбираем 5 лучших:
24-
* сначала по убыванию релевантности, потом по возрастанию номера документа.
20+
* 2) Для каждого запроса берём только уникальные слова из этого запроса,
21+
* то есть если слово в запросе встретилось несколько раз, учитываем его один раз.
22+
* 3) Для каждого такого слова прибавляем к релевантности документа
23+
* частоту этого слова в документе, то есть число его вхождений в документ.
24+
* 4) Релевантность документа — это сумма частот всех уникальных слов запроса
25+
* в этом документе. Из найденных документов выбираем 5 лучших.
2526
*
2627
* Почему алгоритм корректен:
2728
* - В индексе для каждого слова хранится точное число его вхождений в документ.
@@ -33,12 +34,22 @@ class FindSystem {
3334
* значит ответ получается правильным.
3435
*
3536
* Временная сложность:
36-
* - Построение индекса: O(n), где n — общее число слов во всех документах.
37-
* - Обработка одного запроса: O(n), где n — суммарная длина списков документов
38-
* для уникальных слов запроса.
37+
*
38+
* Обозначения:
39+
* - D — число документов;
40+
* - Wd — максимальное число слов в одном документе;
41+
* - Q — число запросов;
42+
* - Wq — максимальное число слов в одном запросе.
43+
*
44+
* - Построение индекса: O(D * Wd).
45+
* - Обработка одного запроса: O(Wq * D) в худшем случае,
46+
* если каждое уникальное слово запроса встречается во всех документах.
47+
* - Обработка всех запросов: O(D * Wd + Q * Wq * D).
3948
*
4049
* Пространственная сложность:
41-
* - O(n), где n — число пар (слово, документ) в индексе.
50+
*
51+
* - Индекс: O(D * Wd), так как в худшем случае храним информацию по всем словам документов.
52+
* - Дополнительная память на один запрос: O(Wq + D).
4253
*/
4354

4455
private static HashMap<String, ArrayList<int[]>> buildIndex(String[] docs) {

0 commit comments

Comments
 (0)