アルゴリズムや処理の高速化の知恵をお借りしたく。宿題ではありません。
Cで英単語のスペルチェッカを作って、タイムアタックするYO!というお題。
与えられているのは、14万語強の英単語リスト(約1.4MB)、
700万語強の照合するテキスト(約39MB)と、プログラムのテンプレ。
これに、各自で辞書の読み込みload()、チェックルーチンcheck()、
辞書の単語数のカウントcount()、メモリの開放unload()を実装するようです。
照合の仕様は、単純に辞書に同じ単語があるかどうかだけです。
ただし大文字小文字は区別しません。
試しに手元のMacBook+gccで配列に突っ込んだ辞書を
逐一リニアサーチさせてみると9700秒、
辞書を50万個のハッシュの中に無理矢理おさめて14秒です。
講義で想定している実装は、ハッシュ+片方向の連結リスト。
あるいはトライ木。ぼちぼちと試していくつもりですが、
↓の結果(クラウドなサーバー上で実行)を見る限り、
トップのあたりはどうも想像の斜め上をいく実装をしている模様。
ttp://www.cs50.net/boards/pset6.php みなさんなら、どう攻めますか?
お題の詳細は↓の中のpset6.pdf、辞書はwords、
テンプレのプログラムと照合テキストはpset6.zipにあります。
ttp://cdn.cs50.net/2009/fall/psets/6/