함수의 시간을 적절하게 측정 할 수없는 코드가 있습니다. 여기에서 측정 시간에 대한 게시물의 방향을 사용했습니다. ,하지만 분명히 아닙니다. 제게 도움이되지 않기 때문에 C++의 문서에 대한 링크가 없어도 일부 답장을 보내주십시오.C++ 프로그램 실행 시간 측정
#include <iostream>
#include<cstdlib>
#include <ctime>
using namespace std;
int ffibr(int n)
{
if (n<3)
return 1;
return ffibr(n-1)+ffibr(n-2);
}
int ffibi(int n)
{
int a = 1, b = 1,i;
for (i = 3; i <n+1; i++)
{
int c = a + b;
a = b;
b = c;
}
return b;
}
int ffibm(int n)
{
int q11,q12,q21,q22,
p11,p12,p21,p22,
w11,w12,w21,w22;
if(n < 2) return n;
q11 = q12 = q21 = 1;
q22 = 0;
w11 = w22 = 1;
w12 = w21 = 0;
n--;
while(n)
{
if(n & 1)
{
p11 = w11*q11 + w12 * q21;
p12 = w11*q12 + w12 * q22;
p21 = w21*q11 + w22 * q21;
p22 = w21*q12 + w22 * q22;
w11 = p11;
w12 = p12;
w21 = p21;
w22 = p22;
}
n >>= 1;
if(!n) break;
p11 = q11*q11 + q12 * q21;
p12 = q11*q12 + q12 * q22;
p21 = q21*q11 + q22 * q21;
p22 = q21*q12 + q22 * q22;
q11 = p11;
q12 = p12;
q21 = p21;
q22 = p22;
}
return w11;
}
int main()
{
int n;
cerr << "Podaj n-ty wyraz ciagu fibonacciego"<<endl;
cin >> n;
clock_t poczatek, koniec;
double czas1=0;
poczatek = clock();
for (int i=0; i<1000; ++i)
return ffibi(n);
koniec = clock();
czas1 = (double)(koniec-poczatek)/(double)(CLOCKS_PER_SEC);/
system("pause");
cerr << n<<" wyraz ciagu fibonacciego wyliczony metoda rekurencyjna to " << ffibr(n)<<endl;
cerr << n<<" wyraz ciagu fibonacciego wyliczony metoda iteracyjna to " << ffibi(n)<<endl;
cerr << n<<" wyraz ciagu fibonacciego wyliczony metoda macierzy to " << ffibm(n)<<endl;
cerr << "Czas trwania funkcji ffibi to " << czas1<<endl;
//cerr << "Czas trwania funkcji ffibr to " << czas2<<endl;
return 0;
}
기능이 작동하지만, 시간의 측정은 아니 잖아이 같은 s 번째 시도 :
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int ffibr(int n)
{
clock_t poczatek, koniec; // graniczne wartości pomiarowe
const int ILE = 1000; // liczba powtórzeń mierzonej funkcji
poczatek = clock(); // początek pomiaru
for (int i = 0; i<ILE; ++i)
if (n<3)
return 1;
return ffibr(n - 1) + ffibr(n - 2);
koniec = clock(); // koniec pomiaru
double czas1 = (koniec - poczatek)/(CLOCKS_PER_SEC*(double)ILE);
}
int ffibi(int n)
{
int a = 1, b = 1, i;
for (i = 3; i <n + 1; i++)
{
int c = a + b;
a = b;
b = c;
}
return b;
}
int ffibm(int n)
{
int q11, q12, q21, q22, // macierz Q
p11, p12, p21, p22, // macierz P
w11, w12, w21, w22; // macierz W
if (n < 2) return n;
// ustawiam macierz Q
q11 = q12 = q21 = 1;
q22 = 0;
// w macierzy W tworze macierz jednostkową
w11 = w22 = 1;
w12 = w21 = 0;
n--; // będzie nam potrzebna n-1 potęga Q
while (n)
{
if (n & 1)
{
// wykonujemy mnożenie P = W x Q
p11 = w11*q11 + w12 * q21;
p12 = w11*q12 + w12 * q22;
p21 = w21*q11 + w22 * q21;
p22 = w21*q12 + w22 * q22;
// wynik przenosimy: W = P
w11 = p11;
w12 = p12;
w21 = p21;
w22 = p22;
}
n >>= 1; // usuwamy z n sprawdzony bit
if (!n) break;
// podnosimy Q do kwadratu: P = Q x Q
p11 = q11*q11 + q12 * q21;
p12 = q11*q12 + q12 * q22;
p21 = q21*q11 + q22 * q21;
p22 = q21*q12 + q22 * q22;
// wynik przenosimy: Q = p
q11 = p11;
q12 = p12;
q21 = p21;
q22 = p22;
}
return w11;
}
int main()
{
int n;
cerr << "Podaj n-ty wyraz ciagu fibonacciego" << endl;
cin >> n;
cerr << n << " wyraz ciagu fibonacciego wyliczony metoda rekurencyjna to " << ffibr(n) << endl;
cerr << n << " wyraz ciagu fibonacciego wyliczony metoda iteracyjna to " << ffibi(n) << endl;
cerr << n << " wyraz ciagu fibonacciego wyliczony metoda macierzy to " << ffibm(n) << endl;
cerr << "Czas trwania funkcji ffibi to " << czas1 << endl;
//cerr << "Czas trwania funkcji ffibr to " << czas2<<endl;
return 0;
}
I가 무엇이 잘못되었는지 n 개의 아이디어 ...
for 루프에서'return ffibi (n);'가 분명히 매우 잘못되었습니다. –
'기능은 작동하지만 시간 측정이 안됨 '무언가가 작동하지 않을 수있는 많은 방법이 있습니다. 제발 좀 더 구체화 –
그리고 내가 연구를 많이 언급했다. –