質問編集履歴

2

コンパクトにしました

2016/07/19 07:42

投稿

hiroki15
hiroki15

スコア7

test CHANGED
File without changes
test CHANGED
@@ -1,8 +1,4 @@
1
- 演習 サフィックスアレイ(Suffix Array)
2
-
3
- スキル:文字列の操作,ソート,二分探索.
1
+ 文字列の操作,ソート,二分探索.
4
-
5
- 予想コーディング量:120行程度.
6
2
 
7
3
  ドキュメント中に,ある文字列が含まれているかを探すプログラムを作成したいです。
8
4
 
@@ -24,20 +20,6 @@
24
20
 
25
21
  という文字列になる.(これをすべての単語について行う.)
26
22
 
27
- 2. 上記の文字列をソートする.
28
-
29
- 3. 探したい文字列を入力し,それを上記のソートされた文字列の並びから二分探索で探す.(普通は,いろいろな文字列を探すので,このステップ3は無限ループとなる.)
30
-
31
- 検索対象ファイルは,”tom.txt”とする.ステップ1の前に,ファイルから単語を読み込む必要がある.今回は空白は単語区切りと考え,例えば”a b”のような文字列を探すことは考えなくて良い.従って,scanfの書式%sで読み込めば良い.
32
-
33
- ステップ1で,本当にサフィックスの文字列を作り出すなどという無駄なことはしないように注意.既に存在する文字列の途中をポインタで指すようにする.
34
-
35
- ステップ2では,ポインタの配列をソートする.
36
-
37
- ステップ3では,ポインタの配列の中から目的の文字列を探す.二分探索のプログラムを使う.この時,文字列全体が一致しなくても良いことに注意する.例えば,“uff”を探している場合は,”uffix”のように先頭から3文字が一致していれば,”uff”はファイルに含まれていたということになる(ヒント: strncmpという関数がある).uffを含む単語は複数あることに注意.そのすべてサフィックスを表示すること.オリジナルの単語は表示しなくてよい.サフィックスだけ表示すればよい.
38
23
 
39
24
 
40
-
41
- まず、ステップ1行う関数がわかりません。
25
+ この動きする関数がわかりません。
42
-
43
- tom.txtというテキストは自分がもっています。

1

アドバンスコースを削除しました

2016/07/19 07:42

投稿

hiroki15
hiroki15

スコア7

test CHANGED
File without changes
test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  予想コーディング量:120行程度.
6
6
 
7
- ドキュメント中に,ある文字列が含まれているかを探すプログラムを作成する.ここ実装るのは,サフィックスアレイと呼ばれる有名なアルゴリズムで,次のようなものである.
7
+ ドキュメント中に,ある文字列が含まれているかを探すプログラムを作成したいです
8
8
 
9
9
 
10
10
 
@@ -36,6 +36,8 @@
36
36
 
37
37
  ステップ3では,ポインタの配列の中から目的の文字列を探す.二分探索のプログラムを使う.この時,文字列全体が一致しなくても良いことに注意する.例えば,“uff”を探している場合は,”uffix”のように先頭から3文字が一致していれば,”uff”はファイルに含まれていたということになる(ヒント: strncmpという関数がある).uffを含む単語は複数あることに注意.そのすべてサフィックスを表示すること.オリジナルの単語は表示しなくてよい.サフィックスだけ表示すればよい.
38
38
 
39
- 【拡張へのヒント: オリジナルの単語を表示する.また,ファイルの先頭から何行目にその文字列が出現したのかも表示できるようにする.もちろん,出現したすべての行数を表示する.】
40
39
 
40
+
41
+ まず、ステップ1を行う関数がわかりません。
42
+
41
- 【アドバンスコース:実際の文書検索に用るには,例えば見つかった場所の前後数十字を表示するなども考える必要がある.サフィックアレイ簡単なアルゴリズムだ,検索自体(上のステップ3)は文書の大きさNに対しlogNに比例した時間しかかからず高速である.このため,さまざまな場所で実際に用いられている.】
43
+ tom.txtとうテキ自分もっています。