@@ -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