国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

1078. Hashing (25)

2019-11-08 20:07:38
字體:
來源:轉載
供稿:網友

1. 原題: https://www.patest.cn/contests/pat-a-PRactise/1078

2. 思路:

題意:求散列地址,沖突解決方法是平方探測法。思路:不熟悉散列表的翻下書哈。題目要求表長是大于等于給出長度的素數。已AC。

3. 源碼

#include<iostream>#include<algorithm>//使用sqrt函數#include<vector>using namespace std;int N, len;//分別為元素個數, 給定的散列表長度vector<int> flag;//標記是否有元素int isPrime(int x);//是否素數int getSize(int x);//求出散列表長度int hashKey(int x);//求散列地址int main(void){	//freopen("in.txt", "r", stdin);	scanf("%d %d", &len, &N);	len = getSize(len);//求出表長度	flag.resize(len, 0);	int key, pos;//分別為元素值, 散列地址	for (int i = 0; i < N; i++)	{		if (i != 0)			printf(" ");		scanf("%d", &key);		pos = hashKey(key);		if (pos == -1)//無法散列			printf("-");		else			printf("%d", pos);	}	printf("/n");	return 0;}int isPrime(int x)//是否素數{	if (x == 1)		return 0;	for (int i = 2; i <= (int)sqrt(x); i++)	{		if (x % i == 0)			return 0;	}	return 1;}int getSize(int x)//求出散列表長度{	if (isPrime(x) == 1)		return x;	int i;	for (i = x + 1; i; i++)	{		if (isPrime(i) == 1)			break;	}	return i;}int hashKey(int x)//求散列地址{	int val = x % len;//散列地址	if (flag[val] == 0)//表示該地址為空	{		flag[val] = 1;		return val;	}	int cnt = 0;//記錄沖突次數	int k = 0;	while (k <= len / 2)//平方探測法的最大增量	{		cnt++;		if (cnt % 2 == 1)//奇數次沖突		{			k++;			val = (val + k*k) % len;		}		else//偶數次沖突		{			val -= k*k;			while (val < 0)//使得val符合正常范圍				val += len;		}		if (flag[val] == 0)		{			flag[val] = 1;			return val;		}	}	return -1;//無法散列}
上一篇:數據庫

下一篇:Spring MVC學習

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 北宁市| 景洪市| 福建省| 桑日县| 云安县| 南和县| 华亭县| 内丘县| 视频| 鄂伦春自治旗| 施秉县| 江孜县| 全州县| 连城县| 无锡市| 金坛市| 逊克县| 永寿县| 成都市| 城步| 灵宝市| 长子县| 汝南县| 丁青县| 怀仁县| 余干县| 综艺| 南充市| 蒙山县| 丁青县| 铜鼓县| 利津县| 炉霍县| 宾川县| 安吉县| 和田市| 镶黄旗| 东阿县| 连山| 雅安市| 正安县|