(이글 바로 위에 등록되어 있던 김백일.cedar 님의 글이 삭제되어 없어졌군요.)
(따라서, 어쩔 수 없이 저도 제목을 바꾸어야 했습니다.)
지금 제가 작성한 코드와 님이 작성한 코드의 수행 속도를 비교 해보고 이런 말씀을 하시는 겁니까?
핵심만 뽑자면 아래 두 함수의 수행속도 차이를 비교해야 하는 것으로 생각됩니다.
두함수를 매개변수를 10000 정도로 해서 수행속도를 한 번 비교해보십시오.
제가 잘못 비교한 게 아니라면 님의 코드의 수행속도가 훨씬 느린 것으로 나옵니다.
제가 작성한 코드에서는 님의 코드에서 사용하는 알고리즘 partial_sum과 같이 앞의 합을 다시 산출할 필요가 없도록 t를 사용하고 있음을 아셔야 할 것입니다.
님의 코드는 불필요하게 추가 메모리를 사용하므로써 그에 따른 속도 저하가 발생합니다.
void Progression1(unsigned n)
{
unsigned __int64 an=0,t=0;
for(unsigned k=1 ;k<=n ;++k){
an=0;
t=0;
for(unsigned i=1 ;i<=k ;++i){
t = t + i;
an = an + t;
}
}
}
void Progression2(unsigned n)
{
//cout << "Illustrating the generic iota and partial_sum algorithm.\n";
//const int N = 20;
for(unsigned k=1 ;k<=n ;++k)
{
vector<int> x1(k), x2(k);
iota(x1.begin(), x1.end(), 1);
//ostream_iterator<int> out(cout, " ");
//copy(x1.begin(), x1.end(), out);
//cout << endl;
// Compute the partial sums of 1, 2, 3, ..., N
// putting the result in x2:
partial_sum(x1.begin(), x1.end(), x2.begin());
//copy(x2.begin(), x2.end(), out);
//cout << endl;
}
}
김백일.cedar 님이 쓰신 글 :
: 질문이여 님이 쓰신 글 :
: : 안녕하세여
: : 1+(1+2)+(1+2+3)+(1+2+3+4)+....(1+2+3+.....+10) 이런건데여
: : 다음과 같은 군수열의 값을 출력하는 프로그램 작성이거든여?
: : 문제자체를 이해못하것네여 ㅠ_ㅠ 도와주세여
:
: 답변이여님의 첫번째 답변처럼 일반항을 계산해서 구하는 것은
: 당근 출제자가 원하는 답이 아닙니다.
: 그렇다고 두번째 답변처럼 매번 부분합을 계산한다면,
: 메모리는 절약되지만 속도는 상당히 느린방법이죠.
:
: 메모리보다는 속도를 최우선으로 하려면
: 배열에다가 각 부분합을 저장하는 방식으로 해야 합니다.
:
: 제가 쓴 다음 글을 참고하세요.
:
http://www.borlandforum.com/impboard/impboard.dll?action=read&db=cpp_tip&no=5