Хеширование с использованием массива int или unordered_map в STL? - PullRequest
0 голосов
/ 21 сентября 2018

Что является более эффективным с точки зрения хеширования памяти и сложности времени с использованием массива int или unordered_map в STL?Под хэшированием я подразумеваю хранение элементов, образованных комбинацией значения ключа и сопоставленного значения, и быстрый поиск отдельных элементов на основе их ключей.На самом деле я пытался решить этот вопрос.Вот мое решение: -

#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];

, я получаю вердикт превышения лимита памяти. У меня естьобнаружил здесь , что unordered_map имеет в среднем постоянную сложность по времени, но никаких подробностей о сложности пространства здесь не упоминается. Интересно, почему я получаю MLE с unordered_map.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...