在STL中使用int数组或unordered_map进行哈希处理?

时间:2018-09-21 19:14:44

标签: performance stl

使用STL中的int数组或unordered_map在内存和时间复杂性哈希方面哪个更有效?
散列是指存储由键值和映射值的组合形成的元素,并根据其键快速检索各个元素。

实际上,我正在尝试解决this问题。 这是我的解决方案:-

#include <bits/stdc++.h>
#define MAX 15000005
using namespace std;

/*
 * author: vivekcrux
 */

int gcd(int a, int b) 
{ 
    if (b == 0) 
        return a; 
    return gcd(b, a % b);  
} 

int c[MAX];
int n;

int sieve()
{
    bitset<MAX> m;
    m.set();
    int ans = 0;
    for(int i=2;i<MAX;i++)
    {
        if(m[i])
        {
            int mans = 0;
            for(int j=i;j<MAX;j+=i)
            {
                m[j]=0;
                mans += c[j];
            }
            if(mans<n)
            ans = max(ans,mans);
        }
    }
    return ans;
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);



    int i,j;
    cin>>n;
    int a[n+1];

    for(i=0;i<n;i++)
    {
        cin>>a[i];
    }

    int g = a[0];
    for(i=1;i<n;i++)
    {
        g = gcd(g,a[i]);
    }

    for(i=0;i<n;i++)
    {
        a[i] /= g;
        if(a[i]!=1) c[a[i]]++;
    }

    int m = sieve();

    if(m==0)
        cout<<"-1";
    else
        cout<<n - m<<endl;
    return 0;
}

在此代码中,如果我使用

unordered_map<int,int> c;

代替

int c[MAX];

我得到了超出内存限制的结论。我发现here的unordered_map平均具有恒定的平均时间复杂度,但是这里没有提及有关空间复杂度的详细信息。我想知道为什么我要获得unordered_map的MLE。

0 个答案:

没有答案