11. Document Array
各文書をつなげた文字列 T = d1$d2$...$dmに対しSuffix Array SAを構
築
文書配列Dを次のように構築する
|DA| = |SA|
T[i] = SA[i] (i=0,1,…|T|-1)が該当する文字が含まれる文書番号
例
d1 = mi ma ma, d2 = la ma la, d3 = me mi ma, d4 = la me me
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mi
m
a
m
a
$
la
m
a
la
$
m
e
mi
m
a
$
la
m
e
m
e
$
SA $
$
$
$
la
la
la
m
a
m
a
m
a
m
a
m
e
m
e
m
e
mi
mi
SA 4
8
12
16
7
5
13
3
11
6
2
15
14
9
10
1
D
2
3
4
2
2
4
1
3
2
1
4
4
3
3
1
T
1
12. Document Arrayから文書集合を取得する
Document ListingはSuffix Arrayにてクエリがヒットする範囲の文書
配列上からIDを取得する問題と同じになる
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mi
m
a
m
a
$
la
m
a
la
$
m
e
mi
m
a
$
la
m
e
m
e
$
SA $
$
$
$
la
la
la
m
a
m
a
m
a
m
a
m
e
m
e
m
e
mi
mi
SA 4
8
12
16
7
5
13
9
10
1
2
2
4
3
11 6
2
15 14
maが含まれる文書: 4
1,2,34
1
3
2
1
3
3
1
T
D 1 ma の場合 4
3
クエリ: 2
A la me me …
13:
3: ma $ la ma …
11: ma $ la me …
6: ma la …
2: ma ma …
15: me $
17. ヒット文書の列挙
1.
2.
Suffix Arrayでクエリqを含む範囲[s, e)を求める
Document Arrayでrange_report(s, e, 1, m)を求める(m: 全文書数)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mi
m
a
m
a
$
la
m
a
la
$
m
e
mi
m
a
$
la
m
e
m
e
$
SA $
$
$
$
la
la
la
m
a
m
a
m
a
m
a
m
e
m
e
m
e
mi
mi
SA 4
8
12
16
7
5
13
9
10
1
2
2
4
3
11 6
2
15 14
maが含まれる文書: 4
1,2,34
1
3
2
1
3
3
1
T
D 1
2
3
4
A
クエリ: ma の場合
13: la me me …
3: ma $ la ma …
11: ma $ la me …
6: ma la …
2: ma ma …
15: me $
range_report(s,e,1,m) = (1,2),(2,1),(3,1)
計算量: O(log m + docc log(m/docc))
(docc: ヒット文書数)
20. 上位k件
1.
2.
Suffix Arrayでクエリqを含む範囲[s, e)を求める
Document Arrayでtopk(s, e, k)を求める(m: 全文書数)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mi
m
a
m
a
$
la
m
a
la
$
m
e
mi
m
a
$
la
m
e
m
e
$
SA $
$
$
$
la
la
la
m
a
m
a
m
a
m
a
m
e
m
e
m
e
mi
mi
SA 4
8
12
16
7
5
13
9
10
1
2
2
4
3
11 6
2
15 14
maが含まれる文書: 4
1,2,34
1
3
2
1
3
3
1
T
D 1
2
3
4
A
クエリ: ma の場合
13: la me me …
3: ma $ la ma …
11: ma $ la me …
6: ma la …
2: ma ma …
15: me $
topk(s,e,2) = (1,2),(2,1)
計算量: O(k log(m))
23. Andクエリの検索結果
1.
2.
T
Suffix Arrayでクエリq1を含む範囲[s1, e1)とq2を含む範囲[s2,e2)を
求める
Document Arrayでintersection(s1, e1, s2, e2)を求める(m: 全文書
数) 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
1
mi
SA $
m
a
m
a
$
la
m
a
la
$
m
e
mi
m
a
$
la
m
e
m
e
$
$
$
$
la
la
la
m
a
m
a
m
a
m
a
m
e
m
e
m
e
mi
mi
11 6
2
15
maが含まれる 4
3
2
1
文書: 1,2,3
14
9
10 1
miが含まれる
3
3
1
文書: 1,3
SA 4
8
12 16 7
5
13 3
クエリ: ma の場合 4 クエリ:2mi の場合
D 1
2
3
2
4
1
13: la me me …
9: me mi…
A
3: ma $ la ma …
10: mi ma…
11: ma $ la me …
1: mi ma …
6: ma la …
2: ma ma …
15: me $
4
intersection(s1,e1, s2, e2) = {1,3}
計算量: O(k log(e1-s1+e2-s2+1))