C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++でのミッドスクエアハッシュ。


問題の説明

ミッドスクエア法は、疑似乱数を生成する方法です。この方法はジョンフォンノイマンによって発明され、1949年の会議で説明されました

  • この手法では、初期シード値が取得され、2乗されます。

  • 真ん中からいくつかの数字が抽出され、これらの抽出された数字が新しいシードとして使用される数字を形成します。

    • 3456をシードとして取り上げましょう。その正方形は11943936です

    • 真ん中の4桁を新しいシード、つまり9439とします。その正方形は89094721

    • 真ん中の4桁を新しいシード、つまり0947として使用します

    • このプロセスを繰り返します

アルゴリズム

1. Choose initial seed value
2. Take the square of the seed value
3. Update seed by taking n digits from previous result

#include <iostream>
#include <ctime>
using namespace std;
long long getTime(){
   time_t t = time(NULL);
   struct tm *tm = localtime(&t);
   long long x = (tm->tm_hour) * 50000000 + (tm->tm_min) * 100000 + (tm->tm_sec) * 5000 +
(tm->tm_mday) * 50 + (tm->tm_year);
   return x;
}
long getHash(){
   long long key = getTime();
   key = key * key;
   key = key / 10000;
   key = key % 100000000;
   return key;
}
int main(){
   cout << "Random number: " << getHash() << endl;
   return 0;
}

出力

上記のプログラムをコンパイルして実行する場合。次の出力を生成します-

Random number: 10088419

  1. C++で特定のキーの次の右ノードを検索します

    この問題では、バイナリツリーBTとキー値が与えられます。私たちのタスクは、特定のキーの次の正しいノードを見つけることです。 バイナリツリーは、データストレージの目的で使用される特別なデータ構造です。 問題を理解するために例を見てみましょう 入力 key = 4 出力 5 説明 ノード4の隣の要素は5です。 ソリューションアプローチ この問題の簡単な解決策は、レベル順トラバーサルを使用してバイナリツリーをトラバースすることです。そして、与えられたキー値について、トラバーサルの同じレベルでノードの隣にノードが存在するかどうかを確認します。はいの場合は次のノードを返し、そうでない場合

  2. C++の配列に存在するキーKの確率

    サイズ「n」の配列で与えられ、タスクは、配列で利用可能な場合、与えられた要素kの確率を見つけることです。 配列内の要素の数に等しい「n」まで配列全体をトラバースし、指定された要素またはキー「k」を検索します。要素がその確率を計算するよりも配列に存在する場合は、0を出力します。 入力 arr[] = { 1, 2, 3, 4, 5, 6} K = 5 出力 probability of a key 5 in an array is :0.166 入力 arr[] = { 1,2,3,4,5,6,7 } K = 8 出力 probability of a key 5 in an