PAT (Advanced Level)-1145 Hashing - Average Search Time

1145 Hashing - Average Search Time(25 分)

The task of this problem is simple: insert a sequence of distinct positive integers into a hash table first. Then try to find another sequence of integer keys from the table and output the average search time (the number of comparisons made to find whether or not the key is in the table). The hash function is defined to be H(key)=key%TSize where TSize is the maximum size of the hash table. Quadratic probing (with positive increments only) is used to solve the collisions.

Note that the table size is better to be prime. If the maximum size given by the user is not prime, you must re-define the table size to be the smallest prime number which is larger than the size given by the user.

Input Specification:

Each input file contains one test case. For each case, the first line contains 3 positive numbers: MSize, N, and M, which are the user-defined table size, the number of input numbers, and the number of keys to be found, respectively. All the three numbers are no more than 10​4​​. Then N distinct positive integers are given in the next line, followed by M positive integer keys in the next line. All the numbers in a line are separated by a space and are no more than 10​5​​.

Output Specification:

For each test case, in case it is impossible to insert some number, print in a line X cannot be inserted. where X is the input number. Finally print in a line the average search time for all the M keys, accurate up to 1 decimal place.

Sample Input:

4 5 4
10 6 4 15 11
11 4 15 2
 

Sample Output:

15 cannot be inserted.
2.8

不错的文章 :https://blog.csdn.net/qq_27093465/article/details/52348366

思路:

哈希函数:H(key) = key % TSize 

处理冲突方法:Hi = (H(key) + di) % TSize 

其中di∈ 1*1 , -1*1 , 2*2 , -2*2 , ··· k*k , -k*k (k < TSize)

每次查询基准为1步,d从0*0开始 

题目中提到 with positive increments only 只需要考虑正增量即可。

 

插入情况:如果k ∈[0, Tsize) 内都没有找到空位置,则插入失败。 
查询情况:执行和插入一样的操作,如果定位到的元素和当前元素相同,说明找到了;如果定位到的位置是空的,说明当前查询的元素不在哈希表中;如果k ∈[0, Tsize) 内都没有找到,说明该元素无法插入,将查询总数+1。

题目中提醒:如果给定的TSize是合数,则要变为>Tsize的最小素数。比如10000 ->10007

#include <iostream>
#include <vector>
#include <cmath>
using namespace std;


int msize, n, m;
vector<int>ef;
int isprime(int n)
{
	if (n < 2)return 0;
	for (int i = 2; i <= sqrt(n); ++i)
	{
		if (n%i == 0)
		{
			return 0;
		}
	}
	return 1;	
}
void insert(int key)
{
	int i = 0,h;
	while (i < msize)
	{
		h = (key % msize + i * i)%msize;
		if (ef[h] == 0)
		{
			ef[h] = key;
			return;
		}
		i++;
	}
	printf("%d cannot be inserted.\n",key);	
}

int search(int key)
{
	int  h,cnt = 0, i = 0;
	while (i < msize)
	{
		cnt++;
		h = (key % msize + i * i) % msize;
		if (ef[h] == 0||ef[h]==key)
		{
			return cnt;
		}
		i++;
	}
	return cnt + 1;
}

int main()
{
	int  i;
	double sum = 0;
	
	scanf("%d %d %d", &msize, &n, &m);
	while (!isprime(msize))msize++;
	ef=vector<int>(msize);
	for (i = 0; i < n; ++i)
	{
		int val;
		scanf("%d", &val);
		insert(val);
	}
	for (i = 0; i < m; ++i)
	{
		int val;
		scanf("%d", &val);
		sum+=search(val);

	}
	printf("%.1lf\n", sum / m);

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 深度跨模态哈希化是一种将不同模态的数据(如图像和文本)映射到低维二进制编码的技术。这种哈希化方法可以用于跨模态检索和多模态数据分析等任务。深度跨模态哈希化通常使用深度神经网络来学习数据的表示,并使用损失函数来优化哈希函数。 ### 回答2: 深交叉模态哈希(Deep Cross-Modal Hashing)是一种用于跨模态查询的哈希方法,主要应用于大规模多媒体数据检索的场景。它可以将不同类型的信息(如图像、文本和视频)编码为紧凑的二进制哈希码,使得哈希码能够在不同模态间保持高质量的相似性。 深交叉模态哈希主要基于深度学习技术实现。通过对不同模态的数据进行编码,使得它们能够在一个统一的空间中表示,并且在该空间内距离越近的点越相似。这样,在哈希过程中,将这些点映射到二进制码空间时,距离较近的点将有更高的概率被映射到相同的哈希编码。这种方法可以提高哈希效率、压缩数据量、降低存储成本及提高检索速度。 在实践中,深交叉模态哈希被广泛应用于图像检索、视频检索和文本检索等领域。通过该方法,可以快速地检索出与查询相关的相似数据,并可以根据哈希码相似度进行排序和筛选。同时,深交叉模态哈希还可以将不同模态的数据相互转化,例如将文本转化为图像,从而在不同领域之间进行有益的交互。相信未来,随着深度学习技术的不断发展,深交叉模态哈希将会有更加广泛的应用。 ### 回答3: 深度交叉模态哈希(deep cross-modal hashing)是一种将多模态数据(如图像、文本、音频等)进行哈希编码的方法。该方法通过将多个模态数据输入到一个深度神经网络中,学习到一个交叉模态表示,然后使用该表示生成哈希编码。相比传统的单模态哈希方法,深度交叉模态哈希能够有效地利用多模态数据之间的关联,提高哈希编码的质量和准确性。 深度交叉模态哈希的具体实现方法通常分为以下几步骤: 1. 多模态数据处理 将多模态数据(如图像、文本、音频等)输入到网络中进行处理,通常使用卷积神经网络或循环神经网络来提取数据的特征。 2. 交叉模态表示学习 将多模态数据提取的特征输入到一个共享的交叉模态表示学习网络中进行训练,该网络将不同模态之间的信息进行交叉融合,并学习到一个交叉模态表示。 3. 哈希编码生成 使用学习到的交叉模态表示生成哈希编码,通常使用如余弦相似度等方法来量化哈希编码的相似度。 深度交叉模态哈希的优点在于能够有效地利用多模态数据之间的相关性,同时可以保留数据的原始特征,有利于后续的数据处理和应用。但是由于网络结构较为复杂,训练和计算成本较高,且对输入数据的质量和数量有一定要求,因此在实际应用中仍需考虑多方面因素。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值