哈希游戏系统开发详细方案丨哈希竞猜游戏开发技术逻辑(源码部)
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++;//比较哈希值 如果哈希值相等 那么我们认为这个字符串是相同的 }