Mickey Mathieson a écrit :
> Not a valid comparison since you changed the calling
> conversion!
>
I am not sure what your are talking about...
But test is used only for iterative one.
test1 for your recurvise and test2 mine.
but, change whatever suit you for testing. I wait for your own test suites.
(4 single exe with time may be enough in fact)
David
PS : Sorry, it seems that my previous was attacked by some carriage returns.
> --- "[EMAIL PROTECTED]"
> <[EMAIL PROTECTED]> wrote:
>
>
>>> Mickey Mathieson a écrit :
>>> ...
>>>
>>> The second if test is not needed MY MISTAKE!!!
>>> Not paying complete attention.
>>>
>>> If you think you can come up with a BETTER
>>>
>> RECUSIVE
>>
>>> SOLUTION lets see it! Otherwise your blowing wind.
>>>
>>>
>>>
>> Ok let's try a complet test suite....
>> (I have already post a probably better - faster -
>> recursive
>> solution )
>>
>> // BEGIN CODE
>> #include <time.h>
>> #include <sys/time.h>
>>
>> #include <iostream>
>> #include <iomanip>
>> #include <algorithm>
>> using namespace std;
>>
>> char chaine[] = "eorvneoiruvnieabuvraiebrvlaebvlae\
>> iebrvlaebvlaebrvlaebrvlajehbreorvneoiruvnieabuvraie\
>> iebrvlaebvlaebrvlaebrvlajehbreorvneoiruvnieabuvraie\
>>
>>
> iebrvlaebvlaebrvlaebrvlajehbreorvneoiruvnieabuvraie";
>
>> // your iterative reverse
>> char *RevStr(char *str )
>> {
>> int len = strlen(str);
>> for (int i = 0; i < len/2; i++)
>> {
>> char C = str[i];
>> str[i] = str[len-i-1];
>> str[len-i-1] = C;
>> }
>> return(str);
>> }
>>
>> // mine iterative reverse (no strlen cost)
>> char* reverse( char* str )
>> {
>> char* begin = str, *end = str;
>> while( *end ) ++end; // go to the end
>> while( end > begin )
>> { // swap begin and end until they join
>> char c = *--end;
>> *end = *begin;
>> *begin++ = c;
>> }
>> return str;
>> }
>>
>> // your Recursive Reverse String
>> char *RevStr(int count, char *str)
>> {
>> if (!count) return(str);
>> char Value = str[count-1];
>> RevStr(count-1, str);
>> str[strlen(str) - count] = Value;
>> return(str);
>> }
>>
>> // mine recursive reverse between
>> // [begin,end] ( div by 2 numbers and depth calls )
>> char* reverse_r( char* begin, char* end )
>> {
>> if ( end <= begin ) return begin;
>> char c = *end; *end = *begin; *begin = c; //swap
>> reverse_r( begin+1, end-1 );
>> return begin;
>> }
>>
>> // A simple scope-chrono
>> struct Chrono {
>> timeval tv_begin;
>> Chrono() { gettimeofday( &tv_begin, 0 ); }
>> ~Chrono()
>> {
>> timeval tv_end;
>> gettimeofday( &tv_end, 0 );
>>
>> time_t elapsedSecond = tv_end.tv_sec -
>> tv_begin.tv_sec;
>> useconds_t elapseduSecond = tv_end.tv_usec -
>> tv_begin.tv_usec;
>> if ( elapseduSecond < 0 ) {
>> elapseduSecond += 1000000;
>> --elapsedSecond;
>> }
>> cout << " Duration = " << elapsedSecond << ","
>> << setfill( '0' ) << setw( 6 ) <<
>> elapseduSecond <<
>> endl;
>> }
>> };
>>
>> // some launchers
>> void test( char* (*fct)(char* ), int num ) {
>> Chrono c;
>>
>> for ( int i = 0; i < num; ++i )
>> fct( chaine );
>> }
>>
>> void test_r1( int num ) {
>> Chrono c;
>>
>> size_t size = strlen( chaine );
>> for ( int i = 0; i < num; ++i )
>> RevStr( size, chaine );
>> }
>>
>> void test_r2( int num ) {
>> Chrono c;
>>
>> size_t size = strlen( chaine );
>> for ( int i = 0; i < num; ++i )
>> reverse_r( chaine, chaine + size - 1 );
>> }
>>
>> // -------------------
>> int main( int argc, char*argv[])
>> {
>> int numLoop = (argc>1?atoi(argv[1]):10000);
>>
>> // tests
>> cout << RevStr( strlen( chaine ), chaine ) <<
>> endl;
>> cout << reverse_r( chaine, &chaine[0] +
>> strlen(chaine)-1 )
>> << endl;
>> cout << RevStr( chaine ) << endl;
>> cout << reverse( chaine ) << endl;
>>
>> test( RevStr, numLoop ); // your iterative
>> test( reverse, numLoop ); // mine iterative
>> test_r1( numLoop ); // your recursive
>> test_r2( numLoop ); // mine recursive
>> }
>>
>>
>> // END CODE
>>
>> Using 50000 iterations on a relative short string
>>
>> first result in second at your (iterative only)
>> advantage on
>> hp-ux using aCC
>> Duration = 0,051188
>> Duration = 0,059516
>> Duration = 2,055472
>> Duration = 1,4294049812
>>
>> second result in second at mine advantage on linux
>> using g++ 3.4
>>
>> Duration = 0,037910
>> Duration = 0,013299
>> Duration = 3,811505
>> Duration = 0,023039
>>
>> under an unix flavor you can make your own tests (or
>> port
>> the chrono
>> under windows)
>>
>> Regards,
>> David