Вычисление времени выполнения вставки хеша? - PullRequest
1 голос
/ 03 декабря 2011

Мне нужно рассчитать время выполнения вставки хеша. Я использовал часы, чтобы сделать время, но я продолжаю заканчивать с нуля. Есть ли определенный способ, который будет наиболее эффективным?

На данный момент это мой код:

cout << "Testing chaining probing...\n";
    HashTable_chaining ChainingHT( ITEM_NOT_FOUND, 101 );
    int i = 0;
    while(i != DataArray.size())
    {
        clock_t tStart = clock();
        ChainingHT.insert(DataArray[i]);
        cout<<"Time taken:"<<(double)(clock() - tStart)/100000<<endl;
        if(i != NULL)
        {
            collision_count++;
        }
        i++;

    }   

Ответы [ 3 ]

3 голосов
/ 03 декабря 2011

одиночная вставка хеша слишком быстра для измерения.Поместите

 clock_t tstart = clock();

в начале вашей программы, сделав миллион вставок и

 clock_t tend = clock();

в конце.Затем вычислите с плавающей запятой:

 cout << "cpu time=" 
      << ((double)tend - (double)tstart) / CLOCKS_PER_SEC << endl;

Типичные современные компьютеры выполняют несколько миллиардов элементарных машинных инструкций в секунду (но с разрешением часов в миллисекундах в лучшем случае).

1 голос
/ 03 декабря 2011

Мое первое предположение, что вставка очень быстрая, так что вы получаете нули ... Я бы никогда не сделал то, что вы пытаетесь в этом коде. Вместо этого я сделал бы, скажем, 10000 вставок, а затем вычислил, сколько времени это занимает, и разделил бы это число на 10000, чтобы получить среднее время, необходимое для вставки.

0 голосов
/ 03 декабря 2011

выполнение цикла вставки 10000/100000/1000000 - это нормально (вам нужно играть с количеством вставок, пока не получите значение, которое не требуется для запуска).

Если вы работаете в Windows, рассмотрите возможность использования счетчиков производительности , чтобы получить гораздо лучшее разрешение (см. Код внутри).

...