純粋に機能的な設定で、一重にリンクされたリストを検討してください。その賞賛は山頂から歌われており、今後も歌われ続けます。ここでは、その多くの長所のうちの1つと、それをツリーに基づく純粋に機能的なシーケンスのより広いクラスに拡張する方法の問題に取り組みます。
問題は次のとおりです。強力なハッシュを使用して、O(1)時間のほぼ一定の構造的同等性をテストする必要があります。ハッシュ関数が構造的に再帰的である場合、つまり、hash(x:xs)= mix x(hash xs)の場合、リストのハッシュ値を透過的にキャッシュし、要素が既存のリストに結合されたときにO(1)でそれらを更新できます。リストをハッシュするためのほとんどのアルゴリズムは構造的に再帰的であるため、このアプローチは実際に非常に有用です。
しかし、一重リンクリストの代わりに、O(log n)時間で長さO(n)の2つのシーケンスの連結をサポートするツリーベースのシーケンスがあるとします。ここでハッシュキャッシングを機能させるには、ツリーが同じ線形シーケンスを表す際に持つ自由度を尊重するために、ハッシュミキシング関数を連想的にする必要があります。ミキサーは、サブツリーのハッシュ値を取得し、ツリー全体のハッシュ値を計算する必要があります。
これは、6か月前、この問題を熟考して調査するのに1日費やした場所です。データ構造に関する文献では注目されていないようです。暗号化からTillich-Zemorハッシュアルゴリズムに出くわしました。これは、ビット0と1がガロア体のエントリを持つ部分代数の2つの生成器に対応する2x2行列乗算(連想)です。
私の質問は、私が逃したものは何ですか?私の検索で見つけられなかった暗号とデータ構造に関する文献の両方に関連性のある論文がなければなりません。この問題についてのコメントと探求する可能性のある場所は大歓迎です。
編集:スペクトルのソフトと暗号の両方の強みに関するこの質問に興味があります。よりソフトな側面では、衝突を回避する必要があるが壊滅的ではないハッシュテーブルに使用できます。強い面では、同等性テストに使用できます。