Почему существует большая разница при измерении прошедшего времени в зависимости от того, где измерять? - PullRequest
0 голосов
/ 04 февраля 2020

Мой вопрос касается разницы истекшего времени в зависимости от точки.

Чтобы найти наибольшую часть общего истекшего времени при выполнении в моем коде, я использовал функцию clock.

source: Расчет времени, прошедшего в C ++

Сначала я поместил функцию clock в начало и конец основной функции. (На самом деле, есть некоторые объявления переменных, но я удалил их для удобства чтения моих вопросов). Тогда я думаю, что смогу измерить общее истекшее время.

int main(){

    using clock = std::chrono::system_clock;
    using sec = std::chrono::duration<double>;
    const auto before = clock::now();

...

    std::cin >> a >> b;
    lgstCommSubStr findingLCSS(a,b,numberofHT,cardi,SubsA);

    const sec duration = clock::now() - before;

    std::cout << "It took " << duration.count() << "s in main function" << std::endl;

    return 0;
}

Во-вторых, я поставил функцию clock в классе findingLCSS. Этот класс предназначен для поиска самой длинной общей подстроки между двумя строками. Это класс, который на самом деле делает мой алгоритм. Я пишу код для поиска его в конструкторе. Поэтому при создании этого класса он возвращает самую длинную общую информацию о подстроке. Я думаю, что это истекшее время будет фактическим временем работы алгоритма.

public:
    lgstCommSubStr(string a, string b, int numHT, int m, vector <int> ** SA):
        strA(a), strB(b), hashTsize(numHT), SubstringsA(SA),
        primeNs(numHT), xs(numHT),
        A_hashValues(numHT), B_hashValues(numHT),
        av(numHT), bv(numHT), cardi(m)
{

        using clock = std::chrono::system_clock;
        using sec = std::chrono::duration<double>;
        const auto before = clock::now();
...

        answer ans=binarySearch(a,b, numHT);

        std::cout << ans.i << " " << ans.j << " " << ans.length << "\n";


        const sec duration = clock::now() - before;

        std::cout << "It took " << duration.count() << "s in the class" << std::endl;

}

Вывод будет таким, как показано ниже.

tool coolbox
1 1 3
It took 0.002992s in inner class
It took 4.13945s in main function

Это означает, что 'tool' и 'coolbox' имеют подстроку ' ool '

Но меня смущает, что между двумя значениями есть большая разница.

Поскольку первый раз - общее время, а второй - время выполнения алгоритма, я должен подумать о его разнице. время - это прошедшее время для переменных объявления.

Но это выглядит странно, потому что я думаю, что время объявления переменных короткое.

Есть ли ошибка в измерении прошедшего времени?

Пожалуйста, дайте мне подсказку для устранения неполадок. Спасибо за чтение!

1 Ответ

0 голосов
/ 06 февраля 2020

Снимок времени до std::cin >> a >> b; приводит к неточному измерению, поскольку вы, скорее всего, запускаете часы, прежде чем ввести значения для a и b. Как правило, вы хотите, чтобы ваше время было как можно ближе к тому, что вы на самом деле измеряете.

...