0

関数から文字列を返すときに遅延が発生する理由はありますか?

背景情報: 文字を入力して、それらの文字のアナグラムを出力する簡単なプログラムを作成しました。数千語の非常に大きなテキスト ファイルから単語をチェックします。基本的に、各単語をベクトルに入れ、文字のアナグラムであるかどうかをチェックし、そうである場合は出力します。通常、これは 1 ~ 15 秒で完了します。これには満足しています。

代わりにアナグラムである文字列を返す関数に変換しようとしたときに問題が発生しました。それでも同じ速度で単語を「cout」しますが、実際に文字列を返して cout するには、この後約 20 秒かかります。

文字列を出力するだけでなく、実際に文字列を返すのに時間がかかるのはなぜですか?どうすれば修正できますか?

必要に応じてコードを投稿できます。

編集: 15 個のファイルがあるため、プロジェクトを zip としてアップロードしました。

http://www.mediafire.com/?c2gizpgcweg3iy4

私のコードである自動車事故を見るショックに備えてください。

4

1 に答える 1

0

multimap<string, string>これを行う場合は、anまたはaのいずれかを使用すると思いますmap<string, std::vector<string> >(2つはほぼ同等です)。

単語のリストを読むことから始めます。各単語を読みながら、コピーを作成し、そのコピー内の文字を並べ替えます。次に、ソートされたバージョンをキーとして、ソートされた/元のペアを[multi]mapに挿入します。

単語のアナグラムを探す必要があるときは、その単語を並べ替え、マップで並べ替えられたバージョンを探し、その並べ替えられたバージョンに一致するすべての元の単語を取得します。その後、あなたは彼らとあなたがやりたいことはほとんど何でもすることができます。

サイズと速度に関しては、たとえば39行の1つのファイルと、入力を読み取り、一致するアナグラムを1秒あたり約3000語の速度で印刷する機能を期待します(別の見方をしたい場合) 1秒あたり約15キロバイトの入力を計算します)。もちろん、その見積もり(?)は私の6年前のマシンに基づいています。新しいコンピューターを使用すると、かなり上手くできるはずです。

入力中にすべての単語が読み込まれるため、単語を印刷するのではなく返す場合、これが知覚できる程度に遅くなることはないと思います(実際、印刷しない場合は多少速くなると思います)結果)。

于 2012-12-18T06:12:52.393 に答える