帖一个PageRank算法的程序

来源:互联网 发布:纯阳脸型数据正太 编辑:程序博客网 时间:2024/06/06 14:12
bool GraphList::CalPageRank() {    this->pageRank = new float[this->numVertex + 1];    float *prTmp = new float[this->numVertex + 1];    if(!this->pageRank || !prTmp) {        cerr << "GraphList::CalPageRank: memory alocate error!" << endl;        return false;    }    for(int i = 0; i < this->numVertex; i ++) {        this->pageRank[i] = 1.0f;    }    map<int,int> id2index;    for(int i = 0; i < this->numVertex; i ++) {        id2index[this->graList[i].vertexId] = i;    }    for(int iTimes = 0; iTimes < PAGERANKTIMES; iTimes ++) { //迭代30次(可改)        for(int i = 0; i < this->numVertex; i ++) {            prTmp[i] = 0.0f;        }        for(int i = 0; i < this->numVertex; i ++) {            int eCount = 0;            for(Edge e = FirstEdge(graList[i].vertexId); e.to >= 0; e = NextEdge(e)) {                if(e.from != e.to) { //不考虑自己到自己的边                    eCount ++;                }            }            if(!eCount) {                continue;            }            for(Edge e = FirstEdge(graList[i].vertexId); e.to >= 0; e = NextEdge(e)) {                if(e.from != e.to) {                    prTmp[id2index[e.to]] += pageRank[i] / (float)eCount;                }            }        }        for(int i = 0; i < this->numVertex; i ++) {            this->pageRank[i] = (1 - PRDAMPINGFACTOR) + PRDAMPINGFACTOR * prTmp[i];        }        cout << "第" << iTimes << "次:" << endl;        for(int i = 0; i < this->numVertex; i ++){            cout << i << ": " << pageRank[i] << endl;        }    }    delete []prTmp;    prTmp = NULL;    return true;}


原创粉丝点击