Java の疎行列 / 配列
疎配列で構築されたハッシュマップは、頻繁に読み取られるデータに対して非効率的です。スパース配列を実装する最も効率的な方法はトライを使用することです。これにより、セグメントが分散されている単一のベクトルに高速にアクセスできます。
トライの使用
A Trie は、2 回の読み取り専用配列インデックス操作だけでテーブル内に要素が存在するかどうかを判断し、要素の有効な位置を提供したり、その要素が存在しないことを示したりすることができます。また、スパース配列のデフォルト値に対してバッキング ストア内のデフォルトの位置を提供することもできるため、返されたインデックスに対するテストの必要がなくなります。
Vorteile of Tries
- 複雑なハッシュ関数や衝突処理がないため、ハッシュマップよりもはるかに高速です
- Java ハッシュマップはオブジェクトのインデックスのみを作成できますが、Tries は整数を処理できます
- 整数オブジェクトとしてメモリ効率が高くなりますハッシュされたソース インデックスごとに作成する必要はありません
トライを使用したスパース配列を実装する手順
- subrangeOf( を使用してサブレンジとオフセットの計算を定義します) およびpositionOffsetOf() メソッド。
- 効率的な配列操作には、system.arraycompare() および system.arraycopy() を使用します。
- Trie 構造体とその内部メンバーを設定します。
- リセット、値の設定 (setAt())、および値の取得 (getAt()) のメソッドを提供します。
- オプションで、共通の部分範囲を検出してマージすることでストレージを最適化する Compact() メソッドを実装します。
トライを使用した疎配列の実装のヴォルタイル
- 新しい部分範囲の高速な再割り当て
- 部分範囲の自動検出と圧縮
- 共通サブ範囲の共有データ
- 共有サブ範囲の読み取り専用データ
制限事項
- 現在の実装には静的サブ範囲がありますサイズが異なり、柔軟性が制限されます。
- 圧縮は、インターリーブなしで共通のサブレンジを検出することに限定されます。
追加の考慮事項
- Colt ライブラリは良いものですが、ハッシュ技術を使用するスパース行列には最適化されていません。
- Trove の実装も、同様の制限を持つハッシュ技術に基づいています。
- トライは、ハッシュや行と比較して優れた速度と適度なスペース消費を提供します。圧縮技術。
以上がJava でのスパース行列のパフォーマンスをどのように強化できるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。