Random randomGenerator = new Random();
for (int i = 0; i < 100; i++) {
int randomInt = randomGenerator.nextInt(99999);
H.insert(""+randomInt);
}
これを試してみてください。1行が悪い場所にあります。
プロービングの場合:
/**
* Method that performs quadratic probing resolution.
* @param x the item to search for.
* @return the position where the search terminates.
*/
private int findPos( AnyType x )
{
int offset = 1;
int currentPos = myhash( x );
while( array[ currentPos ] != null &&
!array[ currentPos ].element.equals( x ) )
{
currentPos += offset; // Compute ith probe
offset += 2;
if( currentPos >= array.length )
currentPos -= array.length;
}
return currentPos;
}
私が正しく理解していれば、このメソッドはプロービングを実行していますか? したがって、このメソッドが呼び出された回数を、重複する場合と重複しない場合の 2 つのオプションでカウントする必要があります。追加された現在の要素が重複し、2 つの整数である場合は、いくつかのフラグを使用します。このメソッドではif
、フラグをチェックするために追加し、カウンターの 1 つを増やします。プローブの数があります。
編集:
[LIN-np]: 非素数テーブルサイズ 1000 の線形探索 [LIN-p]: 素数テーブルサイズ 1019 の線形探索。1019 は minPrime(1000)、つまり、 1000. [QDR-p]: 素数テーブル サイズ 1019 の二次プロービング [DBL-p]: 素数テーブル サイズ 1019 のダブル ハッシュと素数 97 の衝突解決ハッシュ。
プロービングを使用する HashTable を使用し、プロービングの量 (平均) をテストする必要があります。に 2 次プロービング アルゴリズムがありpublic class QuadraticProbingHashTable<AnyType>
ます。また、ハッシュ テーブルの長さを 1019 に設定する必要があります。最初の演習では、線形プローブを使用する必要があります。したがって、基本的には、要素の追加を開始するときに、指定された前提条件で HashTables を使用する必要があります。
これは線形プロービング アルゴリズムです。
これはダブルハッシュアルゴリズムです
これをハッシュ テーブルに実装し、それが何回使用されるかを確認する必要があります。生成される衝突の数が何らかの形で表示されると思います。ハッピーコーディング。二次アルゴリズムが完了しました。前提条件を設定するだけです) (ハードコードの開始値を 1019 に設定)。