From: Jon Harrop Date: 2006-08-04T11:35:04+09:00 Subject: Re: For performance, don't write it in C++ Jon Harrop wrote: > Here are my 32-bit timings (language versions are the same): > > Compile Run > C 0.126s 0.386s gcc -O3 -Wall > OCaml2 0.089s 0.391s ocamlopt > OCaml2 0.010s 10.111s ocamlc > Java 1.615s 12.745s javac Here's a C++ implementation: C++ 0.652s 0.608s g++ -O3 -Wall (95% of time is spent in addRow()) #include #include #include using namespace std; int fact(int n) { return n == 0 ? 1 : n*fact(n-1); } int size=5; vector list(size); int n = fact(size); vector< vector > perms(n); vector< vector > compat(n); vector board(size); string out(size*(size+1), ':'); void print() { for (int i=0; i &compat, int row) { int prev_row = 0; while (prev_row < row && compat[board[prev_row]]) ++prev_row; return prev_row; } void addRow(int row) { if (row == size) print(); else for (int latest=0; latest(list.begin(), list.end()); next_permutation(list.begin(), list.end()); } for (int i=0; i(n); for (int j=0; j