zoukankan      html  css  js  c++  java
  • 哈希表

    哈希表(好不容易搞懂了)

    知识讲解

        如果存储和使用线性表(1,75,324,43,1353,90,46),那么,只要定义一个一维数组和a[7],将表中元素按先后顺序存储在a[i]中即可。但是,这样的存储结构会给“查找算法”带来O(n)的时间开销,尤其是n很大时,效率比较差。当然,也可以采用“二分查找”提高效率。反之,为了用O(1)的时间实现查找,可以分析这个线性表的元素类型和范围,定义一个一维数组a[1353],使得a[key]=key,即线性表的key这个元素存储在a[key]中。这样一来,查找的时间效率高了,空间上的开销却大了,尤其是数据范围分布很广时。为了使空间开销减小,可以对这种方法进行优化,设计一个函数h(key)=key mod 13,然后把key存储在a[h(hey)]中。这样一来,只要定义一个一维数组a[12]就足够了。这种线性表的这种结构称之为哈希表(Hash Table)

        哈希表,又称散列表。是利用关键字与地址的直接映射关系产生的列表。他的最大优势在于,一个关键字对应一个存储位置(理想情况下),而我们直接就可以由key值找到其在散列表中的位置,大大缩减了我们查找的时间。

    哈希表的构造方法

    哈希表构造原则:1.计算简单,复杂算法将会影响查找上的优势 2.散列地址分布均匀,这样我们不需要过多的解决散列表冲突问题,提高效率。

    构造具体方法

    • 由于是比较简单的哈希表,因此哈希函数我选择了简单的除留余数法f(key)=key mod p(p<=m)。
    • 处理冲突的时候,我采用了开放定址法f(key) = (f(key)+di) mod m(di=1,2,3,4...m-1)

     例题

    题目描述

    好吧,题目是这样的:给出一串数以及一个数字 C,要求计算出所有 A-B=C 的数对的个数。(不同位置的数字一样的数对算不同的数对)

    输入输出格式

    输入格式:

    第一行包括22个非负整数NN和CC,中间用空格隔开。

    第二行有NN个整数,中间用空格隔开,作为要求处理的那串数。

    输出格式:

     输出一行,表示该串数中包含的所有满足A-B=CAB=C的数对的个数。

    输入输出样例

    输入样例#1:
    4 1
    1 1 2 3
    
    输出样例#1:
    3


    例题代码
     1 #include <iostream>
     2     #include <map>
     3     using namespace std;
     4     typedef long long LL;
     5     LL a[200001];
     6     map<LL,LL> m;
     7     int main() {
     8         int n;
     9         LL c;
    10         LL ans=0;
    11         cin >> n >> c;
    12         for(int i=1;i<=n;i++) {
    13             cin >> a[i];
    14             m[a[i]]++;
    15             a[i]-=c;    
    16         } 
    17         for(int i=1;i<=n;i++) ans+=m[a[i]];
    18         cout << ans << endl;
    19         return 0;
    20 }


  • 相关阅读:
    tensorflow1版本和2版本语句兼容
    Tensorflow暑期实践——基于多隐层神经网络的手写数字识别(全部代码+tensorboard可视化)
    Tensorflow暑期实践——基于多隐层神经网络的手写数字识别
    Tensorflow暑期实践——基于单个神经元的手写数字识别(全部代码)
    Tensorflow暑期实践——波士顿房价预测(全部代码)
    Tensorflow暑期实践——基于单个神经元的手写数字识别
    Tensorflow暑期实践——波士顿房价预测
    (1)什么是自动化测试框架
    c++11关键字noexcept
    CTK-使用ctk框架完成日志、打印、界面插件
  • 原文地址:https://www.cnblogs.com/weilinxiao/p/11069218.html
Copyright © 2011-2022 走看看