汎用クラスライブラリ - バグ、説明、質問、使用上の特徴、提案 - ページ 6

 
ワシリー・ソコロフ

同じアルファベットで始まる単語が違うということはよくあることです。先ほどの辞書に「apple」を入れて、「application」を入れようとすると、うまくいきません。インデックス0はワードアップルで占められる。この場合、ハッシュ関数の衝突と言うことになります。今回のハッシュ関数は非常にシンプルで、単語の最初の文字の番号を返すので、この関数の衝突は非常に頻繁に起こるでしょう。同じ文字で始まる異なる単語を格納するために、要素を配列ではなく、配列の配列に格納する足し算を行います。この場合、インデックス0には、"apple "と "application "という2つの単語からなる別の配列が格納されます。

これで、同じ文字で始まる言葉も辞書に登録されるようになりました。しかし、同じ頭文字の単語にアクセスするコストは増加します。なぜなら、今は「アプリケーション」という単語が辞書にあるかどうかを調べるために、「a」で始まるすべての単語を完全に検索する必要があるからです。 もし、ハッシュ関数が1文字違いの単語でも異なる数字を生成するとしたら、同じインデックスを持つ単語を試す確率は0になり、任意の要素へのアクセスはo(1)になる傾向がある。.これはまさに実際の辞書で起こっていることで、そこで使われている関数は衝突防止になっているので、これらのコレクションの要素へのアクセスは非常に高速で、ほとんど検索が必要ないと断言できる。

この例に対して、私の解決策を提示してみます。ポインターなし。もう少し後です。
 

最近、ある本を読みました。ガラガラポンアルゴリズム」といいます。すべてが例題付きでとてもわかりやすくまとめられています。

 
ワシリー・ソコロフ

次の例では、同じ文字から始まる単語を格納できるように改良します。

ヘッダーや不要なエンティティをつけず、簡潔に書いてください。

例えば、この

bool Contains(string word)
{
   uchar index = (uchar)StringGetCharacter(word, 0)-97;
   return words[index] != NULL;
}

は、もっとわかりやすく書けるはずです。

bool Contains(string word)
{
   return words[word[0]-'a'] != NULL;
}


また、MT4では配列がNULL値で初期化され、MT5ではそれがゴミになる可能性があるため、このコードはMT4/5で異なる動作をする可能性があります。

 
fxsaber

ハテナや余計な存在がごちゃごちゃにならないように、簡潔に書いてください。

...


断固反対!コードはできれば全文で書きたいものです。すべてのMQコードを見てください。いたるところに "caps "があります。これがスタンダードです。


fxsaber

...

それでもMT4/5用のこのコードは、MT4では配列がNULL値で初期化され、MT5ではそれがゴミになる可能性があるため、異なる動作をするかもしれません。


旧来の端末と何か関係があるのでしょうか?怠けてまだ古いものを使っているのなら、これはあなた自身の問題です。そんな怠け者のために、コミュニティがスローダウンしてはいけないのです。

 
ウラジーミル・カルプトフ

すべてのMQコードを見てください。いたるところに「caps」があります。これがスタンダードです。

標準なんてクソくらえだ、ここで重要なのは本質であって、コードの50%を占めるスタイルじゃない。

 
fxsaber

規格はどうでもよくて、重要なのは本質であって、コードの50%を占めるスタイルではありません。


フォーラムの主な仕事はEDUCATIONです。そのため、コードはできるだけ標準に近い形で拡張し、明確にする必要があります。

 
ワシリー・ソコロフ

実際の辞書で使われている関数は衝突が起こりにくいので、コレクション内のアイテムへのアクセスは非常に速く、ほとんどオーバーシュートしないと断言できる。

つまり、すべてのタスクにおいて、辞書のサイズ(RAM)とハッシュ関数の計算量(CPU)の中間を見つける必要がある。

 
ウラジーミル・カルプトフ

フォーラムの主目的は教育です。したがって、コードを拡張して理解する必要が あります

これで十分です。

を可能な限り標準に近づけました。

独自のヘッダーを挿入することができます。A100はSDで数百枚のレポートをキャップ無しで発行していますが、それが標準ですなぜなら、重要なのは本質であって、飾り気ではないからです。

 
解決策はあります。しかし、一時的に興味本位で保存するため、ここに実行ファイルを掲載したいと思います。さらに、有能な人は、私のソリューションと上記の著者が提供するソリューションの性能を比較する。どっちが早く効くかなぁ。
ファイル:
Dictionary.ex5  10 kb
 
レテグ・コノウ
解決策はあります。しかし、一時的に興味を持たせるために、ここに抜粋を掲載したいと思います。さらに、有能な人は、私のソリューションと上記の著者が提供するソリューションの性能を比較する。どっちが早く効くかなぁ。
実行ファイルを実行する必要があります。入力欄が 表示されます。次に、さまざまな言葉を入力することができます。一致する単語があれば、プリンターからその単語が辞書に登録されていることが通知されます。単語がない場合は、辞書に単語が追加されたことを通知します。