Мне пришлось использовать структуру данных, которая сохраняет элементы в некотором порядке, такие как Я могу запросить наименьший элемент, а также вставить новые элементы эффективно. Поэтому я выбрал set (C++ stl)
. Требуется log(n)
раз вставка и log(n)
для удаление наименьший элемент.C++ набор медленнее?
Так я написал следующую программу:
#include<iostream>
#include<set>
#include<stdio.h>
using namespace std;
int main()
{
set<int>s1,s2;
set<int>::iterator it;
int tmp,i;
for(i=1;i<=1000000;i++)s1.insert(i);
for(i=1;i<=1000000;i++)
{
it=s1.begin();
s2.insert(*it);
s1.erase(s1.begin());
}
return 0;
}
но это занимает 1.67
секунд на моей машине (я сердечник 3) я ожидал гораздо меньше O(log(1000000)*1000000)
т.е. 2*10^7
я пытался очереди приоритетов также он дал мне такая же производительность. Так что я должен реализовать свою собственную кучу, чтобы сделать ее быстрее или есть какой-то другой способ?
(Эти (нерелевантные) макросы дают мне крипы.) – Mat
жаль, что я только что вложил всю свою программу, ее мой шаблон – sashas
Пожалуйста, объясните, почему вы ожидали лучше, чем 1,6. Анализ сложности может помочь вам прогнозировать масштабирование с размером проблемы, но не будет прогнозировать абсолютные времена. –