添加计数器时减少执行时间

时间:2014-05-04 06:09:08

标签: c++ optimization

我正在制定计划,以找出解决学校项目高峰时间类型问题所需的行动次数。 (Like this.)我已经让它工作了,我正在努力让它运行得更快。我已经为我的跑步计时,并决定添加一个计数器来查看我经历的循环次数,并注意到我的运行时间下降了很多。从平均2.5秒到平均0.1秒。

这是我的主要代码:

int main() {

board test;
map<string, bool> dejavu;
map<string, bool>::iterator it;
queue<board> q;
int runs=1;
test.loadBoard();

int abcd=0; //This is the line which changes runtime.

Timer t;
t.start();

while( test.numCars>0) {
    q.push(test);
    dejavu.insert(make_pair(test.data,0));
    int n=test.numCars;
    int m;
    bool done = test.solved( m );
    while( !q.empty() && !done ) {
        test = q.front();
        q.pop();
        for( int i=0; i<n && !done; i++ ) {
            if( test.moveVehicleForward(i)) {
                test.moves++;
                if( test.solved(m) ) {
                    done = true;
                }
                if( dejavu.end() == dejavu.find(test.data) ) {
                    q.push(test);
                    dejavu.insert(make_pair(test.data,0));
                }
                test.moveVehicleBack(i);
                test.moves--;
            }
            if( test.moveVehicleBack(i)) {
                test.moves++;
                if( test.solved(m) ) {
                    done = true;
                }
                if( dejavu.end() == dejavu.find(test.data) ) {
                    q.push(test);
                    dejavu.insert(make_pair(test.data,0));
                }
                test.moveVehicleForward(i);
                test.moves--;
            }
        }
    }
    q=queue<board>();
//  cout << "Scenario " << runs << " requires " << m << " moves" << endl;
    runs++;
    test.loadBoard();
}
    t.stop();
    cout << "Runtime: " << t.getElapsedTime() << endl;
return 0;
}

我的课程板不使用动态内存。该课程由一个&#34; Board&#34; 1D阵列映射为2D阵列,电路板上的汽车数量,已完成的移动次数以及每辆汽车在电路板上的放置位置数据。

供参考,使用存在的代码行运行时间

  • 场景1需要93次移动
  • 场景2需要3次移动
  • 场景3需要10次移动
  • 运行时间:0.161239

与该行相同的测试用例注释掉了

  • 场景1需要93次移动
  • 场景2需要3次移动
  • 场景3需要10次移动
  • 运行时间:2.64724

(第一个测试用例是this,其中有两个简单的例子。)

编辑:编译时不使用优化,但使用-O3优化时运行时相同。

0 个答案:

没有答案