私はさまざまなサイズの単語が多いファイル(.dic)を持っているプロジェクトがあります。そしていくつかの言葉で別のファイル(.pal)。 .palファイルの各単語については、.dicファイルからアルファベット順に並び替えられた単語の数と同じ数の単語のリストでその位置を見つけなければなりません。Cの辞書の単語を確認してください
例えば、.DICファイル内 :だから
dog
flower
:.PALファイルに
3 letters: [car->dab->dog->tar]
6 letters: [banana->flower]
:
car
banana
dog
flower
tar
だから辞書のようなものになるだろう出力は次のようになります。
dog in position 3
flower in position 2
私の質問は:Cでこれを実装するのに最適なデータ構造は何ですか?それではメモリと時間は最小限に抑えられますか?
私は最初のインデックス(index1)が単語の文字数に対応し、2番目のインデックス(index2)が私が探している単語の最初の文字に対応する行列を持つことを考えていましたために。その行列の各要素は、index1文字を持ち、index2という文字で始まる単語のリストです。
例:
| A | B | C | .....
_______________
1|list|list|list|
2|list|....|....|
3|...
.
.
だから "犬" は、マトリックス内部リストであろう[3] [D]。
問題1:すべての文字数が異なるか、最初の文字が異なる単語がない場合は、行列に穴が空いています - >あまりにも多くのメモリが無駄になりますか?
問題2:私が使用する前に各リストの要素の数を要約する前に私が尋ねた位置を知ること。
例:私は、リスト内の単語を挿入したときに「犬」の位置が
number of element in list [3][A]+number of element in list [3][B]+number of element in list [3][C]+"dog" position in the list
だろうだから、私は次の行列要素にリストの要素数を更新しなければなりません。 - >時間がかかりますか?
この方法についてどう思いますか?より良いアイデアはありますか?
あなたはhttp://stackoverflow.com/documentation/data-structures/7178/trie-prefix-tree-radix-([トライ]と考えられてきましたtree#t = 201610221652587151612)、別の変数として単語の位置が追加されていますか? –
複雑なデータ型を過剰に使用しないでください。ハッシュはそれを行うことができます。 438の答えは.....、私はリンクリストへのポインタのハッシュを使用しますが、各リストには2つのエントリ、次の要素へのポインタと単語へのポインタがあります。 – Elyasin