Что является более эффективным с точки зрения хеширования памяти и сложности времени с использованием массива 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.