關於Hash競猜遊戲開發技術方案丨雜湊競猜遊戲系統開發邏輯(原始碼部署)

Tg_StPv888發表於2023-02-21

1、雜湊演算法又叫雜湊演算法,是將任意長度的二進位制值對映為較短的固定長度的二進位制值,這個小的二進位制值稱為雜湊值。I8O量化2857交易8624系統開發它的原理其實很簡單,就是把一段交易資訊轉換成一個固定長度的字串。MD5和SHA-1可以說是應用最廣泛的Hash演算法,而它們都是以MD4為基礎設計的。


2、這串字串具有一些特點:


(1)資訊相同,字串也相同。


(2)資訊相似不會影響字串相同。


(3)可以生成無數的資訊,但是字串的種類是一定的,所以是不可逆的。


常見雜湊函式構建方法有五種


①直接定址法:


取關鍵字或關鍵字的某個線性函式值為雜湊地址


H(key) = key 或 H(key) = a·key + b


 


②相乘取整法:


首先用關鍵字key乘上某個常數A(0 < A < 1),


並抽取出key.A的小數部分;


然後用m乘以該小數後取整。


 


③平方取中法:


取關鍵字平方後的中間幾位為雜湊地址。


 


④除留餘數法:


取關鍵字被數p除後所得餘數為雜湊地址:


H(key) = key MOD p (p ≤ m)。


 


⑤隨機數法:開發:StPv888


選擇一個隨機函式,


取關鍵字的隨機函式值為它的雜湊地址,


即 H(key) = random (key),


其中random為隨機函式。


include

using namespace std;


typedef unsigned long long ull;//溢位寫法


ull base = 19260817;//魔法進位制 新增以後能讓程式碼-1s


ull a[10010];


char s[10010];


int n, ans = 1;


int prime = 19260817;//選取取模以後加上的一個質數


ull mod = 212370440130137957ll;//選取基本雜湊模 也就是一個key


//假設選取的模數和質數恰當 那麼雜湊碰撞的機率也就越小


//我們就認為雜湊的正確率是可觀的


//本文只是單雜湊寫法 不涉及極端的情況


ull Thehash(char s[])//傳入一個字串


{


  int len = strlen(s);


  ull ans = 0;


  for (int i = 0; i < len; i++)


    ans = (ans * base + (ull)s[i]) % mod + prime;//ans最後的值就是該字串經過雜湊以後的值


  return ans;


}


int main()


{


  scanf("%d", &n);


  for (int i = 1; i <= n; i++)


  {


    scanf("%s", s);


    a[i] = Thehash(s);//用a陣列來儲存雜湊的值


  }


  sort(a + 1, a + n + 1);//要排序以後才能用遍歷的方法比較是否出現一樣的值


  //注意從a+1開始排噢


  for (int i = 1; i < n; i++)


  {


    if (a[i] != a[i + 1])


      ans++;//比較雜湊值 如果雜湊值相等 那麼我們認為這個字串是相同的


  }


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70016646/viewspace-2936087/,如需轉載,請註明出處,否則將追究法律責任。

相關文章