Почему мои таймеры функций продолжают давать ноль в качестве выхода? - PullRequest
1 голос
/ 05 декабря 2011

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

void HashTable_chaining::SearchChainingHT(vector<string> QueryArray)
{
    clock_t start, stop, time = 0;
    int i = 0;
    while(i != QueryArray.size())
    {
        start = clock();
        find(QueryArray[i]);
        stop = clock();
        time += stop - start;
        i++;
    }
    time = (double)(time/CLOCKS_PER_SEC)*1000;
    cout << "\nThe total time for Search Chaining was " << time << "\nThe average time was " << time/QueryArray.size();
}

Ответы [ 3 ]

4 голосов
/ 05 декабря 2011

Вы делаете целочисленное деление:

(double)(time/CLOCKS_PER_SEC)*1000;

вы хотите использовать бросок внутри () вместо:

((double)time/CLOCKS_PER_SEC)*1000;

Более того, я не уверен, почему вы присваиваете его обратно time, поскольку это целочисленная переменная. Если вы хотите это в миллисекундах, вы можете сделать это явным:

cout << "\nThe total time for Search Chaining was " << time << "  (milliseconds)" << ...

РЕДАКТИРОВАТЬ:

Сначала я это упустил (из-за горизонтальной прокрутки), но у вас также есть целочисленное деление здесь в конце строки печати:

.. << "\nThe average time was " << time/QueryArray.size();

Вы можете также привести его к double.

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

Mysticial отвечает на ваш вопрос, но я бы порекомендовал вообще не использовать clock(). Если ваш компилятор поддерживает C ++ 11, есть лучший вариант: #include <chrono>.

#include <chrono>

void HashTable_chaining::SearchChainingHT(vector<string> QueryArray)
{

    typedef std::chrono::steady_clock Clock;

    Clock::duration total_time = Clock::duration::zero();
    int i = 0;
    while(i != QueryArray.size())
    {
        Clock::time_point start = Clock::now();
        find(QueryArray[i]);
        total_time += Clock::now() - start;
        i++;
    }
    typedef std::chrono::duration<double,std::micro> microseconds;
    typedef std::chrono::duration<double,std::nano> nanoseconds;
    cout << "\nThe total time for Search Chaining was " << microseconds(total_time).count() << " microseconds.\n";
    cout << "The average time was " << nanoseconds(total_time/(double)QueryArray.size()).count() << " nanoseconds.\n";

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

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

...