• 散列hash初步


    散列的思想是将某个元素尽可能唯一地映射到一个整数,即用一个数唯一地表示一个元素。

    实例1:
    查找m个数在n个数中是否出现。
    例如n=5的数组{1,2,3,4,5},查找m=3的3个数{1,2,0},则1和2存在,0不存在。

    实例2:
    查找m个数在n个数中出现的次数。
    例如n=5的数组{1,2,2,3,5},查找m=2的2个数{1,2},则1出现了1次,2出现了2次。

    思路:
    一个典型的空间换时间的思路,就是用一个足够大的数组,此处设为hashTable[],用它覆盖所有可能的数,对每个数x,hashTable[x]表示它的性质。
    例如,输入数字的范围为0~9999共10000个数,则初始化为一个数组hashTable[10000]。对于数字N,hashTable[N]表示它的性质。
    这样,在依次读入n个数时就可以对每个数字N做预处理,直接将hashTable[N]设定为相应的状态。查询时读取hashTable[N]即可。

    对于实例1,可令hashTable的类型为bool,hashTable[N]为true表示该数出现,false表示未出现。初始时,hashTable[]全部为false,每读到一个数字N,将hashTable[N]设为true。
    对于实例2,可令hashTable的类型为int。初始时,hashTable[]全部0。每读到一个数字N,将hashTable[N]+1。

    代码:

    #include <iostream>
    using namespace std;
    
    //bool hashTable[10000] = { false };
    int hashTable[10000] = { 0 };
    
    int main()
    {
    	int n, m, x;
    	cin >> n >> m;
    	for (int i = 0; i < n; ++i)
    	{
    		cin >> x;
    		hashTable[x] = true;
    		//++hashTable[x];
    	}
    	for (int i = 0; i < m; ++i)
    	{
    		cin >> x;
    		//cout << hashTable[x];
    		if (hashTable[x] == true)
    			cout << "YES";
    		else
    			cout << "NO";
    		cout << endl;
    	}
    }
    
  • 相关阅读:
    android进度条
    编解码器的学习笔记(十):Ogg系列
    logcat使用
    KNN算法的理解
    Ewebeditor最新漏洞和漏洞指数
    HDU 4945 2048(DP)
    喜大本\ u0026普,微软的开源
    Problem A: Artificial Intelligence?
    Response.Redirect 打开这两种方法的一种新形式
    java Map 之 排序(key,value)
  • 原文地址:https://www.cnblogs.com/banmei-brandy/p/14303094.html
Copyright © 2020-2023  润新知