冲突解决策略是定义一个序列F(i)=ri,其中r0=0且r1,r2……rN是前N个整数的随机排列(每个整数恰好出现一次)
来源:互联网 发布:买断软件源码 编辑:程序博客网 时间:2024/05/17 23:08
数据结构与算法分析——c语言描述 练习5.5e 答案
hashQuad.c
#include"hashQuad.h"#include"fatal.h"#include<math.h>#include<string.h>#define MinTableSize 5enum KindOfEntry { Legitimate, Empty, Deleted };struct HashEntry {ElementType element;enum KindOfEntry info;};typedef struct HashEntry Cell;struct HashTbl {int tableSize;int hasInsertedNum;Cell *theCells;//数组int* randomArr;};static int RandInt(int i, int j) {int temp;temp = (int)(i + (1.0*rand() / RAND_MAX)*(j - i));return temp;}static void getRandomInt(int *A, int n) {for (int i = 0; i < n; i++) {A[i] = i + 1;}for (int i = 1; i < n; i++) {//std::swap(A[i], A[RandInt(0, i)]); int randAdrr = RandInt(0, i);int t = A[i];A[i] = A[randAdrr];A[randAdrr] = t;}}static int hash(ElementType key, int tableSize) {return key % (tableSize);}static int isPrime(int num) {for (int i = 2; i <= sqrt(num); i++)if (num%i == 0)return 0;return 1;}static int nextPrime(int num) {int i = num;while (!isPrime(i))i++;return i;}int isLegitimate(Position pos, HashTable h) {return h->theCells[pos].info == Legitimate;}HashTable initializeTable(int tableSize) {HashTable h;int i;if (tableSize < MinTableSize) {Error("Table size too small");return NULL;}h = malloc(sizeof(struct HashTbl));if (h == NULL)FatalError("Out of space!!!");h->tableSize = nextPrime(tableSize);h->theCells = malloc(sizeof(Cell)*h->tableSize);h->hasInsertedNum = 0;h->randomArr = malloc(sizeof(int)*h->tableSize);getRandomInt(h->randomArr, h->tableSize);if (h->theCells == NULL)FatalError("Out of space!!!");for (i = 0; i < h->tableSize; i++) {h->theCells[i].info = Empty;}return h;}void destroyTable(HashTable h) {free(h->randomArr);free(h->theCells);free(h);}Position find(ElementType key, HashTable h) {Position currentPos = hash(key, h->tableSize);int collisionNum = 0;while (h->theCells[currentPos].info != Empty && h->theCells[currentPos].element != key) {currentPos = (currentPos + h->randomArr[collisionNum++]) % h->tableSize;}return currentPos;}HashTable insert(ElementType key, HashTable h) {if ((double)h->hasInsertedNum / h->tableSize > 0.5)h = rehash(h);Position pos = find(key, h);if (h->theCells[pos].info != Legitimate) {h->theCells[pos].element = key;h->theCells[pos].info = Legitimate;h->hasInsertedNum++;}return h;}HashTable rehash(HashTable h) {HashTable newH = initializeTable(h->tableSize * 2);for (int i = 0; i < h->tableSize; i++)if (h->theCells[i].info == Legitimate)insert(h->theCells[i].element, newH);destroyTable(h);return newH;}ElementType retrive(Position p, HashTable h) {return h->theCells[p].element;}
#include<stdlib.h>#include"hashQuad.h"#include<stdio.h>#define N 111int randIntArr[N];//这么大的数组放在全局变量上,如果放在main里就是放在程序的堆上,运行时再分配。放在外面就是编译时就分配在静态数据那。int main() {for (int i = 0; i < N; i++)randIntArr[i] = rand();HashTable h = initializeTable(100);for (int i = 0; i < N; i++)h = insert(randIntArr[i], h);destroyTable(h);}
0 0
- 冲突解决策略是定义一个序列F(i)=ri,其中r0=0且r1,r2……rN是前N个整数的随机排列(每个整数恰好出现一次)
- 编写一个javscript函数 fn,该函数有一个参数 n(数字类型),其返回值是一个数组,该数组内是 n 个随机且不重复的整数,且整数取值范围是 [2, 32]。
- 求解n个元素{r1,r2,…,rn}的全排列。 n个元素的全排列有n!种可能。
- 已知一个整数n,写一个函数f(n),返回0~n间,每个数中出现的“1”的个数,问最大的F(n)= n中n为多少
- N个整数(数的大小为0-255)的序列,把它们加密为K个整数(数的大小为0-255).再将K个整数顺序随机打乱,使得可以从这乱序的K个整数中解码出原序列。设计加密解密算法,且要求K<=15*N.
- 算法 - 有一个连续整数序列,里面随机存放的是0到99这100个不重复的整数,要求对该序列排序。
- 编程珠玑: 12章 取样问题 12.1程序的输入包含两个整数m和n,其中m<n。输出是0~n-1范围内m个随机整数的有序列表,不允许重复-------解题总结
- 编程珠玑: 12章 取样问题 12.1程序的输入包含两个整数m和n,其中m<n。输出是0~n-1范围内m个随机整数的有序列表,不允许重复。 优化解法-------解题总结
- 编程珠玑: 12章 取样问题 12.3设计空间,程序的输入包含两个整数m和n,其中m<n。输出是0~n-1范围内m个随机整数的有序列表,不允许重复。 -------解题总结
- 编程珠玑: 12章 取样问题 12.3设计空间,程序的输入包含两个整数m和n,其中m<n。输出是0~n-1范围内m个随机整数的有序列表,不允许重复。 解法2-------解题总结
- 71-给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个
- 给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。
- 判断一个整数能否被19整除,且恰好含有n个3
- 证明题:证明当n是一个整数且n>2时,方程x^n+y^n=z^n无正整数x,y,z的解。
- 使用集合操作,随机生成50个数字(整数),每个数字的范围是[10,50],统计出现次数最多的数字及其个数,并将每个数字机器出现的次数打印出来,打印是按照数字的升序排列
- 给出N个正整数,其中只有一个数出现了奇数次,其余的数都出现偶数次。求那个出现了奇数次的数。1<=N<=1000,N肯定是奇数。所有出现的整数都不超过1000。
- 输入n(n<100)个数,找出其中最小的数,将它与最前面的数交换后输出这些数.输入数据有多组,每组占一行,每行的开始是一个整数n,表示这个测试实例的数值的个数,跟着就是n个整数。n=0表示输入的结束,
- 查找整数:给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。
- 看到街头卖艺的,小孩子会说哇这个人好厉害,大人会说,他就是练这个的,一句话把自己撇的干干净净
- 看到街头卖艺的,小孩子会说哇这个人好厉害,大人会说,他就是练这个的,一句话把自己撇的干干净净
- eclipse的web project 的src目录问题
- 配图快速入门及地图性能优化(1)
- pyinstaller打包exe后报fatal error return -1
- 冲突解决策略是定义一个序列F(i)=ri,其中r0=0且r1,r2……rN是前N个整数的随机排列(每个整数恰好出现一次)
- windows下消息机制
- Selenium - Best practices
- andriod studio 快捷键
- android studio单元测试 无法进入网络请求的回调
- c++ 赋值操作符
- 通俗易懂之epoll--转自”知乎“
- Unity3D 游戏引擎之C#使用Socket与HTTP连接服务器传输数据包
- iOS开发工具Xcode史上最全快捷键