2

テキスト ファイル内の単語の出現回数をカウントし、それらを配列に格納するプログラムがあります。これまでのところ、固定配列を使用しており、すべて正常に動作していますが、それを動的配列に変更して、メモリが無駄になったり必要になったりすることがないようにしたいと考えています。これを達成するにはmallocとreallocを使用する必要があることは理解していますが、それを行う方法がよくわかりません。

私の最初のアイデアは、テキストファイル内の単語を単純に数えてから、それらすべてに十分なスペースをmallocすることでしたが、重複した単語はカウンターが増加するため、無駄なスペースが残りますが、配列に再度追加されることはありません。

このアプローチは理にかなっているように聞こえ、それを達成するための最良の方法でしょうか? 最初に、1 つの単語とそのカウンターを見つけるのに十分な小さな配列を malloc するとします。次に、配列に追加する必要がある新しい単語を見つけるたびに、別の単語とカウンターに収まるのに十分なだけ再割り当てします。それが重複している場合は、既存のカウンターがインクリメントされるだけなので、再割り当ては必要ありません。

4

1 に答える 1

5

一般に、100% のメモリ使用率を目指さないことが (取引速度とメモリ使用量の点で) 最善です。特に、プログラムが限られた時間しか実行されない場合は、必要以上に多くのメモリを使用しても、全体として大きな「コスト」はかかりません。

典型的なアプローチの 1 つは、動的配列の初期サイズを 8 や 128 などに設定し、それがいっぱいになるたびに 2 倍にすることです。

これにより、サイズがいっぱいになったときにサイズを 1 増やすだけの場合と比較して、再割り当て (コストがかかる) の回数が減ります。もちろん、それはいくらかのメモリを浪費します。

于 2013-04-09T13:28:25.730 に答える