私はハッシュ関数の考え方に精通していますが、GLibの実装がどのように役立つかは不明です。これを例を使って説明します。GLibのHashTablesはどのように役立つのですか?
数値理論(私は数学者です)に依存する奇妙な方法で正の実数に再帰的(何らかの形で)な高価な関数があるとします。ある小さな範囲の大きな数で関数を計算する必要のあるアルゴリズムがあるとしましょう。 [1000000000 - 1000999999]と言ってください。
高価な関数を100万回呼び出したくないので、再帰的に値をメモし始めます。それから各呼び出しで関数を最初から計算する必要はありません。私が既に計算した低い数値(再帰中)の関数の値を覚えておいてください。その第1レベルの再帰での実際の総コール数が低いと仮定しよう。繰り返しの価値がたくさんあり、メモは実際にあなたに多くの時間を節約します。
これは、なぜハッシュテーブルのデータ構造が有用であるかを理解する漫画的な方法です。私が得意ではないことは、事前に必要なキーを正確に知らなくてもこれを行う方法です。
再帰関数は一般的に数値理論的なので、どの値を繰り返し使用するか分かりません。だから私はバケツ(ハッシュテーブル)に私の関数への再帰的な呼び出しのポップアップでこれらを投げたいです
GLibでは、あなたの(キー、値)のペアは、常にあなたは個人的にどこかに横たわっていなければなりません。私の関数が入力xを計算している場合。私は前に値xを見たことがあるかどうかを知る方法がわかりませんが、関数g_hash_table_contains()には値xではなくポインタが必要です。だから何が使えますか?
私はまだ親切に勉強しています。私はCでのコーディングに精通していますが、この言語でハッシュテーブルをまだ使用していないので、そうしようとしていて、GLibでそれに熟達していますが、これは得られません。
ポインタは動的に割り当てられ、ハッシュテーブルはそれらを管理しています。あなたはそれらを他の場所に置く必要はありません。あなたが作ったのと同じ主張は、リンクされたリストに対して行うことができます...同じ答えで。 –