帖一个PageRank算法的程序

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;
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值