优先队列性能

时间:2017-10-13 20:42:03

标签: c++ algorithm c++11 queue dijkstra

我使用存储数字对的优先级队列编写了一个稍微修改过的Dijkstra算法。 当我宣布它为

priority_queue < pair<int,int> > Q;

它是痛苦的慢 - 268毫秒。 另一方面,如果我把它写成

priority_queue < pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>> > Q;

它的速度应该是12毫秒。

算法的代码如下

void dijkstra(int inode){
    for(int i=1;i<=n;++i)dp[inode][i]=inf;
    Q.push({0,v[inode]});
    dp[inode][v[inode]]=0;
    while(!Q.empty()){
        int node=Q.top().second;
        int dist=Q.top().first;
        Q.pop();
        if(dp[inode][node]<dist)continue;
        for(auto edge: G[node]){
            if(dp[inode][edge.first]>dist+edge.second){
                dp[inode][edge.first]=dist+edge.second;
                Q.push({dp[inode][edge.first],edge.first});
            }
        }
    }
}

我缺少什么?这种差异来自哪里?

0 个答案:

没有答案